Some checks failed
CI / test (pull_request) Failing after 3m13s
CI / release-exercise (pull_request) Successful in 11s
CI / self-guards (pull_request) Successful in 7s
CI / action-exercise (pull_request) Successful in 6s
CI / docs-sync-exercise (pull_request) Successful in 6s
Refs guard / refs-not-closing (pull_request) Has been skipped
labels / labels (pull_request) Successful in 8s
Three corrections from @codex-reviewer-andresmgsl's review of 935a813.
1. `api="${GITHUB_API_URL:-https://api.github.com}"` guessed GitHub when the
variable was absent — driven with a recording curl, it reported success
after POSTing to api.github.com from this forge. That is the "Never
'probably github'" rule, and the same unset-environment refusal #201 just
established for docs-sync. It now refuses before any request, and the test
asserts zero calls were made: refusing after a POST is not refusing.
2. The "never silenced with || true" invariant was still asserted by grepping
the gh line this port removed, so it passed on any REST implementation
including one that swallows a failed POST. It is rebound behaviourally: a
curl that dies at the transport must fail the step. Doing that revealed the
step failed with a bare exit 7 and no sentence, so it now names the failure
— owning the diagnostic is the whole point of the surrounding code.
3. docs/CONSUMERS.md and both caller comments still described `gh workflow
run` as the mechanism. They describe the REST dispatch now, and the manual
bootstrap command carries a forge-neutral curl form beside the gh one: a
cross-forge runbook that sends this forge to a missing binary is wrong even
where the prose around it is right.
Refs #205
51 lines
2.9 KiB
YAML
51 lines
2.9 KiB
YAML
name: labels
|
|
# Ceremony's own caller for the labels automation — the dogfood of issue
|
|
# #11, wearing the same local-`uses:` deviation as self-release.yml and the
|
|
# same warning: consumers must NEVER copy the local form (it rides main,
|
|
# unpinned — correct only for the repo that IS the source). Consumers write:
|
|
# uses: heavy-duty/ceremony/.github/workflows/labels.yml@<pinned-tag>
|
|
#
|
|
# Since #209 this caller carries the PR/issue event surface only. The
|
|
# reconcile sweep no longer rides these runs — the reusable's trigger job
|
|
# dispatches the sweep caller (self-labels-sweep.yml here), which owns the
|
|
# hourly cron and the manual/bootstrap workflow_dispatch. A board event
|
|
# below still yields a sweep within seconds, one dispatch hop later.
|
|
on:
|
|
# Narrowed (#199) to the actions that carry a queue-state change the hourly
|
|
# cron cannot wait one cadence for — dropping only labeled/unlabeled/assigned/
|
|
# unassigned, which feed validation and the 48h claim clock (caught within one
|
|
# cadence) and were the dominant issues-churn source. Kept: `opened` (the
|
|
# mint→needs-triage check, issueflow's opened-only path), `closed` (the
|
|
# blocker-closes→ready self-heal, crew#96/#98), `edited` (a body rewrite of the
|
|
# `Blocked by #N` declaration the sweep parses — issueflow-reconcile.sh:179),
|
|
# `reopened` (a closed issue re-entering the queue wearing labels derived when
|
|
# it closed). The must-fail in #199 is exactly "a queue-state transition waits
|
|
# on the schedule when an event could have carried it", so edited/reopened stay
|
|
# on events. The PR handoff wake is pull_request_target:labeled, NOT issues, so
|
|
# this does not touch the handoff.
|
|
issues:
|
|
types: [opened, closed, edited, reopened]
|
|
pull_request_target:
|
|
# Every PR arrives from a fork, so these carry the head/draft/review facts
|
|
# the sweep derives state:* from. labeled/unlabeled are the handoff wake —
|
|
# the author's optimistic state:needs-human write, confirmed or corrected
|
|
# here in seconds (#11); synchronize re-derives on every push;
|
|
# review_requested/review_request_removed wake the sweep that clears (or
|
|
# restores) blocker:unrequested — without them the one event that makes
|
|
# the label false could not clear it, and a quiet repo wore the red flag
|
|
# until the advisory cron (#137).
|
|
types: [opened, reopened, ready_for_review, converted_to_draft, synchronize, labeled, unlabeled, review_requested, review_request_removed]
|
|
permissions:
|
|
contents: read
|
|
checks: read # mergeability/check-rollup read for PR state
|
|
statuses: read # commit-status rollup read for PR state
|
|
actions: write # the trigger job's dispatch of the sweep caller (#209, #205)
|
|
issues: write
|
|
pull-requests: write
|
|
jobs:
|
|
labels:
|
|
uses: ./.github/workflows/labels.yml
|
|
with:
|
|
# Dogfood filename deviation only — consumers keep the default,
|
|
# labels-sweep.yml, and pass nothing.
|
|
sweep_workflow: self-labels-sweep.yml
|