|
| 1 | +# Pre-release checklist |
| 2 | + |
| 3 | +Run the pre-release checklist for this project. |
| 4 | + |
| 5 | +**Working style**: propose before acting at every step — do not commit, push, |
| 6 | +open PRs, or create tags until I explicitly confirm. |
| 7 | + |
| 8 | +--- |
| 9 | + |
| 10 | +## Phase 1 — Determine next release |
| 11 | + |
| 12 | +1. **Verify working tree**: Confirm we are on `master` with a clean working |
| 13 | + tree. If behind the remote, propose `git pull` and wait for confirmation |
| 14 | + before pulling. |
| 15 | + |
| 16 | +2. **Detect current release and propose next**: Read `CHANGELOG.md` for the |
| 17 | + coach naming convention (A–Z table) and the most recent release heading. |
| 18 | + Run `git tag --sort=-v:refname` to confirm the latest tag. Then: |
| 19 | + |
| 20 | + - **Next codename**: next letter in the A–Z sequence after the current one. |
| 21 | + Use lowercase with no spaces for the tag (e.g. `eriksson`); |
| 22 | + Title Case for the CHANGELOG heading (e.g. `Eriksson`). |
| 23 | + - **Version bump** — infer from `[Unreleased]`: |
| 24 | + |
| 25 | + | Condition | Bump | |
| 26 | + |---|---| |
| 27 | + | Any entry marked BREAKING | MAJOR | |
| 28 | + | Entries under Added | MINOR | |
| 29 | + | Only Changed / Fixed / Removed | PATCH | |
| 30 | + |
| 31 | + - If `[Unreleased]` has no entries, stop and warn — there is nothing to release. |
| 32 | + |
| 33 | + Present a summary before proceeding: |
| 34 | + |
| 35 | + ```text |
| 36 | + Current: v2.1.0-delbosque |
| 37 | + Proposed: v2.2.0-eriksson (MINOR — new features in Added) |
| 38 | + Branch: release/v2.2.0-eriksson |
| 39 | + Tag: v2.2.0-eriksson |
| 40 | + ``` |
| 41 | + |
| 42 | +--- |
| 43 | + |
| 44 | +## Phase 2 — Prepare release branch |
| 45 | + |
| 46 | +3. **Create release branch**: `release/vX.Y.Z-{codename}`. |
| 47 | + |
| 48 | +4. **Update CHANGELOG.md**: Move all content under `[Unreleased]` into a new |
| 49 | + versioned heading `[X.Y.Z - Codename] - {today's date}`. Replace |
| 50 | + `[Unreleased]` with a fresh empty template: |
| 51 | + |
| 52 | + ```markdown |
| 53 | + ## [Unreleased] |
| 54 | + |
| 55 | + ### Added |
| 56 | + |
| 57 | + ### Changed |
| 58 | + |
| 59 | + ### Fixed |
| 60 | + |
| 61 | + ### Removed |
| 62 | + ``` |
| 63 | + |
| 64 | +5. **Propose commit**: `docs(changelog): release vX.Y.Z Codename` |
| 65 | + |
| 66 | +6. **After confirmation**: commit. Then run steps 2–4 of `/precommit` (linting, |
| 67 | + formatting, tests — the CHANGELOG step is already handled). Push the branch |
| 68 | + and open a PR into `master` only once all checks pass. |
| 69 | + |
| 70 | +--- |
| 71 | + |
| 72 | +## Phase 3 — Tag and release |
| 73 | + |
| 74 | +7. **Stop and wait** for confirmation that: |
| 75 | + - All CI checks have passed |
| 76 | + - CodeRabbit review comments have been addressed |
| 77 | + - The PR has been merged into `master` |
| 78 | + |
| 79 | +8. **Pull `master`**, then propose the annotated tag: |
| 80 | + - Tag name: `vX.Y.Z-{codename}` |
| 81 | + - Message: `Release X.Y.Z - Codename` |
| 82 | + |
| 83 | +9. **After confirmation**: create and push the tag. The CD pipeline triggers |
| 84 | + automatically. |
0 commit comments