Skip to content

Commit 517cb14

Browse files
chore(plans): mark release-flow done (PR #135)
Also clarify in releases.md that release-validate guards main (only Release PRs target main; feature work goes to develop) — its failure on the bootstrap PR is expected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent b66d648 commit 517cb14

2 files changed

Lines changed: 35 additions & 9 deletions

File tree

‎docs/operations/releases.md‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ feature branch ──▶ develop ──(push)──▶ "Release: vX.Y.Z" PR into
1515
```
1616

1717
1. **Merge work into `develop`.** Feature branches PR into `develop` (CI runs on
18-
`develop` and on every PR).
18+
`develop` and on every PR). **Only Release PRs ever target `main`** — that's
19+
what `release-validate` enforces: it fails any PR into `main` whose title
20+
isn't `Release: vX.Y.Z`, so a stray feature-PR-into-`main` is caught. (The
21+
one exception is the very first bootstrap PR that introduces these workflows,
22+
which necessarily merges to `main` directly and trips that check once.)
1923
2. **Push `develop`.** `release-prepare.yml` opens (or updates) a
2024
**`Release: vX.Y.Z`** PR into `main` with a bot-generated `## Changelog`
2125
comment. The version is computed from the last `v*` tag + the commits since.

‎plans/release-flow.md‎

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
---
2-
status: in-progress
2+
status: done
33
depends: []
44
specs: []
55
issues: []
6-
pr:
6+
pr: 135
77
---
88

99
# Plan: stand up develop→main Release-PR automation
@@ -44,19 +44,41 @@ secret. First release will be seeded at **v0.1.0**.
4444

4545
## Validation
4646

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.
5155

5256
## Risks
5357

5458
- `container-publish`'s first run fails if GHCR package write isn't granted or
5559
`BOT_GITHUB_TOKEN` is missing — non-destructive (tag created, push fails),
5660
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).
5962

6063
## Notes
6164

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+
6274
## 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

Comments
 (0)