Repository navigation
ci: require a changelog entry for changes that ship - #85
Merged
Merged
Conversation
Prepare release turns ## Unreleased into the release notes, so a change under packages/ without an entry is missing from them. A new Changelog entry job fails such a PR; the skip-changelog label bypasses it, release/v* branches are exempt, and dependabot's npm and Actions updates get the label automatically. Each package's own test/ and README.md don't count as shipped; templates' test/ and .md files do.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A new Changelog entry CI job (
scripts/changelog-check.mjs). A PR that changes anything that ships must add at least one new line under## UnreleasedinCHANGELOG.md. Once #84 is merged, Prepare release turns that section into the release notes, so an entry missing there is missing from the release.What counts as shipped: anything under
packages/, except each package's owntest/folder andREADME.md. Templatetest/folders and template.mdfiles (e.g. the Claude rules) reach users, so they count.Exceptions:
skip-changeloglabel (already created), for a change with nothing to tell users. It works likeskip-bump-checkfrom ci: bypass the bump check with a skip-bump-check label #80, and adding or removing it reruns CI.release/v*branches, because the release PR folds## Unreleasedaway by design.skip-changelogautomatically throughdependabot.yml, since their commits are listed under the release's### Commits. Docker base-image PRs don't: they already need a hand-madeshared:dockerbump, and the entry gets added then.Documented in: the PR template (new "Changelog" section),
CONTRIBUTING.md,docs/repository-settings.md, andpnpm changelog:checkfor local runs.Needs a manual step
.github/rulesets/require-ci-to-pass.jsonnow listsChangelog entry, but the live ruleset only changes when someone with admin rights applies the file. Until then the check runs without blocking merges. The same applies toScaffold with the theme layer and build itfrom #79, which is in neither the file nor the live ruleset yet.Verified
isShipped(10 paths) andunreleasedEntries, covering multi-line bullets, no section, and a section at the end of the file.origin/main:packages/core/srcwith no entry fails, naming the fileCHANGELOG_CHECK_HEAD_REF=release/v1.4.0skipstscand the full test suite (1064 passed) pass. The workflow and dependabot YAML parse, and so does the ruleset JSON.