This repository is a POC for using the action located at: https://github.com/marketplace/actions/action-monorepo-version-tags-lifecycle
The repository holds a product with two components.
| Description | Location | |
|---|---|---|
| product | Main application in python. | app folder |
| product deploy | Helm chart with two components. | metaapp/ folder |
| component | Hello Component python app. | hello-world/ folder |
| component | ByeBye Component python app. | byebye-world/ folder |
There are one workflow for each component, one workflow for the product and another one to create release branches.
The workflow runs on:
on:
pull_request:
branches:
- main
- "release/v*"
paths:
- "hello-world/**/*"
- ".github/workflows/hello-*"
push:
branches:
- main
- "release/v*"
paths:
- "hello-world/**/*"
- ".github/workflows/hello-*"| Job | Description> | Conditional on |
quality-checks |
Run all quality checks for the component. Linter & Tests. | |
create-release-tag |
Creates a new tag for the component. |
if: github.ref == 'refs/heads/main' # only in main branch
|
create-fix-tag |
Creates a new tag for the component. |
if: startsWith(github.ref, 'refs/heads/release') # only in release branches
|
build-release |
Create a new build artifact for the component. |
if: |
always() &&
(needs.create-release-tag.outputs.tag || needs.create-fix-tag.outputs.tag)
|
The workflow runs on:
on:
workflow_run:
workflows:
- "Hello Component Build"
- "ByeBye Component Build"
- "App Application Build"
types:
- completed| Job | Description> | Conditional on |
[calculate|create]-rc-tag |
Calculates or creates the next pre-release tag. |
# Just after a workflow completes successfully and the workflows was triggered in main branch
if: |
github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.head_branch == 'main'
|
[calculate|create]-fix-tag |
Calculates or creates the next fix tag. |
# Just after a workflow completes successfully and the workflows was triggered in a release branch
if: |
github.event.workflow_run.conclusion == 'success' &&
startsWith(github.event.workflow_run.head_branch, 'release')
|
release |
Release a new version of the product Chart with new versions. |
if: |
always() &&
(needs.calculate-rc-tag.outputs.tag ||
needs.calculate-fix-tag.outputs.tag ||
needs.calculate-release-tag.outputs.tag)
|
The workflow runs on:
on:
workflow_dispatch:| Job | Description> | Conditional on |
create-release-branch |
Creates a new release branch. | |
[calculate/create]-release-tag |
Calculates the next release tag. | |
release |
Generates a new release of the chart. |