forked from heavy-duty/ceremony
The evidence shows the called workflow did not see the caller's event inputs on THIS instance while the top level received them (runs 459/523 vs probe 6/7); it does not show what GitHub or a declared-and-passed input does, so every prose site now states declare-and-pass as the measured-reliable channel rather than attributing a drop to Forgejo (@codex-reviewer-andresmgsl, !218 blocker 2). Refs #215
54 lines
2.8 KiB
YAML
54 lines
2.8 KiB
YAML
name: labels-sweep
|
|
# Ceremony's own sweep caller (#209) — self-labels.yml's detached half,
|
|
# wearing the same local-`uses:` deviation 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-sweep.yml@<pinned-tag>
|
|
on:
|
|
# The consumer owns this cadence (#203). Hourly is the recommended default
|
|
# when no other engine drives board state: the cron is then the sweep's ONLY
|
|
# wake for four transition classes — a review verdict landing (there is no
|
|
# pull_request_review trigger on the labels caller), blocker:ci-red set or
|
|
# cleared (no check_suite/check_run/workflow_run), a blocker:conflict when
|
|
# ANOTHER PR merges under this one, and the time-based stale / 48h
|
|
# claim-reclaim. The labels caller's events carry the rest in seconds, one
|
|
# trigger-job dispatch away. Hourly trades ≤1h of latency on those four
|
|
# while cutting nominal scheduled sweeps from four an hour to one at
|
|
# GitHub's 1-minute billing floor. Do not delete the cron: it is their
|
|
# discovery path. If another engine writes some of those transitions, only
|
|
# the classes with no other writer bound the cadence; relax it only as that
|
|
# list shrinks.
|
|
schedule: [{cron: "0 * * * *"}]
|
|
# A manual full-board sweep. A bare dispatch (input default "yes") also
|
|
# bootstraps the taxonomy on a fresh repo — what dispatching the labels
|
|
# caller did before #209. The reusable's trigger job wakes this workflow
|
|
# with bootstrap=no on every board event — an event-woken sweep must not
|
|
# re-upsert ~20 labels each time — so declaring this input is part of the
|
|
# caller contract: a dispatch naming an undeclared input is refused, and
|
|
# the trigger job goes loudly red.
|
|
workflow_dispatch:
|
|
inputs:
|
|
bootstrap:
|
|
description: Bootstrap the label taxonomy before sweeping
|
|
type: choice
|
|
options: ["yes", "no"]
|
|
default: "yes"
|
|
permissions:
|
|
contents: read
|
|
checks: read # mergeability/check-rollup read for PR state
|
|
statuses: read # commit-status rollup read for PR state
|
|
issues: write
|
|
pull-requests: write
|
|
jobs:
|
|
sweep:
|
|
# pr_workflow_name keeps its default: ceremony's PR-facing caller is
|
|
# named `labels` (self-labels.yml).
|
|
uses: ./.github/workflows/labels-sweep.yml
|
|
with:
|
|
# The dispatch input crosses the workflow_call boundary HERE, or not
|
|
# at all: on this instance the called workflow did not see this
|
|
# caller's event inputs implicitly (ceremony#215), so declare-and-pass
|
|
# is the only channel used. On `schedule` the top-level context is
|
|
# empty, and empty maps to "no" EXPLICITLY — a cron that bootstraps is
|
|
# the failure kimi named before it could exist.
|
|
bootstrap: ${{ inputs.bootstrap || 'no' }}
|