|
| 1 | +# Releases |
| 2 | + |
| 3 | +This repo uses the Jarvus **develop→main Release-PR** flow (the |
| 4 | +`JarvusInnovations/infra-components` `release-prepare` / `release-validate` / |
| 5 | +`release-publish` composite actions). Versioned releases are cut from a |
| 6 | +changelog'd PR; merging it tags the release and publishes the container image. |
| 7 | + |
| 8 | +## The flow |
| 9 | + |
| 10 | +``` |
| 11 | +feature branch ──▶ develop ──(push)──▶ "Release: vX.Y.Z" PR into main |
| 12 | + │ (review changelog, adjust bump) |
| 13 | + ▼ (merge) |
| 14 | + tag vX.Y.Z ──▶ GHCR image :vX.Y.Z + :latest |
| 15 | +``` |
| 16 | + |
| 17 | +1. **Merge work into `develop`.** Feature branches PR into `develop` (CI runs on |
| 18 | + `develop` and on every PR). |
| 19 | +2. **Push `develop`.** `release-prepare.yml` opens (or updates) a |
| 20 | + **`Release: vX.Y.Z`** PR into `main` with a bot-generated `## Changelog` |
| 21 | + comment. The version is computed from the last `v*` tag + the commits since. |
| 22 | +3. **Review the Release PR.** Sort the changelog, confirm the semver bump |
| 23 | + (edit the PR title to override the version if needed — `release-validate.yml` |
| 24 | + keeps it well-formed). Use the **`release-flow`** skill for the changelog + |
| 25 | + bump conventions. |
| 26 | +4. **Merge the Release PR.** `release-publish.yml` creates the `vX.Y.Z` tag and |
| 27 | + GitHub release. The tag push triggers `container-publish.yml`, which builds |
| 28 | + and pushes `ghcr.io/codeforphilly/codeforphilly-ng:vX.Y.Z` and `:latest`. |
| 29 | +5. **Deploy.** The cluster picks up the image per |
| 30 | + [deploy.md](./deploy.md) (the published `:vX.Y.Z` / `:latest` tags replace |
| 31 | + the previously-manual `:sandbox` build for versioned releases). |
| 32 | + |
| 33 | +## Prerequisites (one-time) |
| 34 | + |
| 35 | +- **`BOT_GITHUB_TOKEN`** repo (or org) secret — a PAT/app token with `repo` |
| 36 | + scope. Required by `release-publish`: a tag pushed with the default |
| 37 | + `GITHUB_TOKEN` cannot trigger `container-publish`, so the image would never |
| 38 | + build. |
| 39 | +- **GHCR package write** for Actions — the first `container-publish` run creates |
| 40 | + the package; ensure `github.com/CodeForPhilly/codeforphilly-ng` → |
| 41 | + Packages grants the repo's Actions write access (the workflow uses |
| 42 | + `permissions: packages: write`). |
| 43 | +- **Branch protection on `main`** (recommended) — require a PR + green CI to |
| 44 | + merge, so releases only land via the Release PR. |
| 45 | + |
| 46 | +## First release |
| 47 | + |
| 48 | +There are no tags yet, so the first push to `develop` proposes **`v0.1.0`**. If |
| 49 | +you want a different baseline, edit the Release PR title before merging. |
| 50 | + |
| 51 | +## Notes |
| 52 | + |
| 53 | +- The manual `docker build --platform=linux/amd64 … :sandbox` path |
| 54 | + ([sandbox-deploy.md](./sandbox-deploy.md)) still works for ad-hoc iteration; |
| 55 | + versioned releases now go through `container-publish` instead. |
| 56 | +- CI runners and cluster nodes are both amd64, so `container-publish` needs no |
| 57 | + `--platform` flag (that's only for local Apple-silicon builds). |
0 commit comments