bcs-website/docs/adr/0007-gitea-actions-and-packages.md
Brad Rodgers 3dab3bc9fb Add Gitea Actions CI, ArgoCD Application, and Gitea Packages wiring
- .gitea/workflows/ci.yml: build → seo:lint → e2e → image build/push →
  bump k8s image tag and commit back (paths-ignore + [skip ci] guard)
- argocd/bcs-website-application.yaml: ArgoCD App (internal Gitea repoURL, k8s path)
- k8s: image → Gitea Packages path; kustomization images newTag stanza
- ADR-0007 (Gitea Actions + Packages), supersedes GHCR/GitHub bits of ADR-0001
- Reconcile gitops-deployment-strategy.md to Gitea

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 06:29:01 -04:00

2.0 KiB

ADR-0007: CI on Gitea Actions, images in Gitea Packages

Status: Accepted — 2026-07-15 · Supersedes the GitHub Actions + GHCR specifics of ADR-0001 (the ArgoCD/GitOps model itself stands).

Context

The repo lives on the homelab's self-hosted Gitea (bmr_bluecap/bcs-website), not GitHub, so GitHub Actions and GHCR do not apply. Gitea runs an act_runner (GitHub-Actions-compatible) and a built-in container registry (Gitea Packages, OCI /v2/ confirmed live at 10.66.15.22:3000). The runner mounts /var/run/docker.sock; its label is ubuntu-latest (jobs run in a node:18-bullseye container).

Decision

  • CI = Gitea Actions, workflow at .gitea/workflows/ci.yml, runs-on: ubuntu-latest.
  • Registry = Gitea Packages at 10.66.15.22:3000/bmr_bluecap/bcs-website, immutable <git-sha> tags. Auth via the run's automatic token.
  • Pipeline: npm ci → build (typecheck) → seo:lint → Playwright e2e → build & push image → bump the image tag in k8s/kustomization.yaml and commit back to main ([skip ci] + paths-ignore to avoid a loop). ArgoCD then reconciles k3s (unchanged from ADR-0001).
  • Package visibility: public (recommended) — the image contains only the compiled public site, so a public package removes the need for a cluster imagePullSecret. Private + an External-Secrets-managed pull secret is the documented alternative.

Consequences

  • No external CI/registry dependency; everything stays in the homelab.
  • New infra prerequisites (see docs/gitops-deployment-strategy.md): k3s must trust the HTTP registry (registries.yaml / k3s_registry_mirrors entry for 10.66.15.22:3000); the runner host's Docker daemon needs 10.66.15.22:3000 as an insecure registry; docker must be usable from job containers (act_runner socket passthrough) or the build switches to kaniko.
  • GHCR/GitHub references in ADR-0001 and older doc revisions are superseded by this ADR.