From cf03be8774d82c34189f9352802a78331a0a5304 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Tue, 3 Nov 2026 12:17:54 -0800 Subject: [PATCH 1/2] ci(repo): keep production releases running when main moves A merge to main during a production release cancelled the run in the middle of changeset publish, which left half the packages on npm. Canary pushes now queue behind an in-progress run instead of cancelling it. Version packages pushes and snapshot runs still cancel. The release script no longer pushes main after publish. changeset publish creates tags only, and changesets/action pushes each tag itself. The push failed with a non-fast-forward error on any re-run after main had moved. --- .changeset/release-keep-production-runs.md | 2 ++ .github/workflows/release.yml | 6 +++--- package.json | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 .changeset/release-keep-production-runs.md diff --git a/.changeset/release-keep-production-runs.md b/.changeset/release-keep-production-runs.md new file mode 100644 index 00000000000..a845151cc84 --- /dev/null +++ b/.changeset/release-keep-production-runs.md @@ -0,0 +1,2 @@ +--- +--- diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 03b03de580b..3ee7eda2c90 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,7 +41,7 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.event_name == 'issue_comment' && format('issue-{0}-{1}', github.event.issue.number, github.actor) || github.event_name == 'workflow_dispatch' && format('snapshot-{0}-{1}', inputs.pr_number, inputs.requester) || github.ref }} - cancel-in-progress: true + cancel-in-progress: ${{ github.event_name != 'push' || contains(github.event.head_commit.message, 'Version packages') }} jobs: release: @@ -171,8 +171,8 @@ jobs: core.warning("Changeset in pre-mode should not prepare a ClerkJS production release") } - # Recovery: if the changesets action published to npm but then failed - # (e.g. git push --follow-tags error), the `published` output is never + # Recovery: if the changesets action published to npm but then failed, + # the `published` output is never # set and downstream repos are not notified. This step detects that # scenario by checking npm for the local package version and dispatches # if the packages are already live. diff --git a/package.json b/package.json index 52c667c6efc..9bce34b1307 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "nuke": "node ./scripts/nuke.mjs", "prepare": "husky install", "pub": "pkglab pub", - "release": "changeset publish && git push --follow-tags && node scripts/wait-for-packages-on-npm.mjs", + "release": "changeset publish && node scripts/wait-for-packages-on-npm.mjs", "release:canary": "changeset publish --tag canary --no-git-tag && node scripts/wait-for-packages-on-npm.mjs", "release:canary-core3": "changeset publish --tag canary-core3 --no-git-tag && node scripts/wait-for-packages-on-npm.mjs", "release:snapshot": "changeset publish --tag snapshot --no-git-tag && node scripts/wait-for-packages-on-npm.mjs", From 98935355aa050ad9a8827c57d128ac7113629159 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Tue, 3 Nov 2026 12:39:19 -0800 Subject: [PATCH 2/2] ci(repo): push release tags without pushing main The npm wait runs after the tag push and can time out. changesets/action pushes tags only when the whole release command succeeds, so dropping the push would lose the tags in that case. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9bce34b1307..5d6f89232fc 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "nuke": "node ./scripts/nuke.mjs", "prepare": "husky install", "pub": "pkglab pub", - "release": "changeset publish && node scripts/wait-for-packages-on-npm.mjs", + "release": "changeset publish && git push origin --tags && node scripts/wait-for-packages-on-npm.mjs", "release:canary": "changeset publish --tag canary --no-git-tag && node scripts/wait-for-packages-on-npm.mjs", "release:canary-core3": "changeset publish --tag canary-core3 --no-git-tag && node scripts/wait-for-packages-on-npm.mjs", "release:snapshot": "changeset publish --tag snapshot --no-git-tag && node scripts/wait-for-packages-on-npm.mjs",