What to build
Boarding an issue costs a billable minute in whichever repo fires the event, and the private repos fire ~130 of those a week — ~516 minutes/month — for a job that averages 7 seconds and touches no repository content at all. It is pure Projects-V2 GraphQL.
Actions minutes are billed to the caller, never to the repo holding the reusable workflow, so the existing uses: shims into this repo save nothing. The only way this work stops costing minutes is if the run itself is triggered in a public repo, where standard runners are free.
Give add-to-project.yml an org-wide backfill scope: sweep every repo in the organization for open issues and pull requests not yet on the board and add them. Then add a scheduled caller in the public .github repo that runs it. Because the caller is public the run is free, so the cron can be frequent enough that boarding still feels immediate.
The existing backfill is repo-scoped (Empty = backfill all open issues and PRs in this repo) — this extends the scope, it does not replace the existing modes. The add is already idempotent, which is what makes a sweep safe to run on a tight schedule.
This also removes a standing failure mode: when GitHub stops creating runs from webhooks — documented in the estate as having stranded 24 issues at once — a cron-driven sweep keeps boarding items, where the event-driven path silently stops.
Acceptance criteria
Blocked by
- None — can start immediately.
What to build
Boarding an issue costs a billable minute in whichever repo fires the event, and the private repos fire ~130 of those a week — ~516 minutes/month — for a job that averages 7 seconds and touches no repository content at all. It is pure Projects-V2 GraphQL.
Actions minutes are billed to the caller, never to the repo holding the reusable workflow, so the existing
uses:shims into this repo save nothing. The only way this work stops costing minutes is if the run itself is triggered in a public repo, where standard runners are free.Give
add-to-project.ymlan org-wide backfill scope: sweep every repo in the organization for open issues and pull requests not yet on the board and add them. Then add a scheduled caller in the public.githubrepo that runs it. Because the caller is public the run is free, so the cron can be frequent enough that boarding still feels immediate.The existing backfill is repo-scoped (
Empty = backfill all open issues and PRs in this repo) — this extends the scope, it does not replace the existing modes. The add is already idempotent, which is what makes a sweep safe to run on a tight schedule.This also removes a standing failure mode: when GitHub stops creating runs from webhooks — documented in the estate as having stranded 24 issues at once — a cron-driven sweep keeps boarding items, where the event-driven path silently stops.
Acceptance criteria
add-to-project.ymlaccepts an org-wide scope that sweeps all repos, not just the caller's.githubrepo and its runs are billed as freeBlocked by