P19: CI Backend Abstraction — switchable Woodpecker / GitHub Actions
Make the CI/CD backend selectable via stack.toml [context], mirroring the existing db_backend and storage_backend patterns.
Closeout
All 9 issues closed. Added [ci] section with backend selector to stack.toml. Abstracted pipeline emitters in gen_config.py behind a backend interface — each backend (woodpecker, github, gitea) implements emit() to produce its native workflow format. GitHub backend generates CI (lint+test+coverage), deploy (build+scan+push), harden, rebuild-all, infra-ci, and release workflows. Failure reporter in api.diag adapts to whichever CI backend is active for issue filing. gen_config emits to the correct output directory and cleans stale backend files. Documented CI backend switching in README.
Issues resolved
- #142 — [ci] section with backend selector in stack.toml
- #143 — Backend interface for pipeline emitters
- #144 — GitHub: CI workflow (lint+test+coverage)
- #145 — GitHub: deploy workflow (build+scan+push)
- #146 — GitHub: harden + rebuild-all workflows
- #147 — GitHub: infra-ci + release workflows
- #148 — Failure reporter adapts to CI backend
- #149 — Correct output directory + stale cleanup
- #150 — README documentation for CI backend switching
Residual
None. Gitea Actions backend added in P20.