This document describes how we cut and publish releases for the repository.
- Single repo versioning using SemVer tags:
v0.x.y. - Long‑lived maintenance branches per minor:
release/v0.x. - Patches are cut from the minor branch, tagged (e.g.
v0.x.y), and merged back tomain.
- Freeze
mainfor release preparation (accept only release‑related changes). - Ensure docs and reports are up to date under
docs/utils/. - Run tests and benches in ReleaseFast:
cd utilsZIG_GLOBAL_CACHE_DIR=$PWD/.zig-global-cache ZIG_LOCAL_CACHE_DIR=$PWD/.zig-local-cache zig build -Doptimize=ReleaseFast testARC_BENCH_RUN_MT=1 ZIG_GLOBAL_CACHE_DIR=$PWD/.zig-global-cache ZIG_LOCAL_CACHE_DIR=$PWD/.zig-local-cache zig build -Doptimize=ReleaseFast bench-arczig run src/thread-local-cache/_thread_local_cache_benchmarks.zig -OReleaseFast
- Create or update the maintenance branch for the minor:
git checkout -b release/v0.3(first time)git push -u origin release/v0.3
- Tag the release:
git tag v0.3.0git push origin v0.3.0
Pushing a v* tag triggers the GitHub Action at .github/workflows/release-draft.yml, which creates a draft GitHub Release and attaches benchmark reports from docs/utils/*.md.
- Fix on the maintenance branch:
git checkout release/v0.3- Apply patch →
git commit git tag v0.3.1 && git push origin release/v0.3 --tags
- Merge the same fix into
main(forward‑port):git checkout main && git merge --no-ff release/v0.3
zig fetch --save https://github.com/eakova/zigbeam/archive/refs/tags/v0.3.0.tar.gzIn build.zig:
const beam = b.dependency("zig-beam", .{});
const utils = beam.module("utils");
exe.root_module.addImport("utils", utils);In code:
const utils = @import("utils");- Benchmarks are expected to finish under one minute in
-Doptimize=ReleaseFast. - Keep Zig caches out of Git:
.gitignorealready excludes zig caches at any depth.