Skip to content

ci: run the workflow guards on every PR so they can be required - #59

Merged
forkwright merged 1 commit into
mainfrom
ci/always-run-workflow-guards
Aug 26, 2026
Merged

ci: run the workflow guards on every PR so they can be required#59
forkwright merged 1 commit into
mainfrom
ci/always-run-workflow-guards

Conversation

@forkwright

Copy link
Copy Markdown
Owner

Finding

forkwright/.githubrequires zero status checks to merge. The repository that authors the
fleet's required-gate reusables — inherited by eleven repos — has no required gate of its own.

Evidence

$ gh api repos/forkwright/.github/branches/main/protection/required_status_checks
404 — Required status checks not enabled

The only merge control is required_approving_review_count = 1, and enforce_admins = false.

This is not abstract: .github#57 and #58 both reported mergeStateStatus: CLEAN today with an
emptystatusCheckRollup — CLEAN because nothing was blocking, not because anything passed.
A change to privileged CI code can merge here having been verified by nothing.

Why the fix has an order

Two guards already exist — actionlint and event-shape-guards, both in actionlint.yml — and
both are path-filtered to .github/workflows/** and scripts/**. Each carries its own WARNING:

this workflow is path-filtered. Do not add it to required status checks without dropping the
paths: filter first — a required check that never runs blocks its PR permanently, with nothing
failing and nothing pending to point at.

That warning is correct, and it describes exactly how politeia's main became unmergeable. So this
PR is only the first half: drop the filter. Branch protection follows separately, and only
after a PR touching neither filtered path is observed producing both checks — until something
outside the old filter actually reports, "the filter is dropped" is a claim rather than a fact.

Desired correction

  • Remove the paths: filter so both jobs run on every PR.
  • Rewrite both WARNINGs as NOTEs explaining why a filter must not come back.

Neither job's verification changes — same steps, same scripts, same check-run names
(actionlint, event-shape-guards), so nothing downstream is renamed.

Done when: a PR touching only a non-workflow, non-scripts/ path shows both checks, and
required_status_checks on main names them.

Cost

A docs-only PR re-lints unchanged workflows — seconds. The correct trade for a repository whose
entire content is eleven other repos' CI.

Not in this change

enforce_admins stays false. Raising it would remove the --admin path that is currently the
only way to land anything in a private fleet repo during the account's Actions billing lockout.
That is a deliberate hold, not an oversight, and worth revisiting once minutes are restored.

forkwright/.github requires ZERO status checks to merge. The repository that
authors the fleet's required-gate reusables -- inherited by eleven repos -- has
no required gate of its own; one approving review is the entire merge control,
and enforce_admins is false.
Both guards that could serve already exist here and both are path-filtered to
`.github/workflows/**` and `scripts/**`, so neither runs on a PR touching only
docs. Each carries its own WARNING saying it must not be made a required check
until that filter is dropped, because a required check that never runs blocks
its PR permanently -- nothing failing, nothing pending, nothing to point at.
That is the exact shape that made politeia's main unmergeable, so the warning is
right and this change is the half it asks for first.
The filter is dropped and both WARNINGs are rewritten as NOTEs stating why it
must not come back. Branch protection follows only after a PR touching neither
filtered path is observed producing both checks -- the filter drop is a claim
until something outside it reports.
The cost is that a docs-only PR re-lints unchanged workflows, which is seconds.
That is the correct trade for a repository whose entire content is other repos'
CI, and it is not a change in what either job verifies.
@forkwright
forkwright merged commit 8912dd4 into mainAug 26, 2026
2 checks passed
@forkwright
forkwright deleted the ci/always-run-workflow-guards branch August 26, 2026 18:59
forkwright added a commit that referenced this pull request Aug 26, 2026
#62)
This repository authors the reusables eleven repos inherit and until today
required ZERO status checks to merge -- one approving review was the entire
control. #59 removed the `paths:` filter from actionlint.yml so both guards run
on every PR, which is the precondition for requiring them.
The warning is the part worth writing down. The filter was not arbitrary: it
existed so the workflow only ran when workflows or scripts changed. Removing it
is what makes the checks eligible to be required, and reintroducing one would
make every PR touching neither path unmergeable -- nothing failing, nothing
pending, nothing to point at. That failure has already happened to a sibling
repo's main, so the constraint is recorded here rather than left to be
rediscovered.
This file touches neither `.github/workflows/**` nor `scripts/**`, which makes
it the probe: if both checks report on this PR, the filter drop is demonstrated
rather than assumed, and the required contexts can be set on that evidence.
Co-authored-by: forkwright <cody@forkwright.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@forkwright