# The Gitea Actions runner, for a single-machine Gitea. # # Nothing in .gitea/workflows runs until a runner is registered, and this is the # whole of it. Two settings do the work: # # * the **label map** decides what `runs-on: ubuntu-latest` means. It is pinned # to catthehacker/ubuntu:act-24.04 because the workflows need two things from # the image: a node (Gitea's javascript actions — checkout, cache, # upload-artifact — run *inside* the job container) and Python 3.12, which # the backend's `requires-python` insists on. Ubuntu 24.04 ships 3.12. # * the **docker socket**, mounted into job containers so the `docker` workflow # can build and push an image. That is a real privilege handed to CI; it is # also the normal arrangement when Gitea and its runner are the same box as # the deployment. # # Setting it up: # # 1. Gitea → Settings → Actions → Runners → "Create new runner", copy the token. # 2. GITEA_RUNNER_REGISTRATION_TOKEN= docker compose -f docker-compose.ci.yml up -d # 3. Repository → Settings → Actions → Secrets, add: # REGISTRY_USER, REGISTRY_TOKEN — a Gitea user and token with # package:write, for the registry # KADENCE_KEYSTORE_BASE64 — base64 -w0 of your keystore # KADENCE_KEYSTORE_PASSWORD, KADENCE_KEY_ALIAS, KADENCE_KEY_PASSWORD # Without the keystore secrets the APK job still runs and produces an # unsigned-for-release (debug-signed) artifact rather than failing. # # Gitea itself needs `[actions] ENABLED = true` in app.ini, and # `DEFAULT_ACTIONS_URL = github` so `actions/checkout@v4` can be resolved. services: runner: image: gitea/act_runner:0.2.11 restart: unless-stopped environment: GITEA_INSTANCE_URL: ${GITEA_INSTANCE_URL:-https://git.timka.su} GITEA_RUNNER_REGISTRATION_TOKEN: ${GITEA_RUNNER_REGISTRATION_TOKEN:?set this to the token from Gitea} GITEA_RUNNER_NAME: ${GITEA_RUNNER_NAME:-kadence-runner} GITEA_RUNNER_LABELS: ubuntu-latest:docker://catthehacker/ubuntu:act-24.04 # Mounted into every job container, which is what lets the docker workflow # build an image. `valid_volumes` has to allow it explicitly. CONFIG_FILE: /config/config.yaml volumes: - runner-data:/data - ./deploy/act-runner.yaml:/config/config.yaml:ro - /var/run/docker.sock:/var/run/docker.sock volumes: runner-data: