release.yml: an unmatched CHANGELOG version fails the release, not a placeholder - #670
Merged
Merged
Conversation
…not a placeholder that ships v2026.9.18.1's GitHub Release went out with its notes body reading literally "(no CHANGELOG entry found for 2026.9.18.1)" -- the extraction step found no `## [<version>]` heading in CHANGELOG.md (the entries were still under `## [Unreleased]`), wrote that placeholder, and let the release publish anyway. A release is outward-facing and permanent; a missing section is an authoring mistake to fix before tagging, not something to paper over into a log nobody reads until the release is already public. Replaces the placeholder-and-continue with `::error::` + `exit 1`: the job stops before the "Create GitHub Release" step runs at all, so nothing publishes with empty notes. No workflow-execution harness exists in this repo to exercise this step in CI (no `act`, no dry-run job for release.yml) -- verified locally instead, by extracting the exact shell block and running it standalone against two synthetic CHANGELOG.md fixtures: a matching `## [<version>]` section (prints the notes, exit 0) and a version with none (prints the ::error:: line, exit 1). `tools/lint-ci-assertions.sh .github/workflows/release.yml` reports no findings against the change.
Member
Author
|
Merged by admin override because the ruleset requires two approvals and only one operator is present. |
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.
Summary
A defect the c-environment wave (#668) revealed in the release machinery, not
part of that wave's own implementation — filed separately on purpose.
v2026.9.18.1's GitHub Release published with its notes body readingliterally
(no CHANGELOG entry found for 2026.9.18.1). The "Extract releasenotes from CHANGELOG" step in
release.ymlscansCHANGELOG.mdfor a## [<version>]heading; #668's entries had been written under## [Unreleased]only, so the scan found nothing, wrote that placeholderstring, and let the release publish anyway. A release is outward-facing and
permanent — it should not be possible to publish one whose notes silently
came out empty.
Change
Replaces the placeholder-and-continue with a hard failure:
The job stops before "Create GitHub Release" runs, so nothing publishes with
empty notes. No redesign of the extraction logic itself — same
awk, sameheading format, same file.
Verification
This repo has no workflow-execution harness (no
act, no dry-run job forrelease.yml) to exercise this step directly in CI, so I verified it the onlyway available: extracted the exact shell block and ran it standalone against
two synthetic
CHANGELOG.mdfixtures.## [<version>]section → notes are printed,exit 0.
::error::line is printed,exit 1.
Also ran the repo's existing static check against the changed file:
CHANGELOG.mdalready carries a## [2026.9.18.1]section (fixed separately,after #668 merged), so this change does not retroactively fail the release
that already shipped — only a future one whose CHANGELOG section is still
missing at tag time.
Not in scope
Per the coordinator's explicit instruction: this PR does not redesign the
notes-extraction logic, and does not invent a workflow-execution test harness
that does not already exist in this repo — the manual verification above is
reported as manual, not dressed up as an automated test.