astwire / Deployment / Package Release
DocsastwireDeploymentPackage Release

Package Release

Condensed release checklist. For the full cross-platform build matrix, R2 sync internals, and CI/CD YAML, see binary-distribution.md.

2 min readApplies to v1.0.0
On this page ▾
  1. Pre-release checks
  2. Versioning
  3. Build all platform binaries
  4. Tag and push
  5. Release everything via Makefile
  6. macOS-specific upload
  7. Sync to Cloudflare R2
  8. Post-release smoke test
  9. If a release step fails mid-way

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 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 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