This document describes when, why, and how AICR releases are made. For contribution guidelines, see CONTRIBUTING.md.
Releases follow a bi-weekly cadence, aligned with sprint boundaries. A new release is cut at the conclusion of each 2-week sprint.
| Release Type | When | Version Bump | Decision |
|---|---|---|---|
| Sprint release | End of each 2-week sprint | patch or minor |
Maintainer determines bump type based on changes landed |
| Hotfix | Between sprints, as needed | patch |
Any maintainer can initiate for critical fixes |
| Major | Planned | major |
Requires team agreement and advance communication |
A release includes everything merged to main since the last tag. There is no cherry-picking or feature branching for releases — if it's on main, it ships.
Before cutting a release, verify:
- All CI checks pass on
main(make qualify) - No known regressions from the current sprint
- Breaking changes use
feat!:orfix!:commit prefix (drives changelog and signals consumers)
Every release must pass these automated gates before artifacts are published:
- Unit tests with race detector
- golangci-lint + yamllint
- License header verification
- Vulnerability scans (Anchore in release workflows, Grype in
make scan) - E2E tests on Kind cluster
If any gate fails, the release pipeline stops. Fix forward on main and cut a new tag.
git checkout main
git pull origin main
make qualify # Verify locally before releasing
make bump-patch # v1.2.3 -> v1.2.4
# or
make bump-minor # v1.2.3 -> v1.3.0This automatically: validates clean state, generates changelog, commits, tags, pushes, and triggers the release pipeline.
For more control:
git checkout main && git pull origin main
make qualify
git-cliff --tag v1.2.3 -o CHANGELOG.md # Optional: generate changelog
git add CHANGELOG.md && git commit -m "chore: update CHANGELOG for v1.2.3"
git tag -a v1.2.3 -m "Release v1.2.3"
git push origin main v1.2.3To rebuild artifacts from an existing tag without creating a new one: Actions > On Tag Release > Run workflow > enter the tag.
For critical fixes between sprints:
- Fix on
mainfirst (PR, review, merge as normal) - Cut a patch release:
make bump-patch - For patching older release lines (rare): cherry-pick from
mainonto a hotfix branch, tag manually
Tag Push --> CI (tests + lint) --> Build (binaries + images) --> Attest (SBOM + provenance) --> Deploy (demo)
Built via GoReleaser for multiple platforms:
| Binary | Platforms | Description |
|---|---|---|
aicr |
darwin/amd64, darwin/arm64, linux/amd64, linux/arm64 | CLI tool |
aicrd |
linux/amd64, linux/arm64 | API server |
Published to GitHub Container Registry (ghcr.io/nvidia/):
| Image | Base | Description |
|---|---|---|
aicr |
nvcr.io/nvidia/cuda:13.1.0-runtime-ubuntu24.04 |
CLI with CUDA runtime |
aicrd |
gcr.io/distroless/static:nonroot |
Minimal API server |
Tags: latest, vX.Y.Z
Every release includes:
- SLSA Build Level 3 Provenance — verifiable build attestations
- SBOM — Software Bill of Materials (SPDX format)
- Sigstore Signatures — keyless signing via Fulcio + Rekor
- Checksums — SHA256 for all binaries
- Semantic versioning:
vMAJOR.MINOR.PATCH - Pre-releases:
v1.2.3-rc1,v1.2.3-beta1(automatically marked in GitHub) - Breaking changes: Increment MAJOR version
export TAG=$(curl -s https://api.github.com/repos/NVIDIA/aicr/releases/latest | jq -r '.tag_name')
# GitHub CLI
gh attestation verify oci://ghcr.io/nvidia/aicr:${TAG} --owner nvidia
gh attestation verify oci://ghcr.io/nvidia/aicrd:${TAG} --owner nvidia
# Cosign
cosign verify-attestation \
--type spdxjson \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-identity-regexp 'https://github.com/NVIDIA/aicr/.github/workflows/.*' \
ghcr.io/nvidia/aicr:${TAG}curl -sL "https://github.com/NVIDIA/aicr/releases/download/${TAG}/aicr_checksums.txt" -o checksums.txt
sha256sum -c checksums.txt --ignore-missingNote: Demonstration only — not a production service. Self-host
aicrdfor production use. See API Server Documentation.
The aicrd API server demo deploys to Google Cloud Run on successful release (region: us-west1, auth: Workload Identity Federation). Project-specific details are managed in CI configuration.
| Problem | Action |
|---|---|
| Tests fail during release | Fix on main, cut new tag |
| Lint errors | Run make lint locally before releasing |
| Image push failure | Check GHCR permissions |
| Need to rebuild | Use manual workflow trigger with existing tag |
- Repository admin access with write permissions
- Access to GitHub Actions workflows
- git-cliff installed (
make tools-setup)