docs(adr-0028): propose CI/CD + git hosting migration Gitea -> GitLab #226
Reference in New Issue
Block a user
Delete Branch "docs/adr-0028-gitlab-migration"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Drafts ADR-0028 as
proposed: migrate CI/CD + git hosting from Gitea (git.unespace.com) to GitLab CE self-hosted onvm-gitlab(10.100.201.10). The migration was anticipated by ADR-0015 ("level-2 implementation; will be superseded by a GitLab migration ADR within 6-18 months") — that window opens now. Decision-only PR — the actual 4-phase migration ships across follow-up PRs after acceptance.ADR-0028's number was previously a placeholder reference in ADR-0026 and ADR-0027 for the Pléiades + Acteurs+ sync ADR. Renumbering: that future sync ADR shifts to
ADR-0029, and the placeholder links in ADR-0026, ADR-0027 andCLAUDE.mdupdate to match — included in the same PR so the chain stays consistent.What lands
docs/decisions/0028-migrate-cicd-and-git-hosting-to-gitlab.mdproposed. Decision = Option B (GitLab CE onvm-gitlab). Considered options A (status quo Gitea), C (Forgejo), D (cloud SaaS). Documents what carries over from ADR-0015 (architectural principles unchanged — thin YAML, trunk-based, all-gates-blocking, on-prem runners), what changes (host, pipeline file, runner type, scan tooling), the 4-phase migration sequence, and the signed-commits revisit.docs/decisions/0026-person-user-portal-data-model.mdADR-0028references →ADR-0029(sync + facets shifts to 0029).docs/decisions/0027-portal-side-organisational-hierarchy.mdADR-0028references →ADR-0029.docs/decisions/README.mdproposed, tagsinfrastructure,process, 2026-05-26).CLAUDE.mdADRs 0001 → 0027 accepted; ADR-0028 + ADR-0029 proposed. ADR-0028's relationship to ADR-0015 spelled out inline ("supersedes ADR-0015's Gitea Actions platform choice — the rest of ADR-0015's architectural principles carry over unchanged"). ADR-0026 + ADR-0027 architecture bullets renumbered 0028 → 0029 to track.Key choices in the ADR
pnpm ci:checketc. — unchanged), on-prem runners, Conventional Commits in CI + hook (defense in depth) — all carried over. Host, pipeline-file grammar, runner type, and scan tooling are the only things that move.Dependency-Scanning.gitlab-ci.yml+Secret-Detection.gitlab-ci.ymlincludes consolidate the ~30 lines of inlinecurl + tarinstall dance currently in.gitea/workflows/ci.yml. Same blocking thresholds (CRITICAL+HIGH dependency vulns, any secret).vm-gitlabis already provisioned. No infra wait — the only sequencing constraint is operator-driven, not infrastructure-driven..gitlab-ci.ymlyet — Gitea still gates). Phase 2 lands.gitlab-ci.ymlalongside.gitea/workflows/ci.ymlso both pipelines run per PR until parity is confirmed. Phase 3 flips the remote URLs and deletes.gitea/workflows/+infra/ci-runners.compose.yml. Phase 4 sweeps stale references.#213,#217,#219, …) in commit messages and ADR bodies stay resolvable as historical artefacts. One VM at idle is a low long-term cost.mainonce GitLab is live, paired with GnuPG agent forwarding (already documented indocs/setup/01-dev-debian-vm-setup.md§8.5).apf-portal-bot(Renovate) gets a dedicated signing key at PR 1.Renumbering — what moved and why
Before this PR, ADR-0026 and ADR-0027 used
ADR-0028as a placeholder link for the Pléiades + Acteurs+ sync ADR. That sync ADR hasn't been drafted yet — the number was reserved.This PR claims
ADR-0028for the GitLab migration (the immediately-actionable decision), and shifts the sync placeholder to ADR-0029. All 25 link references across ADR-0026 (11) and ADR-0027 (14) update in lockstep — replace_all is safe here because in those filesADR-0028consistently meant "the sync ADR".Content of the sync ADR is unchanged — only the number. When that ADR is eventually drafted as
0029-…md, it gets the existing content reserved for it in the placeholder text.Test plan
pnpm exec prettier --checkclean on the touched files.ADR-0028references in0026-…md/0027-…md/CLAUDE.mdnow readADR-0029(grep confirms zero remaining references to the old number in those files).0028-…mdself-references (status frontmatter, title, internal anchors) are consistent — no leftover0029.What's next
Per ADR-0028 §"Migration sequence", post-acceptance:
mirror-and-bootstrapPR —git push --mirrorGitea → GitLab; GitLab side groups / projects / branch protection / MR templates / deploy keys / Renovate reconfig. No.gitlab-ci.ymlyet, Gitea pipelines still gate.gitlab-ci-pipelinePR —.gitlab-ci.ymlalongside the existing.gitea/workflows/ci.yml. Parallel runs ~1 week for parity. GitLab Runner registered onvm-gitlab.cutoverPR — remotes flip across docs,.gitea/workflows/+infra/ci-runners.compose.ymldeleted, Gitea read-only.cleanupPR — stale references sweep, signed-commit policy finalised onmain.In parallel — once the dev VM (#220 / #221 / #222 / #223 / #224) is fully bootstrapped — the paused ADR-0027 PR 1 (Region / Delegation / Structure Prisma schema + inline seed) and ADR-0026 PR 1 (Person / User / UserScope schema + provisioner) can ship on Gitea; they have no dependency on the GitLab migration and don't need to wait.