Set up CI
This is step five of your first 30 days: after you have pushed a repo and invited your team, add a workflow and run it. Codebahn runs hosted CI on organization plans (Starter, Team, Scale). It implements GitHub Actions syntax, so most .github/workflows files run unchanged. For the differences, see compatibility.
The Personal plan does not include hosted CI. If you are on the Personal plan, skip to Bring your own runner.
Add a workflow file
Section titled “Add a workflow file”If your repository already has .github/workflows/, Codebahn picks it up. You can also use .codebahn/workflows/, .forgejo/workflows/, or .gitea/workflows/; when more than one exists, see workflow directories for precedence and de-duplication rules.
If you don’t have a workflow yet, create .forgejo/workflows/ci.yml. Each example below is a complete project with source, tests, and a working CI workflow. Clone one to get started, or browse the workflow file to copy it into your own repo.
| Language | What it runs | Repository |
|---|---|---|
| Go | go vet + go test + Docker build |
example-go (workflow) |
| TypeScript | tsc --noEmit + Vitest |
example-typescript (workflow) |
| .NET 8 | dotnet restore + build + xUnit |
example-dotnet (workflow) |
| Flutter | flutter analyze + flutter test |
example-flutter (workflow) |
All workflows use on: [push, pull_request] and runs-on: codebahn-small.
runs-on: codebahn-small routes to Codebahn’s hosted runners in Paris (fr-par). ubuntu-latest is an alias for codebahn-small; you can also use codebahn-medium or codebahn-large for bigger runners. Go and Node are pre-cached in the job image, so actions/setup-go and actions/setup-node resolve offline. Anything else (cloud CLIs, browsers, databases, other runtimes) you install in your workflow. See CI runners for the full image contents and runner sizes.
Push to trigger
Section titled “Push to trigger”git add .github/workflows/ci.ymlgit commit -m "ci: add workflow"git pushOpen the repository and click the Actions tab. Your run appears there with live logs. Pushing a new commit to the same branch cancels any in-progress run on that branch.
How minutes are counted
Section titled “How minutes are counted”Compute minutes are wall-clock time multiplied by the runner’s cost factor. A 5-minute job on codebahn-small (1x) uses 5 compute minutes. The same job on codebahn-medium (2x) uses 10, and on codebahn-large (3x) uses 15.
A workflow with three parallel jobs that each run one minute on the default runner uses three compute minutes.
Concurrency is capped per plan (Starter 1, Team 3, Scale 6). Above the cap, extra jobs wait until a slot frees. That is separate from the minute cap below.
Top-ups
Section titled “Top-ups”Top-ups are €5 per 1,000 minutes (organization plans only), bought under your organization’s Settings > Billing. Plan minutes drain first; top-up minutes are used only after, and they persist until consumed rather than resetting each month. See billing for limits and warnings.
Bring your own runner
Section titled “Bring your own runner”BYO runners are available on all plans. For Personal plan users, this is the path to CI on Codebahn.
You can register your own forgejo-runner alongside the hosted ones and route jobs to it by label. Give the runner a custom label, then target it with runs-on: my-label; jobs match by exact label. The registration token is single-use and is revoked after the first runner registers, so re-registering needs a fresh token.
See CI runners for the registration steps, or Run your own CI for BYO runner setup and external CI alternatives.

