P19: CI Backend Abstraction — switchable Woodpecker / GitHub Actions

New Issue

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.

No due date
100% Completed