Gitea Runner Images
Custom Docker images for Gitea Actions jobs.
This repo does not run the Gitea runner service. It only builds the Docker images that the runner uses when a workflow job starts.
How It Fits Together
The always-running service lives in the main Gitea Docker stack:
docker.io/gitea/runner:3
That runner service polls Gitea for queued jobs. When a workflow matches one of its labels, it starts the matching Docker image from this repo.
You do not manually run this repo for normal workflow execution. Once the images are published and the Gitea stack points at them, the Portainer-managed runner keeps running in the background.
Images
gitea-runner-web: PHP, Composer, Node.js, Python, build tools, and common CLI toolsgitea-runner-node: Node.js, npm, and common CLI toolsgitea-runner-dotnet: .NET SDK 8, Node.js, npm, and common CLI tools
Build Locally
docker build -t gitea-runner-web:latest images/web
docker build -t gitea-runner-node:latest images/node
docker build -t gitea-runner-dotnet:latest images/dotnet
Publish From GitHub Actions
The workflow at .github/workflows/publish-images.yml builds all three images.
It publishes to GHCR automatically:
ghcr.io/sickprodigy/gitea-runner-web:latest
ghcr.io/sickprodigy/gitea-runner-node:latest
ghcr.io/sickprodigy/gitea-runner-dotnet:latest
It can also publish to Docker Hub when these repository settings exist.
Secrets:
DOCKERHUB_USERNAME
DOCKERHUB_TOKEN
Variables:
DOCKERHUB_WEB_IMAGE=sickprodigy/gitea-runner-web
DOCKERHUB_NODE_IMAGE=sickprodigy/gitea-runner-node
DOCKERHUB_DOTNET_IMAGE=sickprodigy/gitea-runner-dotnet
Gitea Stack Setup
In Portainer, set these environment variables on the main gitea stack after
the images are published:
GITEA_RUNNER_WEB_IMAGE=sickprodigy/gitea-runner-web:latest
GITEA_RUNNER_NODE_IMAGE=sickprodigy/gitea-runner-node:latest
GITEA_RUNNER_DOTNET_IMAGE=sickprodigy/gitea-runner-dotnet:latest
Then redeploy the gitea stack.
Workflow Usage
Use the label for the environment the job needs:
jobs:
test-web:
runs-on: web
steps:
- uses: actions/checkout@v4
- run: php -v
test-node:
runs-on: node-20
steps:
- uses: actions/checkout@v4
- run: node --version
build-dotnet:
runs-on: dotnet-8
steps:
- uses: actions/checkout@v4
- run: dotnet --info
Manual Runner Operation
You only need to manually start the runner if Portainer is not managing it.
Normal setup:
Portainer deploys gitea/docker-compose.yml
gitea-runner container stays running
Gitea sends jobs to that runner
runner starts one of these job images
Manual image builds are only needed for local testing. GitHub Actions handles publishing once the workflow, secrets, and variables are configured.