Release Check — Orchard
Cutting a release for Orchard is mechanical but easy to half-do (tag without the migration check, bump the version but forget the changelog). This skill is the checklist so nothing slips. It loads only when you're releasing — everyday work doesn't pay for it.
When this fires
You type /release-check, or you're about to tag a new Orchard version.
Checklist
Walk these in order. Stop at the first failure, fix it, restart — a release is atomic.
- Clean tree, right branch.
git statusis clean and you're onmain(or the release branch). No uncommitted work rides along in a tag. - Bump the version. Update
versioninpyproject.toml. Use semver: breaking API/contract change → major; new endpoint/field → minor; fix only → patch. - Migrations present and current.
alembic checkis clean (no model-vs-history drift), and every new revision has been applied once against a dump of representative data, not just an empty DB.alembic checkproves agreement, not applicability — this step proves applicability. - Verify is green. Run
scripts/verify.shand read the output:format,lint,types,migrations,testall pass. Within-a-layer green only — also confirm one real request path (TestClient against the full app) still works end to end. - Changelog updated. Add a dated section to
CHANGELOG.mdfor this version: what changed, and call out any API-contract or migration change explicitly so callers know to look. - Commit, then tag.
chore(release): vX.Y.Zcommit, thengit tag vX.Y.Z. Tag points at the release commit — never an earlier one. - Push commit and tag.
git push && git push --tags. Open/reference the GitHub release.
Notes
- If
alembic checkfails, you have a model change with no migration — that's a code bug, not a release step. Go back and add the revision before tagging. - Don't allowlist a secret to make a hook pass; the no-secrets rule is absolute (core).