Skip to content

👷 Add Woodpecker CI serving all personal GitHub repos - #1

Merged
Vilos92 merged 2 commits into
mainfrom
woodpecker-ci
Aug 4, 2026
Merged

👷 Add Woodpecker CI serving all personal GitHub repos#1
Vilos92 merged 2 commits into
mainfrom
woodpecker-ci

Conversation

@Vilos92

@Vilos92 Vilos92 commented Aug 4, 2026

Copy link
Copy Markdown
Owner

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 at greg-zone:9011. GitHub webhooks arrive publicly at woodpecker.greglinscheid.com through the existing Cloudflare tunnel; nginx-cloudflared forwards only /api/hook and 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 shared woodpecker-bun-cache volume is mounted into every pipeline step (WOODPECKER_BACKEND_DOCKER_VOLUMES) so bun install stays warm across pipelines, same trick as the runners' shared cache.

Monitoring & surfaces

  • Prometheus scrapes an internal-only metrics port (WOODPECKER_METRICS_SERVER_ADDR=:9001) — no bearer token needed in the committed config.
  • woodpecker-server + woodpecker-agent join CoreContainerAbsent: 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.
  • Landing page gets a Woodpecker card; docker-services.sh access info and env-var checks updated.

ci/ step images

Pipeline 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) and ci/dotfiles-lint (oven/bun + git + shellcheck + ruff, dotfiles). Each Dockerfile documents its rebuild — needed after a docker 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 and GITHUB_RUNNER_ACCESS_TOKEN come out in a separate PR.

🤖 Generated with Claude Code

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>
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 12 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a9976d3f-64f6-4fc4-b1f4-98f575240f49

📥 Commits

Reviewing files that changed from the base of the PR and between a8f9dc2 and 9c61429.

📒 Files selected for processing (11)
  • .env.example
  • README.md
  • ci/bun-git/Dockerfile
  • ci/dotfiles-lint/Dockerfile
  • docker-compose.yml
  • docker-services.sh
  • nginx/index.html
  • nginx/nginx-cloudflare.conf
  • nginx/nginx-tailscale.conf
  • prometheus/container_alerts.yml
  • prometheus/prometheus.yml

Comment @coderabbitai help to get the list of available commands.

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>
@Vilos92
Vilos92 merged commit 75cd0c3 into main Aug 4, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant