sickprodigy b538aaa171
Publish Runner Images / publish (map[context:images/dotnet dockerhub_var:DOCKERHUB_DOTNET_IMAGE name:gitea-runner-dotnet]) (push) Skipped
Publish Runner Images / publish (map[context:images/node dockerhub_var:DOCKERHUB_NODE_IMAGE name:gitea-runner-node]) (push) Skipped
Publish Runner Images / publish (map[context:images/web dockerhub_var:DOCKERHUB_WEB_IMAGE name:gitea-runner-web]) (push) Skipped
Add conditional check for GitHub server in publish job
2026-08-30 12:12:03 -04:00

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 tools
  • gitea-runner-node: Node.js, npm, and common CLI tools
  • gitea-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.

S
Description
No description provided
Readme
37 KiB
Languages
Dockerfile 100%