Repository navigation
Conversation
Every label is defined in .github/labels.yml, grouped into families named for the question each answers: area, status, size, priority, type and ci. scripts/sync-labels.py applies the file, renaming labels in place so everything that carries one keeps it; a pull request that changes it gets a dry run, and the push to main applies it. pr-triage.yml sizes every pull request from its reviewable lines and gives a ready one with no status 'status: waiting on review'. label-gate.yml fails while a pull request carries a status that holds the merge. Every workflow, template and doc that named a label now uses the new name. docs/labels.md describes the system.
Bundle size reportCompared with
WebAssembly modules
No file changed size. Commit: 791367a |
|
CI Status: 24 required jobs green, 22 passed and 2 skipped by path filter. All job results
Signing credentials: valid as of 2026-10-27 Commit |
|
16.10 Decisions: Issue fields: Labels at the Issue level:
There are other non-grouped labels on the issue level. Labels at the PR level:
|
# Conflicts: # .github/workflows/host-playground-e2e.yml # .github/workflows/ios-pr.yml # README.md
Names are family:value, matching the labels created in the repository. Issues take area, needs and spa; pull requests take status, needs, size and ci. Type, status and target date on issues are issue fields, so the type and priority families are gone, and the labels whose replacement is still open are held as pending. Pull requests no longer carry an area. issue-areas.yml adds the areas a pull request touches to the issues it closes, reading the path map from .github/areas.yml, which check-path-routing.py now holds to CODEOWNERS. The backport job finds its open work order by branch rather than by area label. The label gate holds on any needs label and on status:blocked.
When a new label and an old one both exist, the sync merges the one on fewer items into the other and gives the survivor the new name, so the migration writes 21 labels rather than one per pull request carrying an old one. Writes pause between calls and back off on rate limits, and a merge skips items already labelled, so an interrupted run can be repeated. issue-areas.yml runs when a pull request merges, so an unmerged or forked pull request cannot label issues. pr-triage.yml reads .gitattributes with the permission it needs and matches its patterns as git does. The RFC skill's commands use area:rfc, and the docs say when areas are applied, that older pull requests keep theirs, and that priority is an issue field.
# Conflicts: # .github/workflows/ios-device-preview.yml # .github/workflows/ios-pr.yml
Agents label pull requests and file issues, so the skill says which labels to set by hand and which are automatic, when a ci: label is worth its macOS jobs, how status and needs labels move, and that a label is only ever added or renamed through .github/labels.yml.
|
@TarikGul fyi I've deprecated |
# Conflicts: # .github/workflows/android-instrumented-tests.yml # .github/workflows/ci.yml
| .replace(/\u0001/g, '(.*/)?') | ||
| .replace(/\0/g, '.*') + '$'); | ||
| const { data } = await github.rest.repos.getContent({ | ||
| owner, repo, path: '.github/areas.yml', ref: pr.base.sha, |
There was a problem hiding this comment.
I think pr.base.sha may not be what we want here: it stays at the base commit of the last sync, so a PR merged without a re-sync would not find areas.yml and the 404 would fail the run. Would ref: pr.base.ref work instead? WDYT?
There was a problem hiding this comment.
Switched to merge_commit_sha, which also covers pull requests opened before areas.yml existed.
| timeout-minutes: 5 | ||
| permissions: | ||
| contents: read | ||
| issues: read |
There was a problem hiding this comment.
I think this job also needs pull-requests: read: without it the issues endpoint hides PRs, so the dry run counts 10 items on rust where there are 263 and ends up planning the opposite merge direction from the one apply will take
There was a problem hiding this comment.
Added pull-requests: read to the plan job.
| # Keep it flat: a quoted label, then one quoted glob per line. issue-areas.yml | ||
| # reads it without a YAML parser. | ||
|
|
||
| "area:rfc": |
There was a problem hiding this comment.
RFC-only PRs also match docs/**, so their issues get area:docs too. Is that intended? If not, exclude docs/rfcs/ from area:docs.
There was a problem hiding this comment.
Excluded docs/rfcs/ from area:docs.
| root = root_of(glob) | ||
| if root: | ||
| roots.add(root) | ||
| for globs in data.values(): |
There was a problem hiding this comment.
Optional: also check that every area label is defined in labels.yml. At the moment a typo passes and creates a new label on GitHub.
There was a problem hiding this comment.
Added, a misspelt area now fails the check.
| return; | ||
| } | ||
| const label = 'ios-simulator-build'; | ||
| const label = 'ci:ios-simulator'; |
There was a problem hiding this comment.
Optional: skip-ci (line 192) isn't in labels.yml and doesn't exist in the repo. Define it or drop the check.
There was a problem hiding this comment.
Gone, main moved that logic out when it split ios-app.yml.
| reason: "Release-specific, and that release has passed" | ||
|
|
||
| # Left exactly as they are until their replacement is decided. | ||
| pending: |
There was a problem hiding this comment.
Optional: python and Stability aren't listed. Add them to pending or retired.
There was a problem hiding this comment.
Added both under pending.
# Conflicts: # .github/workflows/android-device-preview.yml # .github/workflows/android-instrumented-tests.yml # .github/workflows/ci.yml # .github/workflows/host-playground-e2e.yml # .github/workflows/ios-app.yml # .github/workflows/ios-device-preview.yml # README.md
issue-areas.yml reads .github/areas.yml from the merge commit, so a pull request opened before the file existed still finds it. The sync plan job reads pull requests, so its counts match the apply. areas.yml takes a ! glob to keep docs/rfcs/ out of area:docs, and check-path-routing.py fails on an area labels.yml does not define. python and Stability are pending.
decrypto21
left a comment
There was a problem hiding this comment.
Approved, nits:
pr-triage.yml:25:cancel-in-progresscan drop the status when a push follows open, ready or draft. Set it on every event.label-gate.yml:16: merge_group always passes, but queued pull requests can still be labelled.issue-areas.yml:70: 404 when the base has noareas.yml(release/*).- Old label names left in comments in the iOS, Android and e2e preview workflows.
…ued runs pr-triage.yml decides status:waiting-on-review from the pull request's state on every event, so a run a push cancels leaves nothing the next run misses. Label gate reads the queued pull request's labels in the merge queue, since a queued pull request can still be labelled. issue-areas.yml labels nothing when the base branch has no areas.yml, and the preview workflows' comments name the ci: labels.
Defines every label in
.github/labels.ymland triages pull requests and issues by them, following up on the process workshop and the label decisions of 16.10.docs/labels.mddescribes the system.Names are
family:value, matching the labels already created in the repository.On issues
area:(core, ios, android, js, ci, docs, rfc)needs:(decision, spec, UI)spa:(humanity, jollity, scarcity, seity)Type, status, priority and target date on issues are issue fields, not labels.
On pull requests
status:(waiting-on-review, waiting-on-author, ready-to-merge, blocked)waiting-on-reviewautomatically, the rest by handneeds:(decision, spec, UI)size:(XS to XXL)ci:(ios-simulator, ios-device, android-device, android-emulator-tests, host-playground-e2e, no-changeset)scripts/sync-labels.pyapplies the file. It renames labels in place so everything keeps what it carries. Where the new name already exists, it merges whichever label is on fewer items into the other and gives the survivor the new name, so the migration writes 21 labels rather than one per item. Writes are paced and retried on rate limits, and an interrupted run can be repeated. This pull request's checks include a dry run of the 23 changes: the old path labels becomearea:labels (rustabsorbs the 21 issues already onarea:core), each old build label becomes itsci:label in the same merge that switches the workflows over, andinvalid,w3sandpost-w3sare deleted. Nothing changes until it merges.issue-areas.ymlruns when a pull request merges and adds the areas it touched to the issues it closes, from the paths in.github/areas.yml, whichcheck-path-routing.pyholds to CODEOWNERS. Older pull requests keep the areas they had.pr-triage.ymlsizes every pull request from the lines a reviewer reads, leaving out what.gitattributesmarks generated, lockfiles and database schemas, and gives a ready pull request with no statusstatus:waiting-on-review.label-gate.ymlfails while aneeds:label orstatus:blockedis on a pull request. The backport job finds its work order by branch.Beyond the 16.10 decisions:
needs:labels also go on pull requests, and the label gate holds a merge while one is on.Left as they are until decided:
Epic,enhancement,feature request,proposal,R2 blocker,R3+andhost-work.After merge:
Label gatea required check on main, so it holds a merge rather than only reportingrfc, which becomesarea:rfc#1396 names the build labels by their old names, so whichever of the two merges second needs a small update.