[Feature] Give the quality gate a runner, or turn the Actions unit off #592

Closed
opened 2026-07-22 16:18:11 +00:00 by brenno · 2 comments
Owner

Found in the pre-publication contributor-journey review.

Evidence: the Forgejo API reports has_actions: true, GET /actions/runners[], GET /actions/tasks{"workflow_runs":[],"total_count":0}, GET /branch_protections[]. .github/workflows/ci.yml declares runs-on: ubuntu-latest plus a macos-latest/windows-latest matrix.

Measured cost of the gate, on a clean main worktree: make check completed in 164.75 s — 5,627 tests, 86.2% coverage, all green.

Why this matters now: the repository advertises an Actions unit that has never produced a single run and has no runner behind it. A contributor pull request therefore shows no signal at all, and the maintainer has only the author word for it. The measurement removes the usual excuse: the Linux gate job is under three minutes, well within a single small self-hosted runner. The macOS/Windows matrix is the part that genuinely cannot run there.

Anyone who finds .github/workflows/ also reasonably concludes this project lives on GitHub and that CI will check their work. Both are false, and discovering it after opening a pull request is a poor first contribution experience.

Proposal: register one Linux runner and wire only the gate job to it, moving the desktop matrix behind workflow_dispatch or dropping it. If that is not happening before publication, set has_actions: false and put a one-line header in ci.yml saying it is a reference definition that no runner executes. docs/CHECKS.md:8-10 already says this honestly; the forge does not.

Found in the pre-publication contributor-journey review. **Evidence:** the Forgejo API reports `has_actions: true`, `GET /actions/runners` → `[]`, `GET /actions/tasks` → `{"workflow_runs":[],"total_count":0}`, `GET /branch_protections` → `[]`. `.github/workflows/ci.yml` declares `runs-on: ubuntu-latest` plus a `macos-latest`/`windows-latest` matrix. **Measured cost of the gate**, on a clean `main` worktree: `make check` completed in **164.75 s** — 5,627 tests, 86.2% coverage, all green. **Why this matters now:** the repository advertises an Actions unit that has never produced a single run and has no runner behind it. A contributor pull request therefore shows no signal at all, and the maintainer has only the author word for it. The measurement removes the usual excuse: the Linux `gate` job is under three minutes, well within a single small self-hosted runner. The macOS/Windows matrix is the part that genuinely cannot run there. Anyone who finds `.github/workflows/` also reasonably concludes this project lives on GitHub and that CI will check their work. Both are false, and discovering it after opening a pull request is a poor first contribution experience. **Proposal:** register one Linux runner and wire only the `gate` job to it, moving the desktop matrix behind `workflow_dispatch` or dropping it. If that is not happening before publication, set `has_actions: false` and put a one-line header in `ci.yml` saying it is a reference definition that no runner executes. `docs/CHECKS.md:8-10` already says this honestly; the forge does not.
Author
Owner

De helft die in de repo thuishoort is gedaan (PR #701, op main). Het issue blijft open voor de andere.

Bovenaan ci.yml en release.yml staat nu dat geen runner ze uitvoert, dat er dus nooit één run is geweest, en waar de echte poort zit: make check, lokaal, ongeveer drie minuten — dus iets wat een bijdrager zélf kan draaien.

docs/CHECKS.md zei dit al eerlijk, maar dít zijn de bestanden die een bijdrager als eerste vindt, en dat is precies je punt. De zin die ik het belangrijkst vond om op te schrijven: een groen vinkje dat je niet ziet is geen controle die slaagde, maar een controle die nooit begon.

Wat er niet in zit, en waarom niet:

  • één Linux-runner registreren — een machine- en beheerbesluit. Je meting maakt het aantrekkelijk (de gate-job past ruim binnen één kleine self-hosted runner), maar dat neem ik niet namens de stichting;
  • has_actions: false zetten — een instelling op de forge, geen code, en het verandert wat de forge naar buiten toont. Eén PATCH op /api/v1/repos/LibreKAT/Ocideck met {"has_actions": false}; die knop is van jou.

De header is de eerlijkheid, niet de oplossing — vandaar dat dit open blijft.

De helft die in de repo thuishoort is gedaan (PR #701, op main). **Het issue blijft open** voor de andere. Bovenaan `ci.yml` en `release.yml` staat nu dat geen runner ze uitvoert, dat er dus nooit één run is geweest, en waar de echte poort zit: `make check`, lokaal, ongeveer drie minuten — dus iets wat een bijdrager zélf kan draaien. `docs/CHECKS.md` zei dit al eerlijk, maar dít zijn de bestanden die een bijdrager als eerste vindt, en dat is precies je punt. De zin die ik het belangrijkst vond om op te schrijven: *een groen vinkje dat je niet ziet is geen controle die slaagde, maar een controle die nooit begon.* **Wat er niet in zit, en waarom niet:** - **één Linux-runner registreren** — een machine- en beheerbesluit. Je meting maakt het aantrekkelijk (de gate-job past ruim binnen één kleine self-hosted runner), maar dat neem ik niet namens de stichting; - **`has_actions: false` zetten** — een instelling op de forge, geen code, en het verandert wat de forge naar buiten toont. Eén PATCH op `/api/v1/repos/LibreKAT/Ocideck` met `{"has_actions": false}`; die knop is van jou. De header is de eerlijkheid, niet de oplossing — vandaar dat dit open blijft.
Author
Owner

Nu volledig rond. Je koos "doe maar" op de of-of, en van de twee kon ik er één zelf uitvoeren:

has_actions staat uit. PATCH /repos/LibreKAT/Ocideck met {"has_actions": false} → 200, geverifieerd (has_actions: false). De forge adverteert nu geen Actions-eenheid meer die nooit heeft gedraaid. Samen met de header boven ci.yml/release.yml (PR #701) is er nergens meer een groen vinkje beloofd dat niet bestaat.

De andere tak — één Linux-runner registreren en alleen de gate-job eraan hangen — heb ik bewust níét gedaan: dat vraagt een fysieke machine en een runner-token, en het is een lopende voorziening die jij beheert, niet iets wat een sessie eenmalig opzet. Je meting maakt hem aantrekkelijk (de gate-job is onder drie minuten), dus als je later een self-hosted runner neerzet, staat de workflow klaar; zet has_actions dan weer aan.

Sluit dit.

Nu volledig rond. Je koos "doe maar" op de of-of, en van de twee kon ik er één zelf uitvoeren: **`has_actions` staat uit.** `PATCH /repos/LibreKAT/Ocideck` met `{"has_actions": false}` → 200, geverifieerd (`has_actions: false`). De forge adverteert nu geen Actions-eenheid meer die nooit heeft gedraaid. Samen met de header boven `ci.yml`/`release.yml` (PR #701) is er nergens meer een groen vinkje beloofd dat niet bestaat. De andere tak — één Linux-runner registreren en alleen de `gate`-job eraan hangen — heb ik bewust níét gedaan: dat vraagt een fysieke machine en een runner-token, en het is een lopende voorziening die jij beheert, niet iets wat een sessie eenmalig opzet. Je meting maakt hem aantrekkelijk (de gate-job is onder drie minuten), dus als je later een self-hosted runner neerzet, staat de workflow klaar; zet `has_actions` dan weer aan. Sluit dit.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#592
No description provided.