Forgejo Runner
CI for your Forgejo instance or Codeberg - GitHub-Actions-compatible workflows on your own compute.
One-click deploy, from $13/mo on a Miget plan.
Forgejo Actions speaks GitHub Actions workflow syntax, which means the ecosystem muscle memory transfers - but the runners are yours to provide. This template deploys one in host mode: jobs execute as shell steps in the runner container, no Docker daemon required.
It pairs perfectly with the catalogue’s forgejo template (point FORGEJO_URL at http://forgejo:5000 and the whole forge + CI story lives in one project) - and it serves Codeberg too, since Codeberg runs Forgejo and lets you register your own runners.
Registration uses the v12 declarative flow: create the runner in the UI, copy its UUID and token, deploy. The runner connects outbound; no ingress, no public port, nothing to firewall.
Upstream project: Forgejo Actions runner
#what you get
- GitHub-Actions-compatible workflow syntax
- Host mode: socket-less shell execution in this container
- Serves self-hosted Forgejo AND codeberg.org
- v12 declarative registration (UUID + token from the UI)
- One runner can connect to multiple instances
- Completes the forge story next to the forgejo template
#topology
| Service | Role | Public |
|---|---|---|
| runner | Forgejo Actions runner, outbound connection | no - no ingress needed |
#miget sizing
// this stack needs
2 GiB RAM · 5 GB disk · 1 service
The runner itself is light; jobs set the budget. Extend the Dockerfile with the toolchains your workflows expect - host mode runs them directly.
Hobby - recommended fit
$13/mo
1 vCPU · 2 GiB · 50 GiB disk
Headroom for your own apps: 2 GiB at $19/mo
Professional - production
$22/mo
1 vCPU · 2 GiB · 10 GiB disk
Dedicated resources, production SLOs - plan details
One Miget plan is a fixed pool of compute - the whole stack (managed databases included) deploys inside it, and anything left over runs your other apps. No per-service or per-seat math.
#vs. other PaaS
Estimated monthly cost of running this exact stack (2 GiB RAM, 5 GB disk, 1 container) elsewhere, from published June 2026 rates.
| Platform | Est. monthly | Notes |
|---|---|---|
| Miget ★ | $13 flat | compose stacks first-class: one deploy, dedicated vCPU, managed Postgres/Valkey, volumes and TLS all included in the plan |
| Heroku | ~$100 | no volumes; nothing between 1 GB ($50) and 2.5 GB ($250) dynos - 2 GB containers cost far more than shown |
| DO App Platform | ~$29 | no persistent volumes - stateful containers need managed DBs/Spaces (base $5 Spaces included here) |
| Render | ~$26 | per-service instances (0.5 GB $7, 2 GB $25) - every container is its own paid service |
| Railway | ~$21 | usage-based ($10/GB RAM-mo); vCPU billed separately at $20/vCPU-mo on top |
| Fly.io | ~$13 | cheapest sticker price - but burstable shared CPUs (1/16 core; dedicated vCPUs cost ~2-3×), no compose deploys (one app per container, manual wiring), managed DBs billed extra |
Estimates assume RAM fully allocated at published on-demand rates - and sticker price isn't the whole comparison: the cheaper rows buy burstable shared CPUs, per-service wiring instead of a compose deploy, and managed databases billed separately. Heroku and DO App Platform have no persistent volumes at all - stateful stacks like this one need workarounds there.
#deploy it
On Miget
- Create a Compose Stack in app.miget.com pointing at the templates repository
- Set the stack path to
forgejo-runner -
Set the required variables:
RUNNER_UUID / RUNNER_TOKEN, from the runner you create in Forgejo/Codeberg (Settings > Actions > Runners)FORGEJO_URL, https://codeberg.org, or http://forgejo:5000 for the in-project forge
- Deploy. Miget layers
compose.miget.yaml(RAM, privacy, volumes, managed services) automatically
Locally first?
Every template is portable, vanilla Docker Compose - the Miget overrides are ignored locally:
git clone https://github.com/deployable-sh/stacks
cd miget-compose-templates/forgejo-runner
docker compose up -d Same files, same behavior. The template README covers connection strings and scaling notes.
#faq
Does this work with Codeberg?
Yes - Codeberg runs Forgejo and supports user/org/repo-level self-hosted runners. Create the runner under your Codeberg settings, drop the UUID and token here, and your Codeberg workflows run on your own compute.
Will my GitHub Actions workflows just run?
Mostly - Forgejo Actions implements the workflow syntax and most actions from the ecosystem work. Jobs run with the host label here, so container: jobs and Docker actions need the usual socket-less substitutions (kaniko/buildah for image builds).
Forgejo runner or Gitea act_runner?
Same lineage, matching governance choice: this catalogue ships Forgejo (the forge) so it ships the Forgejo runner. Gitea’s act_runner is configured almost identically (env-based registration) if you run Gitea instead.
Ship Forgejo Runner today
One compose stack, 2 GiB of RAM, from $13/month flat, and it runs on your laptop with the same files.