the official runner for Gitea Actions: it claims your queued jobs and runs each one in its own container.
Gitea Actions splits into two halves: the instance that stores the code, the workflow files and the run history, and a runner that actually claims a queued job and executes it. Without a runner, workflows queue and nothing happens. Gitea Runner is the official runner published by the Gitea project, and it speaks the workflow syntax teams already know from GitHub Actions, so existing pipelines are largely portable. It connects outward to the instance you nominate, using a registration token you generate there, then claims jobs, runs each one inside a container, streams the log back as it goes and cleans up afterwards. Labels decide which jobs a runner will take and which container image each one runs inside, so a single instance can direct different work to different machines.
A runner image that carried a registration would hand every deployment the same identity, claiming jobs from, and streaming build logs back to, an instance belonging to somebody else; this image contains no registration, no runner token and no remembered address, and the service refuses to start until you connect it. Each instance also generates its own unique runner name on first boot, so two runners on one server never collide. Because a runner executes code from anyone who can push to the repositories it serves, the boundaries around a job are set deliberately rather than left at their defaults: jobs get no access to the container engine, cannot mount host directories, cannot run privileged, and cannot reach the cloud instance metadata service where a machine identity would be handed out. The container engine comes from the distribution archive so it keeps receiving security updates with the rest of the system, and an on instance self test runs a real workflow and reports back on every one of those boundaries. Paired deployment guide and 24/7 cloudimg support.