Forgejo and Gitea Actions: "No matching online runner with label"
The job names a label in runs-on that no runner connected right now has. Forgejo and Gitea do not fail such a job: it stays queued until a runner with every label in its runs-on comes online, or until someone cancels it. Give a runner that label, start the runner that has it, or change runs-on to a label your runners have.
Where the message appears
The words are the same in both, with the labels in place of the placeholder:
No matching online runner with label: ubuntu-latest
- Gitea (checked in 28.2.0, the latest release, of October 18, 2026): a red warning icon next to the run in the list of runs, with the message when you point at it. It shows while a job of the run waits and no online runner that is not disabled has every label of that job (actions.go, runs_list.tmpl). The page of the waiting job tells the three cases apart: "No runner is online to pick up this job." when no runner is online at all, this message when runners are online but none has the labels, and "Waiting for a matching runner to become available." when a runner with the labels is online but busy (view.go).
- Forgejo: a red warning icon next to the workflow in the list of workflows on the left of the Actions tab, for the first value of its
runs-onthat no online runner has. Values that contain an expression (${{ }}) are skipped, so a job whose labels come from an expression waits without this warning (actions.go, list_inner.tmpl).
Through the API there is no error at all: the job is queued on Gitea and waiting on Forgejo, and stays so. Gitea also returns the labels the job asks for, as labels on the job (repo_actions.go).
How a runner is matched to a job
- A runner takes a job only when it has every label of the job:
runs-on: [self-hosted, linux]needs one runner with both (Gitea CanMatchLabels, Forgejo ItRunsOn). - Gitea compares labels without regard to case. Forgejo compares them exactly, so
Ubuntu-latestandubuntu-latestare two different labels there. - The label is the name before the colon. A runner configured with
ubuntu-latest:docker://node:24has the labelubuntu-latest; the rest says where its jobs run (Gitea, Forgejo). - Online means the runner was in touch with the server within the last minute (
RunnerOfflineTimein both). A stopped runner, or one that cannot reach the server, does not count. - The runners that count are those of the repository, of its owner (user or organization) and of the whole server. A runner registered for another repository or organization does not take the job (Forgejo registration).
Get the job running
- See which runners there are, with their labels and status: in the repository, Settings, Actions, Runners (
/{owner}/{repository}/settings/actions/runners). The list includes the runners of the owner and of the server. Organizations have the same page under/org/{org}/settings/actions/runners, your account under/user/settings/actions/runners, server administrators under/admin/actions/runners. Each runner shows Idle, Active or Offline, and its labels (the same pages in Gitea). - The label is there, but the runner is Offline: start the runner again (on Gitea,
gitea-runner daemon) and check that it can reach the server. The waiting job is taken as soon as the runner asks for work; nothing needs to be run again. - No runner has the label: add it to a runner, or change
runs-on. A workflow written for GitHub usually saysruns-on: ubuntu-latest, which needs a runner with a label of that name; Forgejo suggests a label such asubuntu-latest:docker://node:ltsto mimic GitHub runners. On Gitea, setrunner.labelsin the configuration file (or--labels) and restart the runner, which reports its labels at startup. On Forgejo, labels are listed underrunner: labels:in the configuration file of the runner. - On Codeberg: the runners Codeberg hosts have the labels
codeberg-tiny,codeberg-smallandcodeberg-medium(each also with-lazy), and are offered in a limited way;runs-on: ubuntu-latestwaits unless you connect a runner of your own with that label (codeberg.org/actions/meta, Codeberg documentation). - After changing runs-on: the change applies to new runs. On Gitea a re-run copies the jobs as they were, labels included (rerun.go), so push a commit, or start the workflow by hand if it has
workflow_dispatch, and cancel the run that is still waiting.
Forgejo and Gitea Actions in IntelliJ IDEA
Pipeline Inbox for Forgejo and Gitea, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, shows the runs of your Forgejo and Gitea repositories with their jobs and logs. A job that waits for a runner is marked queued in the jobs of its run, and its log stays open and follows it, so the first lines appear as soon as a runner takes the job. Since version 1.0.1 it also shows the labels the waiting job asks for (its runs-on). The runs, jobs and logs are free; re-running, cancelling and starting workflows are Pro (US$1.50 a month, with a 30-day trial).
Get it on JetBrains Marketplace
Forgejo, Gitea and Codeberg are names of their respective owners; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with or endorsed by the Forgejo project, Codeberg e.V., the Gitea project or JetBrains.
More: Workflow dispatch refused · Gitea Actions API "token is required" · Job log expired · Forgejo Actions and Gitea Actions in JetBrains IDEs · 日本語