Release
Versions are managed by cocogitto (cog) from Conventional Commit history. A release is produced by running cog bump, which derives the next version from commits since the last tag, updates CHANGELOG.md, creates a release commit, tags it, and pushes the tag. There is no version.txt — the version is the tag, and goreleaser injects it into the binaries via -ldflags at build time.
Installing cog
One-time setup on your host. Pick one:
# Static binary (all platforms) — pinned version
curl -fsSL https://github.com/cocogitto/cocogitto/releases/download/7.0.0/cocogitto-7.0.0-x86_64-unknown-linux-musl.tar.gz \
| tar xz -C /tmp
install -m 755 /tmp/x86_64-unknown-linux-musl/cog ~/bin/cog
# macOS
brew install cocogitto
# Cargo (from source)
cargo install cocogitto
Swap x86_64-unknown-linux-musl for aarch64-unknown-linux-gnu on ARM64 Linux, or aarch64-apple-darwin / x86_64-apple-darwin on macOS.
Cutting a release
From a clean main:
cog bump --auto # or --patch / --minor / --major / --version X.Y.Z
cog reads cog.toml and runs:
-
Pre-bump hooks —
make run-generatorsrebuilds generated config artifacts, thensedupdates the version pin inflake.nix.The (commented-out)
nix-updatestep that refreshesvendorHashtakes a few minutes — enable only when a Nix-install path needs to work for that release. -
Bump — writes the new version into
CHANGELOG.md, creates the release commit (chore(version): vX.Y.Z), and creates the tagvX.Y.Z. -
Post-bump hooks — pushes the tag to both remotes:
origin(Gitea) andgithub(the public mirror). The GitHub push is what fires.github/workflows/release.yamlto build binaries.
Merge commits are skipped when deriving the next version (ignore_merge_commits = true in cog.toml).
What CI does on tag push
Three jobs run in parallel from .github/workflows/release.yaml:
| Job | Does |
|---|---|
Security scan (scan_sourcecode) | Trivy scans the source tree. Findings are appended to the workflow run summary. |
Release notes (create-release) | Generates release notes from the tag range with cog changelog --at <tag>, then creates the GitHub release via softprops/action-gh-release. |
Binaries + packages (build_and_publish_kubeaid_cli_binaries) | goreleaser -f .goreleaser-github.yaml produces kubeaid-cli and kubeaid-storagectl for darwin/linux × amd64/arm64, packages them as .deb / .rpm / .apk / archlinux via nfpms, and attaches everything to the release. |