All checks were successful
CI / test (pull_request) Successful in 3m15s
CI / release-exercise (pull_request) Successful in 12s
CI / self-guards (pull_request) Successful in 7s
CI / action-exercise (pull_request) Successful in 5s
CI / docs-sync-exercise (pull_request) Successful in 6s
Refs guard / refs-not-closing (pull_request) Successful in 6s
labels / labels (pull_request) Successful in 8s
The action's entire gather was one GraphQL query asking GitHub for its own parse of the closing keywords. Forgejo serves no GraphQL at all — /api/graphql 404s here and a forgejo-runner job arrives with GITHUB_GRAPHQL_URL empty — so there was nothing to translate it to. It is re-expressed, as #188 re-expressed its own two GraphQL sites, over two reads both backends serve plus this repo's own parser. The graph was called authoritative for including "closing keywords and sidebar links". Those halves resolve differently here: Forgejo has no sidebar-link concept, so nothing is lost there, but it DOES honour closing keywords in commit messages. A body-only port would miss a PR that closes an issue from a commit subject — exactly the contradiction this action exists to catch — so the closing set unions the body and every commit message. The hasNextPage refusal is relocated, not dropped: --paginate carries the forgejo backend's x-total-count completeness proof, and a short gather refuses rather than returning a partial verdict. lib/issue_references.sh extracts the LOCAL/CROSS classifier from issueflow-reconcile's executable. closes_references.sh's header recorded that dependency in prose; a composite action cannot source a reconciler to borrow one function, because sourcing a reconciler runs one. refs-guard.yml's github-only gate is removed in the same change. A portable action behind that gate is a guard that passes by never running. The contract test drives the boundary on BOTH backends with stubs at the transport. Mutations: body-only parse reds 4 cases, dropping --paginate reds the partial-gather case, ignoring a failed read reds 9. Refs #199
34 lines
1.4 KiB
YAML
34 lines
1.4 KiB
YAML
name: Refs guard
|
|
|
|
on:
|
|
# Body edits are load-bearing: #200 gained its accidental closing keyword
|
|
# after the PR opened, with no new commit to wake ordinary CI (#218).
|
|
pull_request:
|
|
types: [opened, edited, reopened, synchronize]
|
|
|
|
permissions:
|
|
contents: read
|
|
pull-requests: read
|
|
|
|
jobs:
|
|
refs-not-closing:
|
|
# The action is portable (#199): its gather is two REST reads through the
|
|
# shim plus this repo's own closing-keyword parser, so it produces a real
|
|
# verdict on either forge. It still refuses by name when it cannot read —
|
|
# that is its contract, and its contract test.
|
|
#
|
|
# #199 removed the forge gate that used to sit here. While the action's
|
|
# only gather was GraphQL it could do nothing but refuse on Forgejo, and
|
|
# scheduling a permanently red required check would have blocked every
|
|
# merge on this forge; a skipped check is a green head, an invented
|
|
# verdict is not. The gather is REST now, so the job RUNS here and
|
|
# produces verdicts again.
|
|
#
|
|
# Deleting the action's client declaration without deleting this gate
|
|
# would have left it portable and never scheduled — a guard that passes
|
|
# by never running, which is this repo's blind-sweep shape wearing a
|
|
# different hat (@kimi-reviewer-andresmgsl, #198).
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
- uses: ./actions/refs-not-closing
|