Skip to content

chore(release): generate CHANGELOG from Conventional Commits with git-cliff - #25

Merged
opariffazman merged 1 commit into
mainfrom
chore/release-changelog-git-cliff
Jun 30, 2026
Merged

opariffazman merged 1 commit into
mainfrom
chore/release-changelog-git-cliff

Conversation

@opariffazman

Copy link
Copy Markdown
Contributor

Summary

Make git-cliff the single source of the changelog — generated from Conventional Commits and feeding both CHANGELOG.md and the GitHub Release, removing hand-curation so a tag bump is transparent for pinned consumers. Closes #24.

Component(s)

repo-wide · ci · docs (release tooling — no module input/output change)

Type

  • Added — new component or feature (MINOR)
  • Changed — behavior change to an existing component
  • Fixed — bug fix (PATCH)
  • Removed
  • Breaking input/output change — callers must edit their config (MAJOR)

Release-process / tooling change — no module input/output moved, so there is no module CHANGELOG entry and no dedicated version bump (the new flow takes effect at the next real release). Precedent: the original release automation shipped the same way.

Changes

  • scripts/release.sh — generate the new ## [X.Y.Z] section from git-cliff --unreleased --tag, splice it under ## [Unreleased], rewrite the compare links; add a git-cliff presence check and an empty-release refusal (chore/ci-only → nothing to release).
  • cliff.toml / .github/workflows/changelog.yml — document the single-source role; reword the PR changelog-preview comment ("published verbatim, no curation").
  • README.md — rewrite Versioning & releasing; add Release scope & pinned consumption (repo-wide tags, independent per-component pins, per-component changelog, machine-discoverable GitHub Release — issue asks Add github repository-factory component #1–feat(components): GCP cookbook — compute-engine + registry-backed network #3); add git-cliff to Toolchain.
  • .claude/skills/release/SKILL.md, CLAUDE.md, CHANGELOG.md header, PR template — drop the hand-curation model; v0.1.0–v0.6.0 history is frozen (it predates the commit gate; regen would empty/misrepresent it).

Validation

  • terraform fmt / validate / tflint pass on the changed components (no .tf changed → hooks skip)
  • Commit subjects are consumer-facing, type(scope): subject with scope = component — this PR's own commit is chore, so it's correctly omitted from the generated changelog
  • Component README / root README updated (README + CLAUDE.md updated)
  • Verified scripts/release.sh 0.7.0 --dry-run end-to-end: multi-type section, per-component scoping (**vpc:**/**ec2:**), correct splice + compare-link rewrite. git-cliff (2.13.1) dates the section today even for an older commit; a chore/ci-only range is correctly refused. Full pre-commit pass (actionlint, markdownlint, README-structure, secret/whitespace).

…-cliff

Make git-cliff the single source of the changelog: scripts/release.sh now
generates the new `## [X.Y.Z]` section from the release's Conventional Commits
(`git-cliff --unreleased --tag`), splices it under `## [Unreleased]`, rewrites the
compare links, and refuses a release with no consumer-facing commits. The same
cliff.toml backs the GitHub Release on tag push, so CHANGELOG.md == the Release.
No hand-curation; history <= v0.6.0 is frozen. git-cliff is now a required local
tool for release.sh. Docs (README scope/toolchain, /release skill, CLAUDE.md,
CHANGELOG header, PR template) updated to match.

Closes #24

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@opariffazman
opariffazman requested a review from Lexxick as a code owner June 30, 2026 03:29
@github-actions

Copy link
Copy Markdown

📝 Changelog preview

Generated from this branch's Conventional Commits — this is what the next vX.Y.Z tag publishes verbatim to CHANGELOG.md and the GitHub Release (no manual curation). Tighten an entry by tightening its commit subject; scope it to the component.

[Unreleased]

@opariffazman
opariffazman merged commit 0ce4444 into main Jun 30, 2026
14 checks passed
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.

[change] release process: changelog + per-release component scope so pinned consumers can bump transparently

1 participant