feat(ci): layered promotion-gated test pipeline (build once → dev → rc → prod) [DRAFT] #6

Open
jmiller wants to merge 1 commits from feat/tiered-test-pipeline into main

1 Commits

Author SHA1 Message Date
jmiller 0f4b6848a2 feat(ci): layered promotion-gated test pipeline (build once → dev → rc → prod)
Universal: PR Check / Branch Policy (pull_request) Failing after 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 3s
Generic: Project CI / Lint & Validate (pull_request) Successful in 10s
Universal: PR Check / Validate PR (pull_request) Failing after 9s
Universal: PR Check / Secret Scan (pull_request) Successful in 12s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report: Scripts Governance (pull_request) Has been cancelled
Generic: Repo Health / Report: Repository Health (pull_request) Has been cancelled
Add .mokogitea/workflows/test-pipeline.yml implementing the tiered
"build once, test, promote the artifact" model from Template-Go#4:

- dev  (push dev):  build the image ONCE, run the suite, push the tested
                    artifact, move the `dev-tested` pointer, deploy to dev.
- rc   (push rc):   PULL the dev-tested artifact (no rebuild), promote it to
                    the RC registry, deploy that exact digest, run suite +
                    smoke vs the live RC instance, move `rc-healthy`.
- prod (push main): gate on an `rc-healthy` artifact existing (fail closed),
                    then promote the SAME digest to prod :version + :latest
                    and deploy — replacing the removed "verify dev healthy"
                    gate (MokoGitea-Fork#758).

Three independent `if:`-gated jobs, no `needs:` chain, so it avoids the Gitea
scheduler stall on dependent 2nd jobs (MokoGitea-Fork#756). All tier config is
driven from repo vars.*/secrets.*, reusing the DEV_*/RC_*/PROD_* variables and
shared DEPLOY_SSH_KEY/MOKOGITEA_TOKEN secrets from the deploy workflows (PR#5).
Gitea commit statuses pipeline/dev + pipeline/rc are published per tier.

First draft for review; env-specific wiring left as TODO in the header.

Refs #4

Claude-Session: https://claude.ai/code/session_01Wsno14cxE49MstXFs9G5KT
2026-07-06 16:17:40 -05:00