Repository navigation
ci: update PRs merge themselves when they ship nothing, and report the rest - #60
Merged
Merged
Conversation
update-prs.yml decides every update pull request once its CI completes: red is rerun once, then reported with the failed steps and log tails; green merges only when nothing the extension ships changes, otherwise it waits for the owner with the reason. toolchain-updates.yml opens pull requests instead of issues, and .nvmrc is the one place the Node major is named. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rive update-prs.yml: the behind-main check is the last call before the merge, and a merge that still lands on a moved main is reported; a branch that moved meanwhile is no failure; the decide step times out into the failure report; a pnpm pull request merges only when package.json changes nothing but packageManager. toolchain-updates.yml: the pnpm update changes packageManager alone, so nothing from npm runs beside the write token; a push only closes what an open pull request replaces; closes check state first; the CI dispatch is retried; the weekly run rebuilds a bot-only pull request that main has moved into conflict with, and starts CI on one without. patched-libraries.yml: a newer version supersedes the older issue and pull request. docs/maintenance.md maps every update source. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Only the bots' own pull requests and titles count: a stranger's pull request with such a title neither blocks an update nor is closed or rebuilt, and a fork's is never touched. The weekly repair rebuilds on a freshly fetched main, and starts CI where the head has no run that decides (a cancelled one does not). A close that fails, or a pull request closed while update-prs.yml decides, is no failure. A merged branch is deleted. patched-libraries.yml supersedes in a sweep on every run, so a close that failed once is retried. toolchain-updates.yml reports its own failure as an issue. The guard tests read setup-node steps however they are quoted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CodeQL flagged the regex built from the pattern list for escaping dots and brackets but not backslashes. Both lists are now parsed the same way and compared. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Sep 29, 2026
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.
Update pull requests now decide themselves once CI finishes. Routine ones merge when CI is green. Every other one reaches you as an @mention email that says whether CI is green or red and why the PR waits.
docs/maintenance.mdmaps every update source. This PR ships nothing to Firefox: it changes only workflows, tools, tests and docs.What merges itself, and what waits for you
update-prs.yml(new) runs after every completed CI run on this repo'sdependabot/*,toolchain/*,patched/*andsync/upstreambranches. It never checks out PR code.CI red: the failed jobs are rerun once. If CI is still red, one comment @mentions you with:
The PR gets the
ci-failedlabel and is assigned to you.CI green, merged: only a Dependabot npm minor/patch PR or a pnpm same-major PR, and only when all of these hold:
package.jsonandpnpm-lock.yamlchange (for pnpm, only thepackageManagerline);The build comparison is auto-release.yml's own test, so such a merge releases nothing. The merged branch is deleted.
CI green, everything else (Node, a pnpm major, GitHub Actions, patched libraries, the upstream sync, a shipped library, any major): one comment @mentions you with the reasons it waits, and the PR is assigned to you. The comment is edited in place while the PR keeps waiting. You get a new email only when the PR turns red, turns green, is merged, or fails at a different step.
Edge cases:
toolchain-updates.ymlnow opens pull requests instead of issues:.nvmrc. This is always your decision. Node 26 comes as a PR when it becomes LTS, around late October.packageManager, and update-prs.yml merges it. Nothing from npm runs in this job, which holds a write token. CI installs the unchanged lockfile with the new pnpm (--frozen-lockfile), so a pnpm that wants the lockfile rewritten fails CI and reaches you.How these PRs are kept tidy:
.nvmrcnames the Node major everywhere. Every setup-node step andtools/linux/setup.shread it. The reason: this token may not push workflow files, so a Node update has to be a one-file change. A unit test fails if any workflow names its own Node version.Dependabot:
shipped-minor-and-patch(fuse.js, pako, sortablejs) andtooling-minor-and-patch, so a tooling update is not held back by a shipped one. A test keeps the shipped group equal to the librariestools/sync-vendor.mjscopies, minus the ignored ones.cooldown).patched-libraries.yml:Docs:
docs/maintenance.mdis new.docs/amo-source-submission.mdnow points topackageManagerinstead of naming a pnpm version, which the first pnpm merge would have made stale.Tests
update-prs.yml: its decide step runs in a harness, with gh, sleep and unzip stubbed and jq, sed, diff and real zips used as is. 152 checks pass. 35 mutants were made, each removing one safety condition, and all 35 were caught. shellcheck is clean.toolchain-updates.yml: its step runs against real git with a local bare origin and a stub gh. 80 checks pass, and 25 of 25 mutants were caught.patched-libraries.yml: the supersede sweep passes 16 of 16 checks against a stub gh.pnpm run lint,pnpm run typecheckandpnpm testall pass (616 tests). actionlint 1.7.12 with shellcheck 0.11.0 is clean on every workflow.uses:line would slip past.After merging
.nvmrcset to 26, as an early look at Node 26.🤖 Generated with Claude Code