1.4 KiB
1.4 KiB
ECP-0062: CI Secrets via Single SSH Identity + Repo-Encrypted Age Files
Status: Draft
Goal
Keep CI secret handling minimal and auditable:
- one Forgejo Actions secret containing an SSH private key (
AGE_FORGE_SSH_KEY), - all runtime credentials stored in git as encrypted
.agefiles, - no CI dependence on repo cloning tokens (
CODEBERG_TOKEN) for deploy.
Non-Goals
- Replacing local developer token helpers (
scripts/fj-auth-codeberg.sh). - Defining protocol-level stream key distribution.
Proposal
- Deploy workflow uses
actions/checkoutwithgithub.tokenand drops the clone fallback path. - Deploy workflow requires one secret only:
AGE_FORGE_SSH_KEY. - Deploy workflow decrypts
secrets/cloudflare-api-token.ageat runtime viaage -d -i <key>. CLOUDFLARE_API_TOKENis exported intoGITHUB_ENVonly for the current job.CODEBERG_TOKENis removed from deploy workflow requirements.
Rationale
This matches the key.store operational model:
- one root automation identity in Forgejo,
- encrypted secrets versioned in-repo,
- no plaintext token files in CI configuration.
It reduces secret sprawl, removes accidental token coupling, and keeps deploy bootstrap deterministic.
Rollout / Reversibility
- Additive migration:
- set
AGE_FORGE_SSH_KEYin Forgejo, - commit encrypted
secrets/cloudflare-api-token.age, - run deploy.
- set
- Reversible by reintroducing direct Actions secret env injection if needed.