You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
CI in six repos (ConfigurationManager.Integration, lobotomy-corporation-mods, open-lobotomy-tooling, debug-panel, LobCorp.ConfigurationManager, and the reusable workflows in this repo) checks out the private game-references repo with PRIVATE_REFERENCES_TOKEN, an org secret backed by a personal fine-grained PAT. That credential shape has three problems:
Expiry hard-fails CI fleet-wide. The "Detect private references" step in each consumer's ci.yml only checks that the secret is present, so an expired-but-present PAT fails the private-refs checkout outright instead of degrading to the documented skip-canary path. When the token lapses, every consumer repo goes red on the same day.
Person-bound. The PAT lives on a personal account; account compromise or loss of org membership breaks all consumers at once.
Recurring manual rotation. Someone must remember to regenerate it every expiry cycle, forever.
The current token is valid until 2027-04-05, so there is no urgency — this is resilience work, not a fire.
Proposed shape
Mint short-lived installation tokens per workflow run via actions/create-github-app-token, replacing the long-lived PAT:
Install Angela on the repo behind the PRIVATE_REFERENCES_REPO org variable. If that repo is not org-owned, resolve ownership first (a private org-owned app can only install on the owning org's repos).
In each consumer workflow, add a mint step before the private-references checkout and feed its output token to actions/checkout. Route through the reusable workflows here where possible so consumers pick the change up centrally.
Once every consumer is migrated, delete the PRIVATE_REFERENCES_TOKEN org secret.
Acceptance criteria
No workflow in any consumer repo references PRIVATE_REFERENCES_TOKEN.
Private-references checkout works in all six consumer repos via app-minted tokens, verified by a green CI run each.
The minted token is downscoped to contents: read on the references repo only.
The graceful-degradation path still works: a repo without the app configuration skips the canary with the existing warning instead of failing.
The PRIVATE_REFERENCES_TOKEN org secret is deleted.
CI in six repos (
ConfigurationManager.Integration,lobotomy-corporation-mods,open-lobotomy-tooling,debug-panel,LobCorp.ConfigurationManager, and the reusable workflows in this repo) checks out the private game-references repo withPRIVATE_REFERENCES_TOKEN, an org secret backed by a personal fine-grained PAT. That credential shape has three problems:ci.ymlonly checks that the secret is present, so an expired-but-present PAT fails the private-refs checkout outright instead of degrading to the documented skip-canary path. When the token lapses, every consumer repo goes red on the same day.The current token is valid until 2027-04-05, so there is no urgency — this is resilience work, not a fire.
Proposed shape
Mint short-lived installation tokens per workflow run via
actions/create-github-app-token, replacing the long-lived PAT:open-lobotomy-angelaapp from [Enhancement] Activate sync-org-docs workflow (create Angela GitHub App and one-time setup) #14 (it already carriesContents: Read & write) rather than creating a second app. The mint step downscopes per use —repositories:limited to the references repo andpermission-contents: read— so consumers never hold write.PRIVATE_REFERENCES_REPOorg variable. If that repo is not org-owned, resolve ownership first (a private org-owned app can only install on the owning org's repos).actions/checkout. Route through the reusable workflows here where possible so consumers pick the change up centrally.PRIVATE_REFERENCES_TOKENorg secret.Acceptance criteria
PRIVATE_REFERENCES_TOKEN.contents: readon the references repo only.PRIVATE_REFERENCES_TOKENorg secret is deleted.Related
dotnet-ci.yml/dotnet-ci-windows.ymlin this repo, plus each consumer repo'sci.yml(andrelease.ymlwhere present).