Skip to content

Commit f7ff9ec

Browse files
committed
Automate release checklist for version and changelog
1 parent 2cf45e0 commit f7ff9ec

6 files changed

Lines changed: 93 additions & 2 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: release-checklist
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
workflow_dispatch:
8+
inputs:
9+
version:
10+
description: "Release version (vMAJOR.MINOR.PATCH)"
11+
required: true
12+
type: string
13+
14+
jobs:
15+
checklist:
16+
runs-on: ubuntu-latest
17+
env:
18+
RELEASE_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.version || github.ref_name }}
19+
steps:
20+
- name: Checkout
21+
uses: actions/checkout@v4
22+
23+
- name: Validate release checklist
24+
run: ./scripts/release_checklist.sh "${RELEASE_VERSION}"

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
## Unreleased
6+
7+
- Ongoing work toward `v0.19.0` tooling and quality milestones.
8+
9+
## v0.19.0 - Unreleased
10+
11+
- Milestone in progress. Use this section for release-ready change summaries.
12+
13+
## v0.1.0 - 2026-02-19
14+
15+
- Initial pre-1.0 project baseline and public documentation set.

ROADMAP.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ Goal: improve day-to-day developer productivity and interpreter robustness.
334334
### CI and Release Engineering
335335

336336
- [x] Add smoke tests for docs examples to CI.
337-
- [ ] Add release checklist automation for changelog/version bumps.
337+
- [x] Add release checklist automation for changelog/version bumps.
338338
- [x] Add compatibility matrix notes for supported Go versions.
339339

340340
### v0.19.0 Definition of Done

cmd/vibes/repl.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ func (m replModel) View() string {
558558
var b strings.Builder
559559

560560
header := headerStyle.Render("VibeScript REPL")
561-
version := mutedStyle.Render("v0.1.0")
561+
version := mutedStyle.Render("v0.19.0")
562562
b.WriteString(header + " " + version + "\n")
563563
b.WriteString(mutedStyle.Render(strings.Repeat("─", min(m.width-2, 60))) + "\n\n")
564564

docs/releasing.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,25 @@ This repository uses GoReleaser for changelog generation and GitHub releases. Th
1414
1. Tag the release locally and push it (e.g., `git tag -a v0.1.0 -m "v0.1.0"` then `git push origin v0.1.0`).
1515
2. GitHub Actions picks up `v*` tags via `.github/workflows/release.yml` and runs `goreleaser release --clean` with `GITHUB_TOKEN` injected.
1616

17+
## Automated release checklist
18+
19+
Before tagging, run the checklist automation:
20+
21+
```bash
22+
./scripts/release_checklist.sh v0.1.0
23+
```
24+
25+
The checklist verifies:
26+
27+
- `CHANGELOG.md` contains a `## vX.Y.Z` heading.
28+
- `ROADMAP.md` contains a matching milestone heading.
29+
- The REPL version label in `cmd/vibes/repl.go` matches the target version.
30+
- The version tag does not already exist locally.
31+
32+
The same validation runs automatically on tag pushes via
33+
`.github/workflows/release-checklist.yml` and can also be run manually via
34+
GitHub Actions `workflow_dispatch`.
35+
1736
### Local dry run (optional)
1837

1938
If you want to test locally instead of waiting for CI:

scripts/release_checklist.sh

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
if [[ $# -ne 1 ]]; then
5+
echo "usage: scripts/release_checklist.sh <version>" >&2
6+
echo "example: scripts/release_checklist.sh v0.19.0" >&2
7+
exit 2
8+
fi
9+
10+
version="$1"
11+
if [[ ! "${version}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
12+
echo "invalid version '${version}': expected vMAJOR.MINOR.PATCH" >&2
13+
exit 2
14+
fi
15+
16+
fail() {
17+
echo "release checklist failed: $1" >&2
18+
exit 1
19+
}
20+
21+
[[ -f CHANGELOG.md ]] || fail "missing CHANGELOG.md"
22+
[[ -f ROADMAP.md ]] || fail "missing ROADMAP.md"
23+
[[ -f cmd/vibes/repl.go ]] || fail "missing cmd/vibes/repl.go"
24+
25+
grep -Eq "^## ${version}( |$)" CHANGELOG.md || fail "CHANGELOG.md missing heading for ${version}"
26+
grep -Eq "^## ${version}( |$)" ROADMAP.md || fail "ROADMAP.md missing milestone heading for ${version}"
27+
grep -Fq "version := mutedStyle.Render(\"${version}\")" cmd/vibes/repl.go || fail "REPL version label does not match ${version}"
28+
29+
if git rev-parse -q --verify "refs/tags/${version}" >/dev/null 2>&1; then
30+
fail "git tag ${version} already exists locally"
31+
fi
32+
33+
echo "release checklist passed for ${version}"

0 commit comments

Comments
 (0)