APL Core releases are created with two manually triggered GitHub Actions workflows. Both workflows default to dry_run: true; run them in dry-run mode before allowing any writes.
A release cycle uses one releases/v<major.minor> branch, such as releases/v1.4. The branch covers all release candidates, the stable release, and subsequent patch releases in that major/minor series. It is created once and is not recreated.
Git tags are the source of truth for versions. package.json remains at 0.0.0; release workflows derive versions from tags, and builds receive the version through the Dockerfile VERSION build argument.
Images built from main or feature branches use a development version. The build tag follows the branch name and the VERSION build argument is set to next minor version.
| Event | Result |
|---|---|
Cut a minor branch after v6.0.0 |
releases/v6.1 |
First RC on releases/v6.1 |
v6.1.0-rc.1 |
| Next RC | v6.1.0-rc.2 |
| Stable promotion | v6.1.0 |
| First patch RC | v6.1.1-rc.1 |
| Stable patch promotion | v6.1.1 |
| main or feature branch | v6.2.0 |
Run the Release cut branch workflow from the branch that should start the release cycle, normally main.
The workflow finds the highest stable tag in the repository, applies the requested version bump, runs the release checks, and creates the new release branch. It does not create a release tag or publish artifacts.
- Open Actions > Release cut branch > Run workflow.
- Choose a
bump_typeofminorormajor. - Set
base_branch, normallymain. - Keep
release_branch_prefixset toreleases/. - Run once with
dry_runenabled. - Review the run, then run again with
dry_rundisabled.
Equivalent GitHub CLI commands for a minor release cycle from main:
# Dry run
gh workflow run release-cut-branch.yml --ref main \
-f bump_type=minor \
-f dry_run=true
# Create the branch after reviewing the dry run
gh workflow run release-cut-branch.yml --ref main \
-f bump_type=minor \
-f dry_run=falseRun the Release create from branch workflow from an existing releases/* branch.
For a release candidate, the workflow increments the highest RC tag on the branch. If the branch has no tags, it derives the initial version from the branch name and starts at rc.1. For a stable release, it removes the RC suffix from the highest release candidate tag.
The workflow validates dependencies and publishes the Git tag, GitHub release, container image, and Helm chart. The same release branch is used for later patch release candidates and stable patch releases.
GitHub CLI commands for an RC on releases/v6.1:
# Publish the RC after reviewing the dry run
gh workflow run release-create-from-branch.yml --ref releases/v6.1 \
-f is_prerelease=true \
-f dry_run=falseTo promote the current RC to stable, use the same release branch with is_prerelease=false:
# Publish the stable release after reviewing the dry run
gh workflow run release-create-from-branch.yml --ref releases/v6.1 \
-f is_prerelease=false \
-f dry_run=falseThe same action can be performed in the GitHub web interface by navigating to Actions > Release create from branch > Run workflow.
The What has changed section is generated automatically during the release process.
There are three manual steps that need to be performed to enrich the release notes:
- Add summary
- Render the updated app table
cd ci && npm run render-chart-version-changes -- <old-tag> <new-tag>and copy the output to the corresponding GitHub release notes. - Add the
# Internal component release notessection containing links to apl-api, apl-console, and apl-tasks release notes (if applicable).