Repository navigation
fix(ci): a release fails its checks when its notes miss a commit merged after the cut - #7601
Merged
Merged
Conversation
Contributor
Contributor
There was a problem hiding this comment.
Verdict: APPROVE · 0 blocker · 1 important · 1 nit · head 83a43002
I ran the new check against the last 12 releases on main. 8 of them would have failed, and most of those were real late merges: #7577 in v0.9.37, plus misses in v0.9.32, v0.9.33 and v0.9.34. So the check catches the bug it targets. The fails-without-the-fix test is confirmed: with the completeness check stubbed out, test 7 fails and the other 11 pass.
- important ·
scripts/ci/release-only-diff.mjs:74: the remedy is wrong when the notes leave a commit out on purpose. v0.9.31 replaced #7502 and #7495 with an unlinked "Hardened release build." line, and this check would fail it. In that case, rebasing and rerunningrelease:preparefixes nothing and can overwrite the hand edits. The message should also say "or link each listed sha in the notes". - nit ·
scripts/ci/release-only-diff.mjs:101:--grepmatches any line of the message, so a squash body with a line startingchore: release vX.Y.Zmoves the anchor forward and silently shrinks the window. It also misses non-canonical release subjects: v0.9.28 anchored pastchore(release): cut v0.9.27and reported 28 commits. Matching subjects the same way asreleaseVersionsInSubjectswould fix both.
Scope
I read all 6 files. Local release-only-diff.test.mjs: 12/12 pass. CI is green on this head. BLOCKED is the review gate only. Release checks is not a required check in the main ruleset, so the queue will not eject a release until a maintainer makes it required. The PR body already says so.
Merged
3 of 5 tasks
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 release PR now fails its release check when its notes do not link every commit merged since the last release. The merge queue runs the same check against the main the release will land on, so a commit merged after the notes were drafted can no longer ship unlisted.
Why
The v0.9.38 notes were cut on a main that then took two more merges (#7593 and #7590). Merging would have published both without listing them, and the next draft starts from v0.9.38, so neither would ever have been listed. A reviewer caught it by hand. This makes the check automatic.
No visible change
CI and release tooling only. No Studio, player or CLI behaviour changes.
How
scripts/ci/release-only-diff.mjs --verify(the owner of "is this release consistent") now also finds the lastchore: release vX.Y.Zcommit before the base, lists the commits since, and reports any whose sha the notes do not link. Commits that notes leave out (releases, version bumps,[skip changelog]) never count.chore: release vX.Y.Z, alsochore(release): cut vX.Y.Z), never by a line inside another commit's message. When notes leave a commit out on purpose, the failure says to link its sha; it only suggests rebasing and rerunningrelease:prepareif main moved.scripts/changelog-skip.mjssodraft-changelog.tsand this check share one copy.release_diffoutput.release_onlystaysfalsethere, so the queue still runs every suite. TheRelease checksjob also runs when the queue holds a release diff.grep -rn "unlisted\|misses" scripts/cifound none.Test plan
node --import tsx --test scripts/ci/release-only-diff.test.mjs scripts/draft-changelog.test.ts scripts/ci/base-file.test.mjs scripts/merge-queue-workflows.test.mjs: 34 passed, 0 failed, three runs in a row.--verify fails a release whose notes miss a commit merged since the last release. With the completeness check removed, that test fails and the other 11 in the file pass. A second test (the last release is found by its subject...) goes red alone with the old line-grep anchor put back.oxfmt --checkandoxlinton the changed files are clean.tsc -p scripts/tsconfig.jsonreports the same 3 errors as main (generated files absent), none in the changed files.Release checksshould become a required check so the queue enforces this; a skipped required check passes, so ordinary PRs are unaffected. That setting is a maintainer's.