Skip to content

Release Strategy

Releases are automated, immutable, and never mutate main.

Every merge to main runs the CI pipeline: build, test, scan, push, release.

The release step runs semantic-release, which reads the squash-merge commit message (the PR title) to decide what happens:

  • feat: — minor bump, creates a GitHub Release
  • fix: — patch bump, creates a GitHub Release
  • Anything else (ci:, docs:, chore:, etc.) — no release

When a GitHub Release is created, release.yml fires and:

  1. Promotes existing sha- tagged images to version tags on GHCR and DockerHub (no rebuild)
  2. Generates standalone compose files and uploads them as release assets
  3. Appends an image table and quick start to the release notes
TagPurpose
sha-<gitsha>CI artifact, 1:1 with source
v0.1.0Pinned release (recommended for operators)
latestLatest 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.

Terminal window
gh release create v0.1.0 --target <commit-sha> --generate-notes
NameTypePurpose
DOCKERHUB_USERNAMEVariableDockerHub push
DOCKERHUB_TOKENSecretDockerHub push
RELEASE_APP_IDVariableGitHub App token for release events
RELEASE_APP_PRIVATE_KEYSecretGitHub App token for release events