|
1 | 1 | --- |
2 | | -status: in-progress |
| 2 | +status: done |
3 | 3 | depends: [] |
4 | 4 | specs: [] |
5 | 5 | issues: [] |
6 | | -pr: |
| 6 | +pr: 135 |
7 | 7 | --- |
8 | 8 |
|
9 | 9 | # Plan: stand up develop→main Release-PR automation |
@@ -44,19 +44,41 @@ secret. First release will be seeded at **v0.1.0**. |
44 | 44 |
|
45 | 45 | ## Validation |
46 | 46 |
|
47 | | -- [ ] `develop` branch exists on origin. |
48 | | -- [ ] Pushing `develop` opens a `Release: v0.1.0` PR into `main` with a changelog. |
49 | | -- [ ] Merging that PR tags `v0.1.0` and `container-publish` pushes the image to GHCR. |
50 | | -- [ ] YAML is valid (lint / Actions parses it). |
| 47 | +- [x] Four workflows + `ci.yml` (now on `develop`) + `docs/operations/releases.md` |
| 48 | + shipped; YAML parsed by GitHub Actions (the workflows ran on the PR). |
| 49 | +- [x] `release-validate` behaves as designed — it ran on PR #135 and failed with |
| 50 | + `PR title must match "Release: vX.Y.Z"`, confirming the guard works (only |
| 51 | + Release PRs may target `main`). Expected on this bootstrap feature-PR. |
| 52 | +- [ ] **Activation (post-merge, operator):** create `develop`; first push opens a |
| 53 | + `Release: v0.1.0` PR; merging it tags `v0.1.0` and `container-publish` |
| 54 | + pushes the image. Deferred — see Follow-ups. |
51 | 55 |
|
52 | 56 | ## Risks |
53 | 57 |
|
54 | 58 | - `container-publish`'s first run fails if GHCR package write isn't granted or |
55 | 59 | `BOT_GITHUB_TOKEN` is missing — non-destructive (tag created, push fails), |
56 | 60 | fixable and re-runnable. |
57 | | -- Branch protection on `main` is a GitHub-settings change (operator action), |
58 | | - not in this repo. |
| 61 | +- Branch protection on `main` is a GitHub-settings change (operator action). |
59 | 62 |
|
60 | 63 | ## Notes |
61 | 64 |
|
| 65 | +- `release-validate` runs on **every** PR into `main` and fails non-Release PRs |
| 66 | + by design — that's the guard enforcing "only Release PRs target `main`; feature |
| 67 | + work goes to `develop`." Do not be alarmed by its failure on this bootstrap PR. |
| 68 | + Consequently, if branch protection on `main` requires status checks, require |
| 69 | + **`build`** (CI); requiring `release-validate` too would additionally enforce |
| 70 | + the Release-PR-only rule. |
| 71 | +- The manual `:sandbox` build path still works for ad-hoc iteration; versioned |
| 72 | + releases now flow through `container-publish`. |
| 73 | + |
62 | 74 | ## Follow-ups |
| 75 | + |
| 76 | +- **Activation (operator):** after this merges to `main`, create `develop` off |
| 77 | + `main` and push it to open the first `Release: v0.1.0` PR. (I can do this on |
| 78 | + request — held back so the first release is opened deliberately.) |
| 79 | +- **Operator (GitHub settings):** confirm `BOT_GITHUB_TOKEN` secret; grant the |
| 80 | + repo's Actions `packages: write` on the GHCR package (first publish creates |
| 81 | + it); add branch protection on `main` (require `build`). |
| 82 | +- **Deferred:** wire the cluster/GitOps to track the published `:vX.Y.Z` / |
| 83 | + `:latest` tags instead of the manual `:sandbox` push. No issue filed yet — |
| 84 | + revisit when prod GitOps lands. |
0 commit comments