I spent the last week or two configuring a CI/CD runner for #TeahouseHosting on #Codeberg, here's how I did it.

https://qwertyuiop.ninja/2026/03/16/codeberg-runner.html

I wasn't really finding in-depth documentation and blog posts, and in particular none of the published examples would build container images--the biggest limitation of Codeberg's offering.

So I fixed it.

#Forgejo

Run a Runner on Codeberg

So you wanna make the jump to Codeberg, but aren’t happy with their CI? Here’s how to run your own!

qwertyuiop.ninja

@astraluma Neat, I can use this 👍

Do you know if there's documentation on the runner tagging convention? That's the one part I found surprising, and I didn't notice a link in the post.

@diazona the forgejo actions administrators guide has a section "choosing labels", which is how to build out the complete tag

As for actually picking the human-visible labels (eg, "docker-build" or "codeberg-small"), the only suggestion is "idk, maybe by feature?" which isn't really helpful. But there isn't really a complete feature query option (you can't say "I need a GPU _and_ Docker").

So, I guess make some runner categories that fit you. The only one I care about is "has docker".

@diazona but it's super cool to hear that someone else is getting practical value from this
@diazona the actions docs are somewhat confusing, the label `docker` isn't special afaik, you have to define it yourself with `docker:docker://...`
@astraluma ahh okay I see - it sounds like what they describe in "choosing labels" is about more than what I would understand as the runner's label (by which I mean the thing you put in runs-on), it also involves conveying some metadata to the runner. Bit of an odd choice IMO but I can work with it. Appreciate the explanation 🙂