Skip to main content

Cut a Release

One string = git tag = version.yml = image tag (SemVer, no v). Releases are tags on develop (there is no main), prepared on a short release/<ver> branch.

0. Pre-flight

  • develop is green and pulled: git checkout develop && git pull.
  • Decide the bump: MAJOR breaking · MINOR feature · PATCH fix.
  • Every intended change is merged; nothing half-finished rides along.

1. Prepare on a release branch

git checkout -b release/1.4.0 develop
# bump version.yml -> app version 1.4.0 (+ any changed core/module db_versions)
# finalize CHANGELOG.md (the Jira keys since the last tag are the raw material)
git commit -am "BGV-150 Bump to 1.4.0"
git push -u origin release/1.4.0

version.yml must equal the tag before you push it. For an app, confirm every submodule gitlink is an exact pushed tag matching version.yml.

2. (Optional) QA soak with pre-releases

Cut pre-release tags on the release branch, never on develop:

git tag -a 1.4.0-beta.1 -m "bgvchecker 1.4.0-beta.1" && git push origin 1.4.0-beta.1

Ladder alpha → beta → rc → final. A pre-release deploys to Beta only and never advances :latest (pipeline rule: tag contains - → skip "advance latest").

3. Merge + tag the final

# PR release/1.4.0 -> develop, review the lockfile diff, 1 approval + green CI, merge.
git checkout develop && git pull origin develop
git tag -a 1.4.0 -m "bgvchecker 1.4.0" # annotated, immutable, no "v"
git push origin 1.4.0 # the tag triggers CI

Never git tag -f / force-push a tag. A wrong tag is burned — ship the next number. No back-merge — there is only one trunk.

4. Build once, promote the digest

The tag builds one image; CI promotes that exact @sha256 Dev → Staging → (manual approval) → Prod — never rebuilt per environment. See Build & Deploy.

5. Record

Set the Jira Fix Version (powers Release Burndown + the DoD gate); move released issues to Done; release notes reference CHANGELOG.md.

:::note Cross-repo Releasing a module or core auto-triggers consuming apps' pipelines to re-pin and re-release (see New Module). Push the module/core tag before the app. :::