This repository now ships a tag-driven GitHub Actions release workflow in .github/workflows/release.yml.
The release path is automated, but the release contract is still strict: a tag is not considered valid unless the repository verification gates pass on that exact ref.
- CI is required on pull requests and on
main. - Releases are cut from annotated semantic-version tags.
- The
Releaseworkflow re-runs the repository verification gates before publishing anything. - A release publishes both GitHub Release assets and GHCR container images.
When you push a tag like v1.2.3, .github/workflows/release.yml will:
- run:
go test ./... -p 1bash scripts/verify-docs-and-ci.shbash scripts/verify-helm-chart.shbash scripts/verify-compose-e2e.sh
- build release archives for:
linux/amd64linux/arm64darwin/amd64darwin/arm64windows/amd64
- generate
SHA256SUMS - publish two multi-arch GHCR images (
linux/amd64,linux/arm64):- default runtime image from
Dockerfile - alternate runtime image from
Dockerfile.allure3
- default runtime image from
- create or update the matching GitHub Release and attach the built assets
Use annotated semantic-version tags:
v0.1.0v0.2.0v1.0.0
Guidance:
- bump patch for fixes and non-breaking packaging/doc corrections
- bump minor for backward-compatible features
- bump major for breaking API, config, or deployment changes
Do not use lightweight tags for releases.
For a release tag vX.Y.Z, the workflow publishes:
ghcr.io/belyaev-dev/testimony:vX.Y.Zghcr.io/belyaev-dev/testimony:vX.Yghcr.io/belyaev-dev/testimony:vXghcr.io/belyaev-dev/testimony:latest
ghcr.io/belyaev-dev/testimony:vX.Y.Z-allure3ghcr.io/belyaev-dev/testimony:vX.Y-allure3ghcr.io/belyaev-dev/testimony:vX-allure3ghcr.io/belyaev-dev/testimony:latest-allure3
The unsuffixed image is the default runtime. The -allure3 suffix marks the alternate runtime explicitly.
git checkout main
git pull --ff-only origin maingo test ./... -p 1
bash scripts/verify-docs-and-ci.sh
bash scripts/verify-helm-chart.sh
bash scripts/verify-compose-e2e.shReplace vX.Y.Z with the version you are releasing.
git tag -a vX.Y.Z -m "vX.Y.Z"git push origin vX.Y.ZThat push triggers the GitHub Release workflow.
The workflow also supports manual dispatch against an existing tag. Use this only when you need to recreate release assets or recover a failed publication without inventing a new version.
Each release should end up with:
- platform archives for the supported OS/architecture targets
SHA256SUMS- a GitHub Release named after the tag
- GHCR images for the default and
-allure3variants
If a release fails:
- inspect the failed
Releaseworkflow run in GitHub Actions - confirm the tag points to the intended commit
- rerun the verification commands locally
- use manual workflow dispatch against the same tag only after the underlying issue is fixed
Do not move or retag an existing released version to hide a bad build. Cut a new version instead.