fix: align Ceremony actors with Forgejo #128
4 changed files with 41 additions and 4 deletions
4
.github/labels.conf
vendored
4
.github/labels.conf
vendored
|
|
@ -1,5 +1,5 @@
|
|||
panel=claude-bot-andresmgsl codex-bot-andresmgsl grok-bot-andresmgsl kimi-bot-andresmgsl
|
||||
triage-actors=dan-claude-bot
|
||||
panel=cluade-reviewer-andresmgsl codex-reviewer-andresmgsl grok-reviewer-andresmgsl kimi-reviewer-andresmgsl
|
||||
triage-actors=dan-claude-bot cluade-reviewer-andresmgsl
|
||||
scope:bootstrap|C5DEF5|bootstrap — hardening a pristine server into a node
|
||||
scope:users|C5DEF5|users-* — class model, apply/status, close-root
|
||||
scope:runner|C5DEF5|runner-* / forgejo-runner-* — CI runner lifecycle, either forge
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ genuinely rig's.
|
|||
1. **Fork and branch.** Contributors work from forks; upstream branches are
|
||||
for maintainers. Title the PR conventionally (`feat:`, `fix:`, `docs:`).
|
||||
2. **The review panel** (`.github/labels.conf`'s `panel=` line):
|
||||
`claude-bot-andresmgsl`, `codex-bot-andresmgsl`, `grok-bot-andresmgsl`,
|
||||
`kimi-bot-andresmgsl` —
|
||||
`cluade-reviewer-andresmgsl`, `codex-reviewer-andresmgsl`,
|
||||
`grok-reviewer-andresmgsl`, `kimi-reviewer-andresmgsl` —
|
||||
the required verdicts for a PR are the panel minus its author. The
|
||||
maintainer (`danmt`) takes the last word and merges.
|
||||
3. **Checks must be green**: `shellcheck`, `bash test/cli.sh` and
|
||||
|
|
|
|||
3
changelog.d/116.md
Normal file
3
changelog.d/116.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
### Fixed
|
||||
|
||||
- Ceremony recognizes the Forgejo review panel and both forges' triage actors (#116)
|
||||
34
test/cli.sh
34
test/cli.sh
|
|
@ -3664,6 +3664,40 @@ check "release.yml: the caller was not absolutised (docs-sync would go red)" 0 "
|
|||
check "labels.yml: the caller was not absolutised either" 0 "count=0" \
|
||||
wf_count labels.yml '^[[:space:]]*uses:[[:space:]]*https://.*ceremony/\.github/workflows/'
|
||||
|
||||
# The reconciler reads the machine roster from labels.conf while contributors
|
||||
# read the prose roster. A Forgejo migration that updates only one side makes
|
||||
# the required-verdict set differ depending on who is reading it.
|
||||
configured_panel() {
|
||||
sed -n 's/^panel=//p' "$ROOT/.github/labels.conf"
|
||||
}
|
||||
documented_panel() {
|
||||
# shellcheck disable=SC2016 # backticks are literal Markdown delimiters
|
||||
sed -n '/^2\. \*\*The review panel\*\*/,/required verdicts/p' "$ROOT/CONTRIBUTING.md" \
|
||||
| grep -oE '`[^`]+-reviewer-andresmgsl`' \
|
||||
| tr -d '`' \
|
||||
| paste -sd ' ' -
|
||||
}
|
||||
panel_is_forgejo_roster() {
|
||||
[ "$(configured_panel)" = \
|
||||
"cluade-reviewer-andresmgsl codex-reviewer-andresmgsl grok-reviewer-andresmgsl kimi-reviewer-andresmgsl" ]
|
||||
}
|
||||
panel_rosters_match() {
|
||||
[ "$(documented_panel)" = "$(configured_panel)" ]
|
||||
}
|
||||
# Panel verdicts are all-required, so its roster cannot span disjoint account
|
||||
# namespaces. Triage authorization is any-match, so the union keeps issue flow
|
||||
# valid on both GitHub and Forgejo while both boards remain live.
|
||||
triage_actors_cover_both_forges() {
|
||||
[ "$(sed -n 's/^triage-actors=//p' "$ROOT/.github/labels.conf")" = \
|
||||
"dan-claude-bot cluade-reviewer-andresmgsl" ]
|
||||
}
|
||||
check "labels: panel names exactly the four Forgejo reviewer accounts" 0 "" \
|
||||
panel_is_forgejo_roster
|
||||
check "labels: CONTRIBUTING panel matches labels.conf exactly" 0 "" \
|
||||
panel_rosters_match
|
||||
check "labels: triage actors cover GitHub and Forgejo exactly" 0 "" \
|
||||
triage_actors_cover_both_forges
|
||||
|
||||
# One tag governs all eight references — the pin may be bumped, never split.
|
||||
ceremony_tags() {
|
||||
grep -rhoE 'heavy-duty/ceremony/[^@]+@[^[:space:]]+' "$ROOT/.github/workflows/" \
|
||||
|
|
|
|||
Loading…
Reference in a new issue