Skip to content

feat(release): auto-generate release notes from Conventional Commits#78

Merged
fullstackjam merged 1 commit into
mainfrom
worktree-release-changelog
May 17, 2026
Merged

feat(release): auto-generate release notes from Conventional Commits#78
fullstackjam merged 1 commit into
mainfrom
worktree-release-changelog

Conversation

@fullstackjam
Copy link
Copy Markdown
Collaborator

Summary

The release body was a static "Installation + Binaries" template — every release looked identical with zero mention of what changed. v0.58.0 is the latest example: bundled both #76 (the new progress bar) and #77 (the fixes), but the GitHub release page tells the user nothing about either.

Append a "What's Changed" section generated from git log <prev-tag>..<version>, grouped by Conventional Commit type (Features / Bug Fixes / Performance / Refactors / Docs / Tests / Chores / CI), with a Full Changelog compare link.

Validated locally against v0.57.0..v0.58.0:

## What's Changed

### Features
- feat(install): real-time progress bar for cask downloads via scroll region (#76)

### Bug Fixes
- fix(install): bottom-anchored progress bar + real byte tracking (#77)

**Full Changelog**: https://github.com/openbootdotdev/openboot/compare/v0.57.0...v0.58.0

Harness rationale

Per docs/HARNESS.md, repeated friction becomes a control. "Release notes are blank" was previously the kind of thing that gets noticed AFTER each release. Encoding it as a workflow step means the next release (and every release after) writes them automatically — no manual step to forget. Added a row to the controls table so the next agent that goes looking for "where is this generated" finds it directly.

What this does NOT do

  • Doesn't backfill v0.58.0's notes — that's a one-shot gh release edit after merge
  • Doesn't change auto-release.yml — release dispatch logic untouched
  • Doesn't add a tool dependency — pure bash + git, runs on the existing release runner

Test plan

  • Smoke-tested the generator shell logic locally against v0.57.0..v0.58.0, output matches the expected grouping
  • Conventional commit prefix regex tolerates both feat: and feat(scope): forms
  • First-release edge case handled (git describe --tags --abbrev=0 ^ returns empty → skip the "What's Changed" section entirely)
  • Next real release that fires release.yml will validate end-to-end (workflow_dispatch can also be used to re-run for v0.58.0 once this lands)

The release body was a static 'Installation + Binaries' template — every
release looked identical with zero mention of what changed. Append a
'What's Changed' section generated from `git log <prev-tag>..<version>`,
grouped by conventional-commit type (Features / Bug Fixes / Performance /
Refactors / Docs / Tests / Chores / CI), with a Full Changelog compare
link.

Skipped on the first release (no prior tag to compare). Non-conventional
commits are dropped — CLAUDE.md already enforces the convention so this
should be rare, and silence is better than a misleading row.

Codifies the pattern in docs/HARNESS.md so the next agent that goes to
edit release notes manually finds the generator step instead.
@github-actions github-actions Bot added ci CI/CD changes docs labels May 17, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented May 17, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@fullstackjam fullstackjam merged commit 810b143 into main May 17, 2026
14 checks passed
@fullstackjam fullstackjam deleted the worktree-release-changelog branch May 17, 2026 11:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci CI/CD changes docs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant