Release process
Versioning, tagging, and PyPI publish workflow.
Release process
Prerequisites
- CI green on
main(.github/workflows/ci.yml) - docs/VERIFY.md acceptance criteria satisfied
- STATUS.md maturity matrix matches reality
- Landing site CI green on swarm-357-site
- CHANGELOG has a dated section for the release
Cut a release
- Bump
packages/techtide-swarm/pyproject.tomlversion and fallback__version__. - Update CHANGELOG + README correction notes if needed.
- Merge to
mainwith squash PR; wait for CI. - Tag and push:
git tag -a v0.2.2 -m "techtide-swarm 0.2.2"
git push origin v0.2.2publish.ymlruns CI gate → build → attestations → PyPI → GitHub Release.
Governance (operator checklist)
Apply on TechTideOhio/swarm-357:
- Branch protection on
main: require PR, squash-only, delete head branches - Required status checks (minimum):
python (3.10),python (3.12)roster,build-package,docs-linksrust-bridge,docker,dependency-audit- Dependabot enabled (
.github/dependabot.yml) - Secret scanning + push protection
- CodeQL workflow (
.github/workflows/codeql.yml) + CODEOWNERS - PyPI trusted publisher: repo
TechTideOhio/swarm-357, workflowpublish.yml, environmentpypi - Repo
homepage:https://swarm357fe.up.railway.app
Post-release verification
python -m venv /tmp/swarm-verify && /tmp/swarm-verify/bin/pip install techtide-swarm==0.2.2
/tmp/swarm-verify/bin/swarm boot
curl -sf "$SWARM_API_URL/api/health"Landing deploy
Deploy from TechTideOhio/swarm-357-site (Railway root = repo root).
- Frontend: https://swarm357.techtideai.io (Railway domain https://swarm357fe.up.railway.app)
- Backend: https://swarm357be.up.railway.app (
NEXT_PUBLIC_API_URL=https://swarm357be.up.railway.app) - Site BFF: set
SWARM_API_KEYas a runtime-only variable on the site service. Never expose a write key with aNEXT_PUBLIC_prefix. - Backend CORS:
ALLOWED_ORIGINS=https://swarm357.techtideai.io,https://swarm357fe.up.railway.app