👷 Add Woodpecker CI serving all personal GitHub repos - #1
Conversation
One instance, per-repo opt-in from the UI. Server and agent join the compose stack pinned to v3.17.0: the UI is Tailscale-only behind nginx-tailscale at :9011, GitHub webhooks arrive through the Cloudflare tunnel at woodpecker.greglinscheid.com where nginx forwards only /api/hook, and the agent runs pipeline steps as containers via the Docker socket with a shared bun cache volume mounted into every step. Monitoring rides along: Prometheus scrapes the internal-only metrics port, woodpecker-server and woodpecker-agent join the CoreContainerAbsent cold-start net (a dead CI is silent - pipelines queue forever and PRs never get checks), and the landing page gains a Woodpecker card. ci/ holds step images built locally on the Mini (bun-git for scriptlancer, dotfiles-lint for dotfiles) - they exist only in the host Docker daemon, so each Dockerfile documents its rebuild. The six scriptlancer github-runner-* services come out in a follow-up once scriptlancer PR #192 lands on Woodpecker. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 12 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (11)
Comment |
The runner-bound checks run on Woodpecker now (scriptlancer PR #192), so the six github-runner-* services, their state volumes, the shared bun cache volume and GITHUB_RUNNER_ACCESS_TOKEN all come out. The twelve runner registrations (six live, six stale) were also deleted from the scriptlancer repo on GitHub. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds a self-hosted Woodpecker CI instance (v3.17.0, pinned) to the compose stack — one instance that builds any of my public/private GitHub repos via per-repo opt-in in its UI. Already live and proven: scriptlancer PR Vilos92/scriptlancer#192 and dotfiles PR Vilos92/dotfiles#27 both run green pipelines on it.
Topology
woodpecker-server— UI/API is Tailscale-only: nginx-tailscale proxies it atgreg-zone:9011. GitHub webhooks arrive publicly atwoodpecker.greglinscheid.comthrough the existing Cloudflare tunnel; nginx-cloudflared forwards only/api/hookand drops every other path. GitHub login is a classic OAuth app (Woodpecker does not support GitHub Apps);WOODPECKER_ADMIN=Vilos92, registration closed.woodpecker-agent— gRPC to the server, docker backend via the host socket,WOODPECKER_MAX_WORKFLOWS=6. A sharedwoodpecker-bun-cachevolume is mounted into every pipeline step (WOODPECKER_BACKEND_DOCKER_VOLUMES) sobun installstays warm across pipelines, same trick as the runners' shared cache.Monitoring & surfaces
WOODPECKER_METRICS_SERVER_ADDR=:9001) — no bearer token needed in the committed config.woodpecker-server+woodpecker-agentjoinCoreContainerAbsent: a dead CI is silent (pipelines queue forever, PRs never get checks), which is exactly what that cold-start net is for. The exclusion-based rules cover them for everything else automatically.docker-services.shaccess info and env-var checks updated.ci/step imagesPipeline step images with extra tools are built locally on the Mini and exist only in the host Docker daemon (the agent shares it, so no registry):
ci/bun-git(oven/bun + git, scriptlancer) andci/dotfiles-lint(oven/bun + git + shellcheck + ruff, dotfiles). Each Dockerfile documents its rebuild — needed after adocker system prune -a.New env vars
WOODPECKER_GITHUB_CLIENT/WOODPECKER_GITHUB_SECRET(OAuth app),WOODPECKER_AGENT_SECRET(agent↔server gRPC),WOODPECKER_GRPC_SECRET(session-token signing so agents survive server restarts) — all documented in.env.example.Follow-up
Once scriptlancer #192 merges, the six
github-runner-*services, their state volumes, the shared bun cache volume andGITHUB_RUNNER_ACCESS_TOKENcome out in a separate PR.🤖 Generated with Claude Code