GitHub Actions → Woodpecker CI
What it saves, what actually moves, what you rebuild — and the thing that catches people.
What it costs, and what it saves
Standard Linux runners are about $0.006/min and macOS about $0.062/min — roughly ten times more. A team burning 30,000 macOS minutes a month pays about $1,860; the same work on a self-hosted Mac mini is the hardware once.
Moves cleanly
The commands. If your CI is essentially make test or a Docker build, that runs anywhere.
You rebuild
The workflow files. Woodpecker's YAML is not Actions YAML and marketplace actions have no equivalent.
What GitHub Actions costs you today
Free accounts include 2,000 minutes a month on standard Linux runners; beyond that you pay per minute. From 1 January 2026 GitHub cut hosted-runner rates by up to 39%: standard Linux is about $0.006/min, ARM about $0.005/min, Windows about $0.010/min, and macOS about $0.062/min — roughly ten times Linux. Larger runners are billed separately and included minutes never apply to them; a 16-core Linux runner is around $0.042/min. Self-hosted runner minutes remain free. Rates checked 2026-07-30 and quoted for standard runners; confirm against GitHub's current billing page before you model a budget.
What actually holds you in
Moderate and mostly cultural rather than technical. Workflow YAML is GitHub-specific, and the marketplace actions a pipeline leans on — checkout, cache, setup-node — have no direct equivalent elsewhere, so a migration is a rewrite of the workflow files rather than a copy. What does move cleanly is the actual work: if your CI is mostly `make test` or a Docker build, that runs anywhere. The deeper hook is that Actions is wired to GitHub's own events, permissions and secrets, so leaving Actions usually means keeping GitHub and bolting a second system to it.
What you are moving to
Woodpecker is a community fork of Drone that stayed Apache-2.0 after Drone's licence changed. Every pipeline step is a container, the config is a single YAML file, and the whole server is one Go binary plus an agent — it will run comfortably on hardware you would otherwise consider too small for CI. It plugs into GitHub, GitLab, Gitea, Forgejo and Bitbucket, so you can keep hosting code where it is and simply move the build minutes onto your own machine. Of everything here it is the least ceremony for the most control.
Free and open source. You pay only for the machine it runs on.
Woodpecker CI strengths
- Genuinely Apache-2.0 with no enterprise carve-out
- Container-per-step model — the pipeline is portable by construction
- Runs against GitHub, GitLab, Gitea, Forgejo and Bitbucket
- Light enough for a small VPS; no database cluster required
What you give up
- Small ecosystem — no marketplace of ready-made actions
- You own the runner: patching, disk space and caching are yours
- No hosted option, so there is nobody to page at 3am
- Windows and macOS builds need machines you supply
The migration, step by step
- 1Try self-hosted GitHub runners FIRST — one line of YAML, no rewrite, and it removes the bill entirely
- 2Only if you want CI you control, deploy the Woodpecker server and an agent
- 3Port one pipeline as a proof, keeping Actions running
- 4Replace marketplace actions with explicit container steps — this is most of the work
- 5Move remaining pipelines gradually; there is no need for a big-bang cutover
The gotcha
Most teams do not need this migration. Self-hosted GitHub runners solve the cost problem with one line of YAML. Woodpecker is for people who want the CI system itself to be software they control — a different, rarer requirement.
When to stay on GitHub Actions
You are inside the free tier, or the marketplace ecosystem is doing real work for you.
More Layer 3 migrations
Figures verified 2026-07-30 against vendor pricing pages. Prices change and migrations differ by estate — treat the cost delta as a starting model, not a quote. Rankings and recommendations here are merit-only; affiliate income never changes a verdict. See our methodology.