Skip to content

Sync CHANGELOG.md with GitHub releases and automate release notes#50

Merged
nllong merged 2 commits into
developfrom
chore/sync-changelog-with-releases
Jul 14, 2026
Merged

Sync CHANGELOG.md with GitHub releases and automate release notes#50
nllong merged 2 commits into
developfrom
chore/sync-changelog-with-releases

Conversation

@nllong

@nllong nllong commented Jul 14, 2026

Copy link
Copy Markdown
Member

Summary

  • Rewrites CHANGELOG.md in Keep a Changelog format with a section for every published GitHub release (v0.1-pr.1 through v0.3.1). The previous "# Unreleased" section was stale — all of its content had already shipped, split across v0.3.0 and v0.3.1.
  • Adds scripts/changelog.sh (extract/finalize) to programmatically read/update CHANGELOG.md sections.
  • make release now finalizes the Unreleased section into a dated version heading, commits it, then tags and pushes — no more manual CHANGELOG editing before releasing.
  • .github/workflows/publish.yml now extracts the pushed tag's CHANGELOG.md section and passes it to goreleaser via --release-notes, so the GitHub release body matches CHANGELOG.md exactly (previously it was goreleaser's raw commit-hash list, unrelated to CHANGELOG.md).
  • docs/release.md updated to describe the new automated flow.

Testing

  • make all (build + test) passes.
  • Verified changelog.sh extract/finalize against the new CHANGELOG.md.
  • Ran make release-check VERSION=x.y.z locally with a temporary dummy Unreleased entry — passes goreleaser check + snapshot release using extracted notes.
  • Ran a full make release VERSION=x.y.z dry run in an isolated scratch clone against a local bare remote to confirm the finalize -> commit -> tag -> push flow works correctly end-to-end.

Nicholas Long and others added 2 commits July 14, 2026 07:07
- Rewrite CHANGELOG.md in Keep a Changelog format, adding a section for
  every published GitHub release (v0.1-pr.1 through v0.3.1), splitting
  the stale "Unreleased" content into the v0.3.0/v0.3.1 sections it
  actually shipped in.
- Add scripts/changelog.sh with `extract` and `finalize` subcommands to
  read/update CHANGELOG.md sections programmatically.
- Makefile: add `changelog-check`, wire it into `release-check`, and have
  `release` finalize the "Unreleased" section into a dated version
  heading, commit it, then tag and push.
- publish.yml: extract the pushed tag's CHANGELOG.md section and pass it
  to goreleaser via --release-notes, so the GitHub release body matches
  CHANGELOG.md exactly instead of goreleaser's raw commit-list changelog.
- Update docs/release.md to describe the new automated flow.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Cross-checked every commit against every release section:
- Add a missing v0.3.0 entry for the -extra-padding flag (adds a blank
  line after most semicolons), which was previously only mentioned in
  passing in the v0.3.1 notes.
- v0.2-pr.2: note the curly-brace line-break fix that shipped alongside
  the 80-char line length feature.
- v0.2-pr.1: the flag is -v only, there is no separate -version alias.
- v0.1-pr.1: remove an inaccurate array-constructor claim; that rule
  actually shipped in v0.1-pr.2.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@nllong
nllong merged commit 704e467 into develop Jul 14, 2026
1 check passed
@nllong
nllong deleted the chore/sync-changelog-with-releases branch July 14, 2026 14:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant