Repository navigation
feat(release/auto-changelog): update release changelogs deterministically from a predecessor baseline - #303
HowardBraham wants to merge 1 commit into
Conversation
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
All alerts resolved. Learn more about Socket for GitHub. This PR previously contained dependency changes with security issues that have been resolved, removed, or ignored. Ignoring alerts on:
|
|
@SocketSecurity ignore npm/get-stream@8.0.1 |
|
@SocketSecurity ignore npm/yargs@17.7.3 |
2598a03 to
45372b5
Compare
c4d7e15 to
f239d85
Compare
f239d85 to
08630c6
Compare
08630c6 to
2168c0d
Compare
2168c0d to
adaeded
Compare
adaeded to
eb7fc7f
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit eb7fc7f. Configure here.
eb7fc7f to
3cefe69
Compare
mcmire
left a comment
There was a problem hiding this comment.
I have not reviewed changes to scripts, but as far as the risk to other repos goes, this looks pretty safe to me. I don't believe other repos use the create-release-pr or update-release-changelog actions. (We do have a create-release-pr action which lives under http://github.com/MetaMask/action-create-release-pr, and we do use this in other repos, but that is completely separate from the one here.)
3cefe69 to
9113097
Compare
…ally from a predecessor baseline Replace update-release-changelog.sh with a TypeScript updater that builds the release section from the predecessor release's changelog plus the new PRs, keeps reviewer edits on an open changelog PR, and sends only new entries to the clean-room proofreader.
9113097 to
9194aea
Compare

References
Explanation
Current state
update-release-changelog.shregenerates the release section on every push to a release branch, from a previous-version ref the caller has to supply. It overwrites edits a reviewer made in the open changelog PR, has no defined behavior when the AI step fails, andcreate-platform-release-pr.shcreates the same changelog PR a second time, racing the push workflow for the same branch.Solution
update-release-changelog.mtsreplaces the shell script. On each run it does the following:stableor on its release branch. It rebuildsrelease-changelog/<version>from the release tip with that baseline'sCHANGELOG.md.auto-changelog(--preventBackfill), skips PRs already documented, and restores the generator's categories after proofreading. An entry's leading verb picks its category, and long PR links count as documented.validate --rconce proofreading succeeded, and checks for whitespace errors.CHANGELOG.mdis unchanged, so other release-branch commits don't replace the PR commit and dismiss approvals.(AI automation failed, not proofread)and writes a report. The release is never failed by the model.AI failure and retry
A failed run records
Changelog-Proofread: failedin its commit message. When the PR is still untouched (its only commit is the updater's, with that marker), the next run proofreads the whole section again instead of only the new entries. Without the marker, a run that folded a reviewer's edits into its own commit would be mistaken for untouched and would overwrite them. A branch left without a PR (for example a failedgh pr create) is regenerated when only the updater committed to it, and otherwise refused.Other changes
create-platform-release-pr.shno longer creates the changelog PR. It only generates the test plan, and the push workflow owns the changelog. It also runs from the action's own checkout (GITHUB_TOOLS_DIR) instead of a secondgithub-toolscheckout, so the action and script come from the same revision.update-release-changeloginstalls Node 24 and the github-tools dependencies and passes the AI key only to the proofreader step. The oldupdate-release-changelog.shis deleted.@metamask/auto-changeloggoes from^6.2.0to^7.0.1.release-version-utils.mtsholds branch parsing and version comparison.merge-previous-release-changelog.mtsnow uses itscompareSemver.update-release-changelog.test.mts,…-baseline.test.mts,…-git.test.mts(throwaway local origin and clone),release-section.test.mtsandrelease-version-utils.test.mts.Testing
2598a03):consensys-test/metamask-mobile-howard:consensys-test/metamask-extension-howard:v13.53.0, withstablecarrying upstream's changelog.Uncategorized.Note
Medium Risk
Changes core release automation (changelog generation, git pushes with force-with-lease, and PR creation), so regressions could affect every release branch push or duplicate/race changelog PRs; behavior is heavily tested but still high-impact CI.
Overview
Replaces release changelog updates with
update-release-changelog.mts, which rebuildsrelease-changelog/<version>from a predecessor baseline (target branch,stable, or prior release branch), runs@metamask/auto-changelogv7 with--preventBackfill, and merges only new PR entries while keeping reviewer edits from the open changelog PR. Clean-room AI proofreading applies to new entries only; failures keep the deterministic section, mark the PR as not proofread, and upload a report artifact.Release creation no longer opens a changelog PR or checks out github-tools separately—
create-platform-release-pr.shonly builds the test plan; the push workflow owns the changelog. Composite actions run scripts from the pinned action checkout viaGITHUB_TOOLS_DIR/github.action_path, with Node 24 and scoped LiteLLM credentials.Adds
release-section, baseline, and version-utils helpers (PR deduping, category restore, leased pushes, hotfix baseline trimming). The legacyupdate-release-changelog.shforwards to the TypeScript entrypoint for older callers.Reviewed by Cursor Bugbot for commit 9194aea. Bugbot is set up for automated code reviews on this repo. Configure here.