2.9 KiB
Release pipeline (maintainers — INTERNAL)
This file is
export-ignore(see.gitattributes) — it never reaches the public repo. It may name the private repositories.
Clusev is promoted across three repositories, dev → staging → public:
| Repo | URL | Role |
|---|---|---|
| Gitea (dev) | https://git.bave.dev/boban/clusev |
Sole development source. Commit + tag here. |
| GitHub private (staging) | https://github.com/boksbc/clusev-staging |
Push-mirror of Gitea. Runs CI; betas tested on staging. |
| GitHub public (release) | https://github.com/clusev/clusev |
Receives only released versions — one clean commit per release, beta + stable tags. Public users install/update from here. |
Channels follow semver tags: beta = vX.Y.Z-betaN, stable = vX.Y.Z.
No private repo URL is committed: config/clusev.php defaults repository to the public URL,
install.sh derives CLUSEV_REPOSITORY from the clone origin into the (gitignored) .env, so dev
points at Gitea, staging at GitHub-private, and public users at GitHub-public — automatically.
One-time wiring
- Gitea push-mirror (Gitea → repo → Settings → Mirror → Push Mirror):
- Remote:
https://github.com/boksbc/clusev-staging.git - Auth: GitHub username + a GitHub PAT (scope
repo) as the password. - Enable "sync when new commits are pushed".
- Remote:
boksbc/clusev-staging→ Settings:- Variable
PUBLIC_REPO_SLUG = clusev/clusev(the only variable the promotion workflows read). - Secret
PUBLIC_REPO_TOKEN= a PAT/deploy token with push toclusev/clusev. - Environment
productionwith a required reviewer (gates the promotion workflows). - (Optional staging deploy) Variable
STAGING_ENABLED=true,STAGING_PROJECT_DIR, and a self-hosted runner labelledclusev-stagingon the internal network — GitHub-hosted runners cannot reach the internal staging host (.165). Until then, update staging from its Versions page.
- Variable
Promoting
- To staging: push a beta tag
vX.Y.Z-betaNto Gitea → mirror → CI tests it; staging runs the beta. - To public (beta): on
boksbc/clusev-staging→ Actions → run Promote to public (beta channel) with the beta tag → publishes it toclusev/clusev(beta channel). - To stable: run Promote beta to stable with the beta tag + the stable tag → publishes
vX.Y.Ztoclusev/clusev(stable channel).
There are no custom webhooks: Gitea's push-mirror + GitHub Actions (on: push tags / workflow_dispatch)
replace them. promote.sh copies the release tree with git archive, which honours export-ignore, so
internal docs (CLAUDE.md, rules.md, handoff.md, docs/) never reach the public repo. Phase B will
drive the workflow_dispatch promotions from the dev dashboard via the GitHub API with a deploy token in
the encrypted vault — see docs/superpowers/specs/2026-06-22-3-repo-release-promotion-design.md.