Release Runbook
gitaiflow follows Semantic Versioning. The current package metadata (pyproject.toml) declares:
On this page ▾
- Confirm the working tree is clean.
- Update
[project].versioninpyproject.toml. - Update
CHANGELOG.md(or generate the entry withgitaiflow --changelog --since <last-release-date> --path .). - Run linting:
make lint. - Run tests:
make test. - Run the deterministic regression suites (core service layer and telemetry consent — internal-only, not published here).
- Build all four platform binaries:
make build-all(the macOS leg must run on real Apple Silicon hardware). - Verify architecture headers:
file installers/*(see expected output in../deployment/binary-distribution.md#5-verify-artifact-architecture-headers). - Generate
RELEASE_NOTES.mdfrom theCHANGELOG.mdentry for this version (gitaiflow --release-notes), then create and push the annotated release tag — either directly (git tag -a vX.Y.Z -m "...",git push origin vX.Y.Z) or viascripts/release/tag_release.sh, which also creates the GitLab/GitHub releases fromRELEASE_NOTES.mdand links the built binaries. - Publish:
make release(uploads every binary ininstallers/vX.Y.Z/to the GitLab Generic Package Registry as both the versioned andlatestassets, then regenerates the R2 manifest — includinginstallers/latest.txt— and syncs to Cloudflare R2) — ormake allto chain test → build-all → release in one command. - Install the published version in a clean environment (
curl -fsSL https://install.djangoplay.org/gitaiflow | bash -s -- vX.Y.Z). - Verify
gitaiflow --versionandgitaiflow --help. - Run the full platform verification matrix — macOS, Linux amd64/arm64 containers, Windows PowerShell — from
../deployment/binary-distribution.md#section-d-verification--integration-testing. - Run a real functional smoke test against a configured AI provider (
gitaiflow --path . --change-summary) to confirm the compiled binary's bundled dependencies (httpx,certifi, and — on Windows — theprompts/templatesdata files) came through the compile intact. - Spot-check telemetry consent behavior post-release (
gitaiflow --telemetry status) — see the telemetry consent test suite (internal-only) Part 2 for the full sequence.
Versioning
text
version = "1.1.0"
requires-python = ">=3.11"Rollback
Because both the one-line installers and the Generic Package Registry latest pointer are overwritten in place on each successful release, there is no separate "rollback" action beyond re-running registry_update.sh with a previous version's installers/ directory if a bad release has already reached users:
bash
git checkout vX.Y.Z-1 -- installers/ # or rebuild that tag with make build-all
GITLAB_TOKEN=<token> ./scripts/release/registry_update.sh latestIf a release step fails mid-way, registry_update.sh is safe to re-run once the underlying issue is fixed — package-registry uploads and the R2 sync (which uses --checksum) are both idempotent.
Something wrong or missing on this page?Report a docs issue