Current truth
PR #242 remains blocked because the blog needs read-only source access to the private spear-resumes Bzlmod module. The ambient GITHUB_TOKEN is scoped to this repository and cannot perform that cross-repository checkout. Reusing the broader blog-shadow or GF Apps would expand authority beyond the source-read need.
Target contract
Create a dedicated GitHub App installed only on Jesssullivan/spear-resumes with repository Contents: read and no other permission.
Blog-side names:
- variable:
SPEAR_RESUMES_READ_APP_CLIENT_ID
- secret:
SPEAR_RESUMES_READ_APP_PRIVATE_KEY
Implementation
- Mint a one-hour token with
actions/create-github-app-token@v3 in both ci.yml and build-cv.yml.
- Scope the action again to owner
Jesssullivan, repository spear-resumes, and permission-contents: read.
- Checkout exact commit
d5112bf1fd15fbf28eb684b12c74af6f3a664d14 under .ci-inputs/spear-resumes with persist-credentials: false.
- Add
.ci-inputs to .bazelignore.
- Extend
scripts/bazel-cache-backed.sh to validate an absolute SPEAR_RESUMES_MODULE_PATH containing MODULE.bazel and pass --override_module=spear_resumes=<absolute-path>.
- Use
--override_module, not --override_repository; this dependency is a Bzlmod module.
- Revoke the minted token in post-job cleanup.
Acceptance
Non-goals
No PAT, no reuse of broader Apps, no GF credential, no source-ref drift, and no secret deletion before green replacement proof.
Current truth
PR #242 remains blocked because the blog needs read-only source access to the private
spear-resumesBzlmod module. The ambientGITHUB_TOKENis scoped to this repository and cannot perform that cross-repository checkout. Reusing the broader blog-shadow or GF Apps would expand authority beyond the source-read need.Target contract
Create a dedicated GitHub App installed only on
Jesssullivan/spear-resumeswith repository Contents: read and no other permission.Blog-side names:
SPEAR_RESUMES_READ_APP_CLIENT_IDSPEAR_RESUMES_READ_APP_PRIVATE_KEYImplementation
actions/create-github-app-token@v3in bothci.ymlandbuild-cv.yml.Jesssullivan, repositoryspear-resumes, andpermission-contents: read.d5112bf1fd15fbf28eb684b12c74af6f3a664d14under.ci-inputs/spear-resumeswithpersist-credentials: false..ci-inputsto.bazelignore.scripts/bazel-cache-backed.shto validate an absoluteSPEAR_RESUMES_MODULE_PATHcontainingMODULE.bazeland pass--override_module=spear_resumes=<absolute-path>.--override_module, not--override_repository; this dependency is a Bzlmod module.Acceptance
--override_moduleflag.SPEAR_RESUMES_DEPLOY_KEYonly after the replacement is proved on main.Non-goals
No PAT, no reuse of broader Apps, no GF credential, no source-ref drift, and no secret deletion before green replacement proof.