Add Woodpecker CI pipeline and k8s manifests #2

Merged
forgejo_admin merged 2 commits from 1-add-woodpecker-ci-pipeline-and-k8s-manif into main 2026-03-02 06:26:02 +00:00
Contributor

Summary

  • Add Woodpecker CI pipeline with ruff lint/format gate and kaniko build to Harbor
  • Add Kubernetes manifests (deployment, service, PVC, ServiceMonitor) for ArgoCD-managed deployment
  • Add ruff dev dependency and config; format codebase with ruff

Changes

  • .woodpecker.yaml: CI pipeline with test step (ruff check/format) and build-and-push step (kaniko to Harbor)
  • Dockerfile.k8s: Container build file for k8s deployment
  • k8s/deployment.yaml: Deployment with secrets from notion-mcp-secrets, PVC mount, health probes, Harbor imagePullSecrets
  • k8s/service.yaml: ClusterIP service on port 8000
  • k8s/pvc.yaml: 100Mi PVC with local-path storageClass for /app/data
  • k8s/servicemonitor.yaml: Prometheus ServiceMonitor scraping /metrics
  • k8s/kustomization.yaml: Kustomize resource list
  • pyproject.toml: Added [project.optional-dependencies] dev with ruff, added [tool.ruff] config
  • client_patch.py, qa_test.py, server.py: Reformatted by ruff

Test Plan

  • ruff check . passes locally
  • ruff format --check . passes locally
  • Manual verification: Woodpecker activates and runs pipeline on push (manual step, not in this PR)
  • Manual verification: k8s manifests apply cleanly with ArgoCD (after secrets and ArgoCD app are created)

Review Checklist

  • No secrets committed
  • No unnecessary file changes
  • Commit messages are descriptive
  • No namespace: fields in k8s manifests (ArgoCD controls placement)
  • Uses $CI_COMMIT_SHA not ${CI_COMMIT_SHA} in Woodpecker pipeline
  • issue-notion-mcp-remote-woodpecker-k8s -- the issue this PR addresses
  • plan-2026-02-25-mcp-gateway-migration -- Phase 3 (pathfinder)
  • project-pal-e -- the project this affects

Closes #1

## Summary - Add Woodpecker CI pipeline with ruff lint/format gate and kaniko build to Harbor - Add Kubernetes manifests (deployment, service, PVC, ServiceMonitor) for ArgoCD-managed deployment - Add ruff dev dependency and config; format codebase with ruff ## Changes - `.woodpecker.yaml`: CI pipeline with test step (ruff check/format) and build-and-push step (kaniko to Harbor) - `Dockerfile.k8s`: Container build file for k8s deployment - `k8s/deployment.yaml`: Deployment with secrets from `notion-mcp-secrets`, PVC mount, health probes, Harbor imagePullSecrets - `k8s/service.yaml`: ClusterIP service on port 8000 - `k8s/pvc.yaml`: 100Mi PVC with local-path storageClass for `/app/data` - `k8s/servicemonitor.yaml`: Prometheus ServiceMonitor scraping `/metrics` - `k8s/kustomization.yaml`: Kustomize resource list - `pyproject.toml`: Added `[project.optional-dependencies] dev` with ruff, added `[tool.ruff]` config - `client_patch.py`, `qa_test.py`, `server.py`: Reformatted by ruff ## Test Plan - [x] `ruff check .` passes locally - [x] `ruff format --check .` passes locally - [ ] Manual verification: Woodpecker activates and runs pipeline on push (manual step, not in this PR) - [ ] Manual verification: k8s manifests apply cleanly with ArgoCD (after secrets and ArgoCD app are created) ## Review Checklist - [x] No secrets committed - [x] No unnecessary file changes - [x] Commit messages are descriptive - [x] No `namespace:` fields in k8s manifests (ArgoCD controls placement) - [x] Uses `$CI_COMMIT_SHA` not `${CI_COMMIT_SHA}` in Woodpecker pipeline ## Related Notes - `issue-notion-mcp-remote-woodpecker-k8s` -- the issue this PR addresses - `plan-2026-02-25-mcp-gateway-migration` -- Phase 3 (pathfinder) - `project-pal-e` -- the project this affects Closes #1
- Add .woodpecker.yaml with ruff lint/format gate and kaniko build to Harbor
- Add k8s/ directory with deployment, service, PVC, ServiceMonitor, and
  kustomization manifests for ArgoCD-managed deployment
- Add Dockerfile.k8s for container builds
- Add ruff dev dependency and config to pyproject.toml
- Apply ruff format and lint fixes across the codebase

Closes #1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Author
Contributor

Review: LGTM

Reviewed all 11 changed files (195 additions, 39 deletions). No issues found.

Verified

  • .woodpecker.yaml: Follows basketball-api pattern exactly. Uses $CI_COMMIT_SHA (no curly braces). References Dockerfile.k8s correctly.
  • k8s/ manifests: No namespace: fields (ArgoCD-managed). Correct secrets, PVC, probes, resources, and ServiceMonitor config.
  • pyproject.toml: Dev dependencies and ruff config added correctly.
  • Python changes: Ruff formatting only (line length, import sorting). No functional changes.
  • No secrets committed.

Ready for merge after manual follow-ups (Woodpecker activation, Harbor secrets, ArgoCD app).

## Review: LGTM Reviewed all 11 changed files (195 additions, 39 deletions). No issues found. ### Verified - `.woodpecker.yaml`: Follows basketball-api pattern exactly. Uses `$CI_COMMIT_SHA` (no curly braces). References `Dockerfile.k8s` correctly. - `k8s/` manifests: No `namespace:` fields (ArgoCD-managed). Correct secrets, PVC, probes, resources, and ServiceMonitor config. - `pyproject.toml`: Dev dependencies and ruff config added correctly. - Python changes: Ruff formatting only (line length, import sorting). No functional changes. - No secrets committed. Ready for merge after manual follow-ups (Woodpecker activation, Harbor secrets, ArgoCD app).
Fix QA findings: requirements.txt, /metrics, ONBOARD_SECRET, port name
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
837e2f225a
- requirements.txt: Replace cryptography/httpx with mcp-remote-auth-ldraney
  and uvicorn to match pyproject.toml (container would crash on startup)
- server.py: Add minimal /metrics endpoint for ServiceMonitor scraping
- k8s/deployment.yaml: Add ONBOARD_SECRET env from notion-mcp-secrets
- k8s/deployment.yaml: Add name: http to containerPort

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
forgejo_admin deleted branch 1-add-woodpecker-ci-pipeline-and-k8s-manif 2026-03-02 06:26:03 +00:00
Sign in to join this conversation.
No description provided.