Release Strategy
Releases are manual, immutable, and never mutate main.
How it works
Section titled “How it works”Every merge to main runs the CI pipeline: build, test, scan, push. Images
are pushed with immutable sha-<gitsha> tags. No release is created
automatically.
When you are ready to cut a release, preview it first:
make release-planThis shows all commits since the last tag, the proposed version bump, and which PR titles will appear in the changelog. When it looks right:
make release-applyThis triggers the Create Release workflow on GitHub Actions, which runs semantic-release. It reads all squash-merge commit messages (PR titles) since the last release tag to decide the version bump:
feat:— minor bumpfix:/perf:/revert:— patch bumpBREAKING CHANGE:— major bump- If only
ci:,docs:,chore:, etc. commits exist — no release is created
When a GitHub Release is created, release.yml fires and:
- Promotes existing
sha-tagged images to version tags on GHCR and DockerHub (no rebuild) - Generates standalone compose files and uploads them as release assets
- Appends an image table and quick start to the release notes
This batched approach lets multiple PRs accumulate before cutting a release, producing coherent changelogs and fewer upgrades for operators.
Image tags
Section titled “Image tags”| Tag | Purpose |
|---|---|
sha-<gitsha> | CI artifact, 1:1 with source |
v0.1.0 | Pinned release (recommended for operators) |
latest | Latest main build |
Zabbix version is not part of the image tag. It is recorded as an OCI label
(dev.omniglass.zabbix-version) and noted in the release notes. Zabbix is
compiled from source via zabbix-docker bake with Omniglass patches applied;
the ZABBIX_VERSION file pins the source tag used for all components.
Manual release (specific commit)
Section titled “Manual release (specific commit)”To release from a specific commit rather than HEAD:
gh release create v0.1.0 --target <commit-sha> --generate-notesRequired secrets
Section titled “Required secrets”| Name | Type | Purpose |
|---|---|---|
DOCKERHUB_USERNAME | Variable | DockerHub push |
DOCKERHUB_TOKEN | Secret | DockerHub push |
RELEASE_APP_ID | Variable | GitHub App token for release events |
RELEASE_APP_PRIVATE_KEY | Secret | GitHub App token for release events |