| status | done |
|---|---|
| depends | |
| specs | |
| issues | |
| pr | 135 |
Adopt the Jarvus develop→main Release-PR flow so versioned releases are cut from
a changelog'd PR, and the GHCR image build (currently manual) is automated on
tag. Replaces the ad-hoc docker build/push :sandbox step for versioned
releases.
What ships:
- Four workflows under
.github/workflows/:release-prepare.yml— push todevelopopens/updates aRelease: vX.Y.ZPR intomainwith a bot changelog (GITHUB_TOKEN).release-validate.yml— validates that PR as it changes (GITHUB_TOKEN).release-publish.yml— on merge of that PR, tagsvX.Y.Z(BOT_GITHUB_TOKEN, required so the tag can trigger the next workflow).container-publish.yml— onv*tag, builds + pushesghcr.io/codeforphilly/codeforphilly-ng:vX.Y.Zand:latest.
ci.ymlalso runs ondevelop.docs/operations/releases.md— operator guide for the flow.- A
developbranch created offmain.
No spec — release/CI tooling. Uses the JarvusInnovations/infra-components
release-* composite actions (unpinned channels/.../latest), matching the
reference repo (jarvus-data-pipeline).
Adapt the reference workflows to this repo: single image (no sub-image, no
BigQuery), actions/checkout@v6 + docker/login-action@v3, no --platform
(CI runners + cluster are both amd64). BOT_GITHUB_TOKEN already set as a repo
secret. First release will be seeded at v0.1.0.
- Four workflows +
ci.yml(now ondevelop) +docs/operations/releases.mdshipped; YAML parsed by GitHub Actions (the workflows ran on the PR). -
release-validatebehaves as designed — it ran on PR #135 and failed withPR title must match "Release: vX.Y.Z", confirming the guard works (only Release PRs may targetmain). Expected on this bootstrap feature-PR. - Activation (post-merge, operator): create
develop; first push opens aRelease: v0.1.0PR; merging it tagsv0.1.0andcontainer-publishpushes the image. Deferred — see Follow-ups.
container-publish's first run fails if GHCR package write isn't granted orBOT_GITHUB_TOKENis missing — non-destructive (tag created, push fails), fixable and re-runnable.- Branch protection on
mainis a GitHub-settings change (operator action).
release-validateruns on every PR intomainand fails non-Release PRs by design — that's the guard enforcing "only Release PRs targetmain; feature work goes todevelop." Do not be alarmed by its failure on this bootstrap PR. Consequently, if branch protection onmainrequires status checks, requirebuild(CI); requiringrelease-validatetoo would additionally enforce the Release-PR-only rule.- The manual
:sandboxbuild path still works for ad-hoc iteration; versioned releases now flow throughcontainer-publish.
- Activation (operator): after this merges to
main, createdevelopoffmainand push it to open the firstRelease: v0.1.0PR. (I can do this on request — held back so the first release is opened deliberately.) - Operator (GitHub settings): confirm
BOT_GITHUB_TOKENsecret; grant the repo's Actionspackages: writeon the GHCR package (first publish creates it); add branch protection onmain(requirebuild). - Deferred: wire the cluster/GitOps to track the published
:vX.Y.Z/:latesttags instead of the manual:sandboxpush. No issue filed yet — revisit when prod GitOps lands.