Review: Add Woodpecker CI pipeline (westside-streamlit #3)

review-934-2026-04-10 Doc

review approved

Verdict: APPROVED

Scope is solid. Ticket is well-structured, mirrors established basketball-api pipeline pattern, acknowledges dependencies, and embeds platform lessons (f17b49b, yaml parse validation). One [SCOPE] note: the backing arch note is missing but that is platform-wide — not a blocker for this ticket.

Template Completeness

  • [x] Type (Feature)
  • [x] Lineage — notes dependencies on Dockerfile and kustomize overlay tickets
  • [x] Repo
  • [x] User Story (As/I want/So that)
  • [x] Context — references commit f17b49b lesson and yaml parse validation feedback
  • [x] File Targets (create: .woodpecker.yaml; explicit do-not-touch list)
  • [x] Acceptance Criteria (6, all When/Then, all verifiable)
  • [x] Test Expectations
  • [x] Constraints (mirror basketball-api, secrets hygiene, unconditional update-kustomize-tag, placeholder test step)
  • [x] Checklist
  • [x] Related

Traceability

  • [x] story:reachable — maps to story-westside-streamlit-reachable (Platform + Head Coach, Keycloak + no Tailscale client). Verified in project-westside-streamlit user-stories section.
  • [x] arch:ci-pipeline label present
  • [ ] arch note MISSING — search_notes for arch-ci-pipeline returned 0 results. [SCOPE] Create architecture note arch-ci-pipeline for the shared Woodpecker → kaniko → Harbor → kustomize update pattern. NOT a blocker for this ticket (gap is platform-wide across all 7 services using this pattern).
  • [x] Forgejo issue — https://forgejo.tail5b443a.ts.net/forgejo_admin/westside-streamlit/issues/3 (open)

File Targets

  • [x] .woodpecker.yaml (to be created) — consistent with reference implementation at /home/ldraney/basketball-api/.woodpecker.yaml which contains update-kustomize-tag step at line 60 and downloads the shared scripts/update-kustomize-tag.sh from pal-e-platform. Pattern is verifiable and reusable.
  • [x] Explicit "do not touch" list (Dockerfile, pal-e-deployments overlay) correctly partitions scope to avoid overlap with #2 and #4.

Repo Placement

OK. Issue is filed on forgejo_admin/westside-streamlit where the .woodpecker.yaml will live. Dependencies (Dockerfile #2, kustomize overlay #4) correctly filed as separate tickets in the same repo and pal-e-deployments respectively.

Dependencies

Explicitly acknowledged in ticket body:
  • #2 Dockerfile — needed for kaniko build step to have something to build
  • #4 kustomize overlay — needed for update-kustomize-tag step to have a target file
  • Harbor robot account — mentioned in "Blocks on" list
Per review directive: this is a scope review, not a readiness-to-dispatch review. Acknowledgement is sufficient; dispatch ordering is the kanban flow concern.

Acceptance Criteria

All 6 AC are When/Then format and independently verifiable. Concrete commands given (python yaml.safe_load, harbor UI check, git log check). AC #5 directly encodes the f17b49b fix pattern as a testable requirement. Excellent.

Blast Radius

Low risk. New file on a new repo — no existing workflows to break. Platform-wide implication: if the arch-ci-pipeline note is eventually created, all 7 services should be audited to confirm they share the f17b49b fix pattern (feedback_ci_pipeline_lessons already tracks 12 root-cause fixes, so this is likely covered).

Decomposition

No decomposition needed. 1 file target, 6 AC, estimated agent time < 5 min (copy basketball-api pattern, adjust repo/image names, yaml validate, PR). Fits the 5-minute rule cleanly.

Recommendation

  • [SCOPE] Create architecture note arch-ci-pipeline documenting the shared Woodpecker → kaniko → Harbor → kustomize-tag-update pattern used by all 7 platform services. Not a blocker for #934 — tracked as a separate platform docs ticket. Ava to decide whether to open it now or defer.
APPROVED for advance to todo. Dispatch ordering: wait for #2 (Dockerfile) and #4 (kustomize overlay) to reach done before this moves to in_progress.