Package Release
Condensed release checklist. For the full cross-platform build matrix, R2 sync internals, and CI/CD YAML, see binary-distribution.md.
On this page ▾
Pre-release checks
make test
make lintEquivalent to:
python3 -m pytest tests/ -v
ruff check .Versioning
Update [project].version in pyproject.toml. The Makefile derives its VERSION variable from this single source of truth:
PYPROJECT_VERSION := $(shell python3 -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])" ...)
VERSION ?= v$(PYPROJECT_VERSION)Update CHANGELOG.md alongside the version bump.
Build all platform binaries
make build-allEquivalent to running compile (macOS), build-mac-arm64, build-linux-amd64, build-linux-arm64, and build-windows in sequence. See binary-distribution.md#section-a-cross-platform-binary-builds for what each target does.
Tag and push
git tag -a v0.1.0 -m "Release v0.1.0: First stable release"
git push origin v0.1.0Pushing a tag triggers the GitLab CI pipeline's build_native_binary → upload_package → publish_release_binary chain automatically for the Linux x86_64 asset.
Release everything via Makefile
make allRuns test, then build-all, then release (which shells out to scripts/release/registry_update.sh $(VERSION) — detects the version from the current Git tag, uploads all built binaries to the GitLab Generic Package Registry as both the versioned and latest assets, regenerates the R2 manifest, and syncs to Cloudflare R2).
macOS-specific upload
Since GitLab CI cannot cross-compile a macOS binary, the darwin-arm64 asset is built and uploaded locally:
make release-macSync to Cloudflare R2
make syncEquivalent to make manifest (regenerate scripts/r2/ast_manifest.json) followed by ./scripts/r2/ast_r2.sh.
Post-release smoke test
curl -fsSL https://install.djangoplay.org/astwire | bash
astwire --version
astwire --helpThen run the full platform verification matrix in binary-distribution.md#section-b-verification--integration-testing before considering the release complete.
If a release step fails mid-way
You do not need to bump the version — delete and re-push the same tag once the fix is committed to main:
git tag -d v0.1.0
git push origin :refs/tags/v0.1.0
git tag -a v0.1.0 -m "Release v0.1.0"
git push origin v0.1.0