--- since: 1.0.0 --- # Package Release Condensed release checklist. For the full cross-platform build matrix, R2 sync internals, and CI/CD YAML, see [`binary-distribution.md`](binary-distribution.md). ## Pre-release checks ```bash make test make lint ``` Equivalent to: ```bash 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: ```make 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 ```bash make build-all ``` Equivalent 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`](binary-distribution.md) for what each target does. ## Tag and push ```bash git tag -a v0.1.0 -m "Release v0.1.0: First stable release" git push origin v0.1.0 ``` Pushing 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 ```bash make all ``` Runs `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: ```bash make release-mac ``` ## Sync to Cloudflare R2 ```bash make sync ``` Equivalent to `make manifest` (regenerate `scripts/r2/ast_manifest.json`) followed by `./scripts/r2/ast_r2.sh`. ## Post-release smoke test ```bash curl -fsSL https://install.djangoplay.org/astwire | bash astwire --version astwire --help ``` Then run the full platform verification matrix in [`binary-distribution.md#section-b-verification--integration-testing`](binary-distribution.md) 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`: ```bash 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 ```