fix(release): require a credential on every GitHub call instead of degrading to unauthenticated #14

Merged
Cody Bryant merged 1 commit from fix/never-call-github-unauthenticated into main 2026-08-29 21:28:32 -07:00
Owner

Unauthenticated github.com allows 60 requests an hour per IP and every runner, mirror probe and CI poller shares one. Several helpers treated their token as optional, so once the budget was gone they did not fail - they answered 403, and the checks built on them stopped deciding anything while still reporting success. The republish guard did exactly that on its first real run.

Every GitHub caller now makes its token mandatory: push-tag.sh, check-mirror-ci.sh, check-rc-install-matrix.sh, reconcile-releases.sh, github-release.sh. reconcile also authenticates the asset download, which was reaching GitHub bare.

push-tag.sh asserts its token BEFORE git push --atomic, since discovering it afterwards would leave the tag published and the run failed - and only when a mirror is configured, so the documented no-project.env mode still pushes.

tests/test-github-auth.sh pins all of it, including the shapes that previously slipped through: a credential-free auth array that keeps its name, an auth helper whose github arm is gone, a sourced library that drops the inherited array, and the guard being moved below the push. Each has a negative control.

Unauthenticated github.com allows 60 requests an hour per IP and every runner, mirror probe and CI poller shares one. Several helpers treated their token as optional, so once the budget was gone they did not fail - they answered 403, and the checks built on them stopped deciding anything while still reporting success. The republish guard did exactly that on its first real run. Every GitHub caller now makes its token mandatory: push-tag.sh, check-mirror-ci.sh, check-rc-install-matrix.sh, reconcile-releases.sh, github-release.sh. reconcile also authenticates the asset download, which was reaching GitHub bare. push-tag.sh asserts its token BEFORE `git push --atomic`, since discovering it afterwards would leave the tag published and the run failed - and only when a mirror is configured, so the documented no-project.env mode still pushes. `tests/test-github-auth.sh` pins all of it, including the shapes that previously slipped through: a credential-free `auth` array that keeps its name, an auth helper whose github arm is gone, a sourced library that drops the inherited array, and the guard being moved below the push. Each has a negative control.
fix(release): require a credential on every GitHub call instead of degrading to unauthenticated
All checks were successful
CI / Shell scripts (pull_request) Successful in 4s
CI / The standard can actually be vendored (pull_request) Successful in 13s
CI / Lint and test the standard's own code (pull_request) Successful in 19s
861c66ce2c
Sign in to join this conversation.
No reviewers
No labels
No milestone
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
SisyphusMD/project-standard!14
No description provided.