Release process
Releases are fully automated. There is no manual git tag.
Conventional Commits → semver
Section titled “Conventional Commits → semver”The project follows Conventional
Commits. The release workflow runs
semantic-release
on every push to main and infers the next version:
| Commit type | Bump |
|---|---|
fix: | patch |
feat: | minor |
feat!: / BREAKING CHANGE: footer | major |
If no qualifying commits are present since the last release, the workflow runs to completion but does not publish anything.
What gets published
Section titled “What gets published”On every release the Release
workflow:
- Tags the commit (
vX.Y.Z) and generates release notes from the commit history. - Builds container images in parallel, one job per
(image, platform):manageronlinux/amd64(Ubuntu x64 runner)manageronlinux/arm64(Ubuntu arm64 runner)runneronlinux/amd64runneronlinux/arm64Each job pushes by digest (no tag) so the four uploads happen concurrently.
- Merges the digests into a multi-arch manifest list per image
with
docker buildx imagetools create, producing:ghcr.io/xavidop/genkit-operator:vX.Y.Zand:latestghcr.io/xavidop/genkit-runner:vX.Y.Zand:latest
- Packages the Helm chart, stamps it with the version and the
manager image tag, and pushes it as an OCI artifact:
oci://ghcr.io/xavidop/charts/genkit-operator(versionX.Y.Z).
- Builds
install.yamlwithmake build-installerpinned to the released manager image. - Attaches
install.yamland the chart.tgzto the GitHub Release semantic-release created.
Why per-platform parallel jobs?
Section titled “Why per-platform parallel jobs?”QEMU emulation of linux/arm64 on an amd64 runner is slow — every
Go build of CGO-less binaries still has to round-trip through user-mode
emulation. Running each platform natively (Ubuntu arm64 runner for
linux/arm64, Ubuntu x64 for linux/amd64) cuts release time
roughly in half and avoids the QEMU overhead entirely.
- .github/workflows/release.yml
- .releaserc.json
- CHANGELOG.md (auto-generated)