feat: add Woodpecker CI pipeline, Dockerfile, and k8s manifests #4
No reviewers
Labels
No labels
domain:backend
domain:devops
domain:frontend
status:approved
status:in-progress
status:needs-fix
status:qa
type:bug
type:devops
type:feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ldraney/notion-mcp-remote!4
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "3-add-woodpecker-ci-pipeline-dockerfile-an"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Changes
Dockerfile: Multi-stage build with private PyPI registry support viaPIP_INDEX_URLbuild arg.woodpecker.yml: Lint step (ruff check + format) on push/PR; kaniko build-and-push to Harbor on push to maink8s/deployment.yaml: Deployment (with health probes, resource limits, PVC mount, env from k8s Secret), Service (port 8000), and PersistentVolumeClaim (1Gi)k8s/servicemonitor.yaml: Prometheus ServiceMonitor scraping /metrics every 30sk8s/kustomization.yaml: Kustomize resource list.dockerignore: Exclude .git, k8s/, caches from container imagepyproject.toml: Add[tool.ruff]config (target-version py310, line-length 120, select E/F/W/I) and ruff dev dependencyserver.py: Reorganize imports withisort: off/onguards for load-order-sensitive imports; ruff format appliedclient_patch.py: ruff format applied (line length adjustments)qa_test.py: ruff format applied (line length adjustments)Test Plan
ruff check .passes with zero errorsruff format --check .passes with zero reformatsReview Checklist
Related Notes
plan-2026-02-25-mcp-gateway-migration-- Phase 3 (Remote Service Pipelines) and Phase 4 (Terraform Onboarding)service-onboarding-sop-- service onboarding pattern followednamespace-conventions-- no namespace in k8s manifests per conventionPR #4 Review
BLOCKERS
1. Missing
strategy: Recreateon Deployment (k8s/deployment.yaml)The PVC
notion-mcp-datausesaccessModes: [ReadWriteOnce], which means only one pod can mount it at a time. The default deployment strategy isRollingUpdate, which spins up a new pod before terminating the old one. With an RWO PVC, the new pod will fail to schedule because the volume is still mounted by the old pod. Add underspec::NITS
None.
SOP COMPLIANCE
3-add-woodpecker-ci-pipeline-dockerfile-anreferences issue #3)template-pr-body(Summary, Changes, Test Plan, Review Checklist, Related Notes all present)plan-2026-02-25-mcp-gateway-migration)server.py,client_patch.py,qa_test.pyare ruff-related, within scope)CODE REVIEW SUMMARY
strategy: Recreate(required for RWO PVC). All other items correct: no namespace, correct image, harbor-creds, port 8000, health probes, resource limits, env from secret, PVC mounthttp, /metrics, 30s intervalVERDICT: NOT APPROVED
One blocker: missing
strategy: Recreateon the Deployment. Fix that and this is ready for a clean pass.Fixed: added
strategy: Recreateto Deployment spec. Required because the PVC uses ReadWriteOnce — RollingUpdate would deadlock waiting for the old pod to release the volume.PR #4 Review (Fresh Re-review)
BLOCKERS
None. All previous blockers have been resolved.
NITS
.woodpecker.yml--${CI_COMMIT_SHA}curly braces in plugin settings (lines 24, 27)The
deployment-lessonsSOP states: "Use$CI_COMMIT_SHA(without curly braces) in plugin settings. Curly braces (${CI_COMMIT_SHA}) conflict with Woodpecker's compiler."Used in two places:
tags: ${CI_COMMIT_SHA}(line 24)BUILD_SHA=${CI_COMMIT_SHA}(line 27, insidebuild_args)Recommendation: change to
$CI_COMMIT_SHAin both locations. However, since Woodpecker behavior may vary by version and this is a documented-but-not-always-fatal issue, flagging as nit rather than blocker. Verify in first pipeline run.pyproject.toml-- URLs still point to GitHubHomepage,Repository, andIssuesURLs referencehttps://github.com/ldraney/notion-mcp-remote. The repo now lives on Forgejo. Pre-existing issue, not introduced by this PR -- no action required for merge.SOP COMPLIANCE
3-add-woodpecker-ci-pipeline-dockerfile-anreferences issue #3)template-pr-body(all 5 sections: Summary, Changes, Test Plan, Review Checklist, Related Notes)plan-2026-02-25-mcp-gateway-migration)server.py,client_patch.py,qa_test.pyare ruff-related and in scope)namespace-conventions)DETAILED CHECKLIST
buildstage + finalpython:3.12-slimCMD ["python", "server.py"]$$secret interpolationk8s/.argocd-source-*excludedharbor_usernameandharbor_passwordfrom_secretruff==0.15.2|| trueharbor.tail5b443a.ts.net/notion-mcp-remote/server:latestharbor-credsnotion-mcp-remotesecretnotion-mcp-data1Gi RWO mounted at /app/datahttp, path /metrics, interval 30sVERDICT: APPROVED
Clean pass. All checklist items verified. The
${CI_COMMIT_SHA}curly brace usage is a minor SOP compliance nit -- monitor during first pipeline run and fix if Woodpecker compiler chokes. Ready for merge.Pull request closed