Forgejo Actions vs Woodpecker CI: when each one fits a self-hosted Forgejo
Forgejo Actions suits teams that want CI built into the forge, with a syntax designed to feel familiar to GitHub Actions users. Woodpecker CI suits teams that want a separate CI engine with Kubernetes backends, YAML pipelines that run each step in a container image, and their own server to operate. Forgejo Actions is not compatible with GitHub Actions, so do not assume copied GitHub workflows will run unchanged on either system. The decision turns on four things: how much operating effort you can give a second server, whether your runners must live on Kubernetes, how many Drone or Woodpecker plugins you need to reuse, and how much control you want over pipeline structure.
Start with operating effort. Woodpecker is a second system: its server provides the UI and API, receives forge webhooks and parses pipeline YAML, and agents connect to it over gRPC, so you patch, back up and monitor the server and the agents separately from Forgejo. Its database defaults to SQLite, and the documentation recommends PostgreSQL or MariaDB for larger instances, so settle that choice before go-live. If you plan a Kubernetes backend, confirm your cluster can provide the ReadWriteMany storage that each pipeline's temporary volume claim needs, since the default is 10G with ReadWriteMany. For plugins, test the specific Drone or Woodpecker plugins you depend on, because the docs say Drone plugins generally work but could need adjustments. Finally, ask whether your team needs parallel workflows with depends_on ordering in a .woodpecker/ directory, or whether the CI built into Forgejo covers what you run today.
Which CI fits which Forgejo scenario
This table maps six common Forgejo scenarios to the CI option that usually fits better and the condition that drives the choice. Read each row against your own constraints, since the conditions matter more than the default pick. The main takeaway is that Forgejo Actions suits teams that want one fewer server, while Woodpecker suits teams that need its Kubernetes backend, Drone-style pipelines or a separate agent layout.
| Scenario | Better fit | Why |
|---|---|---|
| A small team that wants the fewest moving parts | Forgejo Actions | CI is built into Forgejo and hands jobs to separate runners, so you avoid operating a second CI server with its own database, UI and agent registration. Woodpecker can still be run this way, but it adds a component to patch and back up. |
| A team with Kubernetes-based build needs that want each step in its own pod | Woodpecker CI | Woodpecker's Kubernetes backend runs each step in a standalone pod and creates a temporary persistent volume claim to share files between steps. Confirm the default claim size and access mode against your storage class before you size the cluster. |
| A team migrating pipelines from Drone | Woodpecker CI | Woodpecker was forked from Drone 0.8, and its docs say Drone plugins generally work but may need adjustments. Forgejo Actions uses a different workflow model, so Drone pipelines would need rewriting. Test your plugin list before committing. |
| A team that depends on GitHub Actions workflows | Neither without a migration review | Forgejo Actions is designed to be familiar to GitHub Actions users but is not compatible with them, so existing workflows need changes. Woodpecker uses its own YAML syntax, so it is not a drop-in path either. Ask each project to list the actions it calls and estimate the rewrite effort before choosing. |
| A team running many forges | Forgejo Actions for a single forge | Woodpecker supports Forgejo, GitHub, GitLab and others, but connecting multiple forges to one server is still experimental. If you run one Forgejo instance, Forgejo Actions avoids that risk. If you must run several forges, pilot Woodpecker against each forge type first. |
| A team with an existing Forgejo that wants CI agents separate from the forge | Woodpecker CI | Woodpecker splits a server (UI, API, webhooks, YAML parsing) from agents that connect over gRPC and can scale through an optional autoscaler. Forgejo Actions also uses separate runners, so confirm that your runner placement, network paths and scaling needs are met before assuming the separation is enough. |
How each CI system is built, and what that means for operations
Forgejo Actions and Woodpecker CI take different positions on where CI lives. One ships inside the forge, the other runs as a separate server with its own agents, database and optional autoscaler. The cards below set out those components and the backup, upgrade and monitoring work each layout adds to your team's calendar.
Forgejo Actions shares the forge lifecycle
Forgejo Actions is a built-in CI system that hands workflows to separate runners, so CI is part of the same product you upgrade when you upgrade Forgejo. One upgrade plan, one release calendar and one support window cover both the forge and its pipelines. The runners remain separate processes that you deploy and maintain. Before you commit, confirm the runner deployment options, the supported execution environments and any autoscaling behavior for the Forgejo version you plan to run.
Woodpecker runs as a separate server
A Woodpecker installation has a server that provides the UI and API, receives forge webhooks and parses pipeline YAML. The server is a distinct service from your forge, so it has its own configuration, its own version history and its own certificate and webhook setup. Your team owns that service, its availability and its integration with each forge it connects to.
Agents connect to the server over gRPC
Woodpecker agents run the workflows and connect to the server over gRPC. Each agent is another component to place, secure and version, and agents must stay compatible with the server they report to. Agent count, placement and labels become operational decisions, and any change to the network path between agents and the server needs to be tested before it reaches production pipelines.
Optional autoscaler creates cloud VMs
Woodpecker can run an optional autoscaler that creates cloud VMs for pending builds. This adds a cloud account, instance images, credentials and cost controls to the CI system. Autoscaling is not required for a self-hosted setup, but if you enable it, you own the cloud spend, the lifecycle of short-lived machines and the failure modes when capacity cannot be provisioned. Ask for those behaviors to be documented before you rely on them.
SQLite default and database choice
Woodpecker uses SQLite by default, and the documentation recommends PostgreSQL or MariaDB for larger instances. A file-based database is simple to start with but ties backups to a file on the server host and limits concurrent write patterns. Moving to PostgreSQL or MariaDB adds a database service with its own backup schedule, restore tests and patching. Decide early, because migrating CI state later is extra work.
Three execution options change operations
Woodpecker agents can run workflows on Docker, Kubernetes or the local machine. Docker hosts need image and daemon hygiene, Kubernetes adds cluster capacity, RBAC and the per-step pod model, and local execution puts build work directly on the agent host. Each choice changes how you patch hosts, scope secrets, collect logs and monitor queue depth, so pick the option your platform team can operate before writing pipelines against it.
Feature comparison: workflow syntax, runners, plugins and identity
This table sets Forgejo Actions and Woodpecker CI side by side on license, workflow files, step execution, compatibility, plugins, forge support and database defaults. Read each row with your own forge and team in mind, and treat the cells marked for confirmation as questions to put to the vendor or to a test instance before you commit.
| Capability | Forgejo Actions | Woodpecker CI |
|---|---|---|
| License | GPL-3.0-or-later from Forgejo v9.0 onward, with earlier versions under MIT | Apache-2.0, with documentation under CC BY-SA 4.0 |
| Latest release facts | Forgejo v17.0.0 released October 15, 2026, with support until January 28, 2027; v15 is the LTS release supported until July 15, 2027 | Woodpecker 3.19.0 released October 7, 2026, fixing matrix variable injection into the default clone step and enforcing agent labels on the server |
| Workflow files | Workflows are defined in repository files that hand jobs to separate runners; confirm the exact file layout and job dependency model for your version | A single .woodpecker.yaml or a .woodpecker/ directory of parallel workflows with depends_on ordering |
| Step execution | Jobs run on runners; confirm which runner labels and execution environments your runner setup supports | Each step runs its commands inside a specified container image, with optional service containers, when filters and matrix builds |
| GitHub Actions compatibility | Designed to be familiar to GitHub Actions users but not compatible with GitHub Actions | Not a GitHub Actions engine; teams migrating workflows should expect to rewrite them into Woodpecker YAML |
| Plugins | Confirm the plugin or reusable action model in the current Forgejo documentation before relying on third-party components | Plugins are container images configured through a settings block, listed in the plugin index; Drone plugins generally work but may need adjustments |
| Forge support | Built into Forgejo; works only with the Forgejo instance that runs it | GitHub, Gitea, Forgejo, GitLab, Bitbucket and Bitbucket Datacenter; connecting multiple forges to one server is still experimental |
| Default database | Confirm the database requirements in the Forgejo installation guide for your release | SQLite by default, with PostgreSQL or MariaDB recommended for larger instances |
What drives the running cost of a separate CI server
Forgejo Actions runs inside the Forgejo server you already operate, while Woodpecker adds a second service with its own server, database, agents and upgrade cycle. The cards below separate the recurring costs of that second service from the one-time work of moving pipelines, so you can ask each vendor or partner for a quote that covers both.
Compute for the Woodpecker server and agents
A Woodpecker installation has a server for the UI, API and webhooks, agents that run workflows, and an optional autoscaler that creates cloud VMs for pending builds. Each component consumes its own compute, and agents usually need capacity sized for peak build load. Forgejo Actions also needs runners, but they are a separate layer you already size. Ask whether your quote includes the server, the agent pool and, if you use autoscaling, the cloud VM budget and who pays it. Autoscaling shifts cost from fixed capacity to recurring cloud usage.
Database for a larger Woodpecker instance
Woodpecker uses SQLite by default, and its documentation recommends PostgreSQL or MariaDB for larger instances. Moving to a managed or self-run database adds backup, restore and patching duties, plus a second data store to include in your recovery tests. Forgejo keeps CI state alongside its own data store, so this database is an extra recurring responsibility only when you choose Woodpecker. Ask who backs up the Woodpecker database and how a restore is tested.
Skills to operate a second service
Running Woodpecker means someone maintains a second service's configuration, forge connection, agent registration and webhook settings, plus gRPC connectivity between server and agents. This labor recurs every month, not only during setup. Staff who already run Forgejo will need to learn Woodpecker's administration model. Check whether your platform team has that capacity or whether you will buy it from a partner. Define which person or team owns CI incidents at 2 a.m.
Upgrades on two release tracks
Forgejo and Woodpecker ship on separate schedules, and each upgrade can change webhook behavior, plugin compatibility or agent protocol. Forgejo publishes an LTS release in the first quarter of each year with critical bugfixes and security support for one year and three months, while Woodpecker 3.19.0 was released on October 7, 2026. Test each upgrade in staging, and budget engineering time for both tracks. Ask any partner how many components they will upgrade in a retainer and how breaking changes are handled.
Support from communities or partners
Woodpecker and Forgejo are community projects, so free help comes through their communities, while paid help comes from a commercial partner you choose. Those partners are not vendor-certified unless a supplied fact says so. Support scope varies, so a retainer may cover Forgejo but not Woodpecker, or cover installation but not incident response. Ask for a written list of covered components, response expectations, what is excluded, and whether plugin fixes are included.
One-time porting of pipelines and plugins
Moving from Forgejo Actions to Woodpecker means rewriting workflows as Woodpecker YAML, since the two syntaxes are not compatible. Plugin settings must map to Woodpecker container images, and Woodpecker's documentation notes that Drone plugins generally work but may need adjustments. Each pipeline, secret and plugin needs testing against the same results. This cost is one-time, but it grows with the number of repositories and custom steps. Ask for a pipeline inventory before accepting a fixed-scope quote.
Licensing and editions: what is free and what is paid
Forgejo Actions ships inside Forgejo, so the license and governance of the forge also cover its built-in CI. Forgejo is licensed GPL-3.0-or-later from v9.0 onward, and earlier versions are under MIT. Codeberg e.V., a non-profit association registered in Berlin, owns the project's domains, while project governance stays independent, according to the Forgejo FAQ.
- License from v9.0: Releases from v9.0 onward are GPL-3.0-or-later. Your legal team should review the license of the exact version you deploy, because a server running an earlier release is under MIT.
- Governance: Codeberg e.V. holds the domains, and governance is independent of that holder. Ask whether this structure fits your vendor risk process.
- LTS support: v15 is the LTS release supported until July 15, 2027, which is the reference point for a long-lived CI setup.
- Latest release: v17.0.0 was released October 15, 2026 with support until January 28, 2027.
- Commercial terms: The research supplied no paid edition or commercial support tier for Forgejo Actions. Confirm directly with the project before assuming one exists.
Confirm which Forgejo version your CI will run, its support end date and whether any commercial support is available in writing.
Woodpecker is a separate CI server with its own license and lineage. Its README notes that Woodpecker is the main CI/CD engine at Codeberg, and its history explains why its license is easy to confuse with Drone's. The code is Apache-2.0 and the documentation is CC BY-SA 4.0, according to the Woodpecker about page and the project repository.
- Code license: Woodpecker CI is licensed under Apache-2.0, so the server and agent code carry that license.
- Documentation license: The docs are under CC BY-SA 4.0, which is a separate license from the code.
- Drone lineage: Woodpecker was forked from Drone 0.8 in 2019 after the Drone CI license changed from Apache 2.0 to a proprietary license. It was renamed Woodpecker on August 27, 2019.
- Drone today: Harness manages Drone under the Polyform Small Business license. That is a different product with different terms, so Drone's license should not be applied to Woodpecker.
- Commercial terms: The research supplied no paid edition or commercial support tier for Woodpecker. Ask the maintainers whether any commercial support exists and get the answer in writing.
Verify the license file in the exact Woodpecker release you plan to deploy and record that version in your change records.
Forgejo publishes two release types with different support windows. The window decides how long a CI setup can stay on one version before it must be upgraded. Stable releases and LTS releases follow separate rules, so the choice between them affects how often your team has to plan an upgrade, according to the Forgejo releases page.
- Stable releases: Receive full support for three months plus a two-week window, so they suit teams that upgrade often.
- LTS releases: Published in the first quarter of each year, they receive critical bugfixes and security support for one year and three months.
- Current LTS: v15 is supported until July 15, 2027.
- Latest release: v17.0.0 was released October 15, 2026 with support until January 28, 2027.
- Planning effect: Each support end date is a deadline for an upgrade. Include the upgrade work, testing and change approval in your plan.
Match your upgrade cadence to these windows and confirm the dates on the Forgejo releases page before you schedule any change.
Where a Forgejo CI implementation usually runs long
Forgejo Actions usually runs long on runners and workflow conversion, not on installation. Enabling Actions and registering runners is the easy part. The effort lies in sizing runner capacity for your build load, deciding which runners may serve which repositories, and locking down runner access so a workflow from one project cannot reach another project's secrets. Because Forgejo Actions is designed to be familiar to GitHub Actions users but is not compatible with GitHub Actions, copied GitHub workflows need line-by-line review. Plan for that review in your estimate, and confirm with the Forgejo Actions overview which syntax, actions and runner behaviors your existing pipelines depend on before you commit to a migration order.
Woodpecker CI adds a second system to operate, and its effort concentrates in the server, agents and Kubernetes backend. You install the server, connect it to Forgejo through the forge integration, and choose a database. SQLite is the default, while PostgreSQL or MariaDB is recommended for larger instances, so decide this before you have pipeline history you want to keep. Next you deploy agents and, if you use the Kubernetes backend, check the temporary persistent volume claim that holds files shared between steps. It is 10G and ReadWriteMany by default, so confirm your storage class supports that access mode and that the size fits your largest pipeline. Porting plugin settings is the step most often underestimated: Drone plugins generally work in Woodpecker but may need adjustments, so validate each plugin you rely on in a test pipeline. Across both options, secrets handling, runner isolation and plugin validation are where projects usually run long, and you should confirm the current behavior of each in your own environment rather than relying on a general estimate.
Moving pipelines from Forgejo Actions to Woodpecker, or back
This sequence moves CI workloads between Forgejo Actions and Woodpecker CI in a controlled order, so each pipeline is inventoried, translated, proven in parallel and only then cut over.
Inventory every pipeline and its triggers
The team lead or platform engineer lists every workflow file in each repository, including the event triggers, branch and path filters, scheduled runs, matrix builds, service containers, secrets used and any deployment steps that touch production. Forgejo Actions reads workflows from the repository's workflow directory, while Woodpecker reads a single .woodpecker.yaml or a .woodpecker/ directory. Mark each pipeline as critical, deployment-linked or low-risk. The output is a written inventory that someone other than the author has reviewed, with no pipeline left unclassified.
Map events, filters and matrix builds to target syntax
The engineer translates each trigger and condition into the target system's vocabulary. Woodpecker expresses conditions through when filters on event, branch, path and other fields, and supports matrix builds in its workflow syntax. Forgejo Actions uses its own event and job model, which is familiar to GitHub Actions users but not compatible with it. Write down every construct that has no direct equivalent, such as a custom event or a reusable action, and decide whether to rebuild it or drop it. A switch away from a GitHub Actions-style workflow needs a rewrite of the YAML, not a copy. The check is a mapping table that a second engineer signs off.
Separate what transfers from what is rebuilt
The migration owner records which assets move as they are and which must be recreated on the target. Repository code, container images and the build logic inside scripts generally transfer unchanged. Webhook configuration on the forge must be recreated for the new CI server. Runners or agents, secrets, the CI database, plugin settings and any Kubernetes backend setup are rebuilt on the destination, and secret values must be re-entered through the target's secret store rather than exported in plain text. Woodpecker plugins are container images configured through settings blocks, and the docs note that Drone plugins generally work but may need adjustments, so test each one. The output is a transfer checklist with an owner for each item.
Stand up the target CI and rebuild its runners
The platform engineer installs the target system and registers its runners or agents, following the vendor documentation for the chosen deployment. For Woodpecker, this means the server, one or more agents connected to it, and, where used, the Kubernetes backend with its temporary persistent volume claim settings reviewed for the cluster. The team should confirm the database choice for the expected load, since Woodpecker defaults to SQLite and recommends PostgreSQL or MariaDB for larger instances. For Forgejo Actions, confirm runner registration and labels for each job. The check is a test pipeline that runs on a dummy repository and reports success to the forge.
Run both systems in parallel on a non-critical repository
Choose one low-risk repository and configure the translated pipeline on the target while the original keeps running. Compare results for the same commits, including logs, artifacts, exit codes, timing and failure behavior. Pay attention to environment variables, clone steps and matrix expansion, which are common sources of divergence. Keep deployment steps disabled on the new side during this phase. The owner records each difference and its fix. The exit condition is a run of matching results across the event types the repository actually uses.
Expand the parallel run to the remaining pipelines
After the pilot repository matches, the team applies the same process to the rest of the inventory in the order set during classification, starting with low-risk pipelines and leaving deployment-linked ones for last. Each repository gets its own translated file, its own webhook, and its own secret re-entry. Track which pipelines are still running on the old system so that no trigger fires twice. The output is an updated inventory showing each repository's status.
Cut over and retire the previous system
Disable the old triggers and webhooks repository by repository, confirm that a new commit runs only on the target, and then deploy the change through the production path. Keep the previous CI server and its data available for a rollback window that the organization sets in writing, since the team should not rely on a duration that is not in its own policy. Once the window closes, remove runners, stored secrets on the old system and any retained credentials, and record the decommissioning in the change log. The closing check is that every repository runs only on the target and the old system has no active triggers.
Questions teams ask before choosing or hiring help for CI
How much more effort is running a separate Woodpecker server than using Forgejo Actions?
Running Woodpecker adds a second system to operate, so the effort is the distance between the two. Forgejo Actions hands workflows to runners you register with your Forgejo instance. Woodpecker needs its own server for the UI, API, webhooks and pipeline parsing, agents connected over gRPC, and a database that defaults to SQLite, with PostgreSQL or MariaDB recommended for larger instances. Your team then owns upgrades, forge connection settings, agent capacity and backups for that server. The added effort is recurring, so ask who will patch and monitor the Woodpecker server once it is live.
Can Woodpecker run on Kubernetes, and what does the default volume claim do?
Yes. Woodpecker's Kubernetes backend runs each step in its own pod. To pass files between steps, it creates a temporary persistent volume claim for the pipeline. The documented default is 10G with ReadWriteMany access. Check that your cluster's storage class supports ReadWriteMany, because many block-backed classes do not, and confirm the default size fits your largest build artifacts. The Helm chart documentation covers the server and agent deployment, but the claim sizing and storage choice should be tested in your own cluster before you rely on it.
Can existing Drone or GitHub Actions pipelines be reused on Woodpecker or Forgejo Actions?
Partly, and the changes differ by target. Woodpecker descends from Drone 0.8, and its docs say Drone plugins generally work but may need adjustments, so Drone pipelines usually need a syntax review and plugin testing. Forgejo Actions is designed to feel familiar to GitHub Actions users but is not compatible with GitHub Actions, so workflows must be reviewed for runner labels, actions and features that differ. Inventory every pipeline, mark the steps that reference marketplace actions or Drone plugins, and run a sample of each on a test instance before planning a migration.
Can Forgejo Actions use the same plugin ecosystem as Woodpecker?
Do not assume so. Woodpecker plugins are container images configured through a settings block and listed in the Woodpecker plugin index. Forgejo Actions uses its own workflow model and action references, so a Woodpecker plugin image is not automatically a working Forgejo Action. Confirm with the Forgejo Actions documentation how it references actions and whether any specific plugin you depend on can run there unchanged. Ask the vendor or your integrator to test each plugin your pipelines call before you commit to either platform.
What does the CI work need from our team?
Plan for four skill areas. Forgejo Actions needs runner administration and container knowledge. Woodpecker adds a server, agent and database to run, and Kubernetes skills if you use that backend. Secrets management matters for both, since pipelines need credentials for registries, deployment targets and signing keys, and those values need a controlled store and clear scoping. Webhook administration covers forge connections, event filters and certificate renewals for the server. Name an owner for each area before choosing, because the gaps usually appear in secrets and webhooks.
Can we run this ourselves, and when is outside help worth it?
A team with container and Forgejo administration experience can run Forgejo Actions with its existing staff. Woodpecker is reasonable to run in-house when you already operate Kubernetes or similar services and have someone accountable for the CI server. Outside help is worth considering when the migration covers many pipelines, when Kubernetes storage or agent scaling is new to your team, or when you need the CI platform hardened and documented for an assessment. DeployOpen plans, implements, hardens, backs up, upgrades, documents and supports self-hosted platforms in your own infrastructure, and ongoing support is available as a retainer.
How does Codeberg's use of Woodpecker affect the choice?
Codeberg's use shows Woodpecker is in production at scale for a Forgejo-hosted community, since its README notes Woodpecker is the main CI/CD engine there. It does not make Woodpecker a better fit for your company. Your own requirements still decide it: Forgejo Actions keeps CI inside the forge you already run, while Woodpecker adds a separate system. Woodpecker 3.19.0, released on October 7, 2026, fixed an injection of matrix environment variables into the default clone step and enforces agent labels on the server, so check that your version includes these fixes.
What should we ask for in a fixed-scope quote for CI work?
Ask for the scope written as a list of pipelines, forge connections, runners or agents, and target platforms, including Kubernetes if used. Request separate line items for installation, pipeline conversion, plugin testing, secrets handling, webhook setup, backups, documentation and handover training. Confirm which items are one-time and which recur, such as upgrades and support retainers. Ask what is excluded, who supplies infrastructure and licenses, what acceptance tests prove the pipelines work, and how changes to scope are priced. DeployOpen does not publish a price list, and a quote follows from the written scope.
How DeployOpen helps choose, implement or migrate self-hosted CI
DeployOpen plans, implements, customizes, integrates, hardens, documents and supports self-hosted open-source platforms inside your own infrastructure. For Forgejo Actions and Woodpecker CI, we start by testing which CI model fits your repositories, runners and network before any build work begins.
How we scope
- Written scope names the Forgejo instance, forge integrations, runner or agent layout, and the pipelines to migrate.
- We record which repositories, event triggers and deployment targets the CI design must cover.
- Engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts.
How we build
- We install and configure Forgejo runners or Woodpecker servers and agents inside your cloud accounts or data centers.
- We convert representative workflows to the target syntax and test them on your own build infrastructure.
- Where Kubernetes backends or plugins are in scope, we verify each step, volume and credential path before rollout.
How we hand over
- You receive configuration, runbooks for runner or agent operations, and documented pipeline conventions for your teams.
- We document upgrade steps and how to check release support windows for Forgejo and the CI server you choose.
- Handover includes a walkthrough so your platform team can run, troubleshoot and extend the CI setup independently.
How we support
- Ongoing support, upgrades and continuous testing are available as retainers after handover.
- Retainers can cover runner patching, CI server upgrades, plugin maintenance and pipeline changes as your repositories grow.
- Before any engagement, ask us to confirm which support scope, response terms and upgrade cadence the written quote includes.

