Files
apf_portal/infra/ci-runners.compose.yml
T
Julien Gautier f5f0cd6369
CI / check (pull_request) Failing after 4s
CI / commits (pull_request) Failing after 4s
CI / scan (pull_request) Failing after 7s
CI / a11y (pull_request) Failing after 2s
CI / perf (pull_request) Failing after 4s
fix(ci): pin act_runner job image to catthehacker/ubuntu:act-22.04
Without an image suffix on the runner labels, act_runner uses a
minimal default container image that has no Node. Every JavaScript
action (actions/checkout, actions/setup-node, nrwl/nx-set-shas, etc.)
crashes during the action's launch step with `Cannot find: node in
PATH`, blocking every CI gate before any project code runs.

The fix is in the runner registration labels: act_runner accepts the
format `<label>:docker://<image>`, which makes act spawn jobs in the
specified container. catthehacker/ubuntu:act-22.04 is the de facto
standard image for act-compatible runners; it bundles Node, Python,
git, common build tools, and the Docker CLI, matching what GitHub
Actions / Gitea Actions workflows generally assume.

infra/ci-runners.compose.yml: GITEA_RUNNER_LABELS updated for the
three runners, with an inline comment explaining the format trap.

docs/decisions/0015-cicd-gitea-actions.md (§Runners): amend the
runner-image baseline. Previous wording said "a Debian image"
without specifying which; now states catthehacker/ubuntu:act-22.04
explicitly and explains the docker:// suffix requirement. Status
remains 'accepted' - the runner-image choice is implementation detail
under the existing decision.

Already-running runners need their labels updated in the Gitea UI
(Site Administration -> Actions -> Runners -> edit each runner) to
the new format. Compose change applies on next re-registration.
Documented as the operational follow-up.
2026-05-04 10:53:23 +02:00

81 lines
3.5 KiB
YAML

# Self-hosted Gitea Actions runners — per ADR-0015 §"Runners".
#
# Three act_runner instances registered with the project's Gitea
# organisation, labelled self-hosted + on-prem (the labels referenced
# by every job in .gitea/workflows/*).
#
# First-time registration, scaling, image pinning, and security notes
# are documented in infra/README.md.
name: apf-portal-ci-runners
services:
runner-1:
image: gitea/act_runner:0.2.13
container_name: apf-portal-runner-1
restart: unless-stopped
environment:
GITEA_INSTANCE_URL: ${GITEA_INSTANCE_URL:?GITEA_INSTANCE_URL must be set in infra/.env}
GITEA_RUNNER_REGISTRATION_TOKEN: ${GITEA_RUNNER_REGISTRATION_TOKEN:-}
GITEA_RUNNER_NAME: apf-portal-runner-1
# Labels are formatted as <label>:docker://<image>. Without the
# docker:// suffix, act_runner uses a minimal default image with no
# Node, breaking any JavaScript action (actions/checkout etc.).
# catthehacker/ubuntu:act-22.04 is the de facto standard for
# act-compatible runners — bundles Node, Python, git, common build
# tools, and the Docker CLI.
GITEA_RUNNER_LABELS: self-hosted:docker://catthehacker/ubuntu:act-22.04,on-prem:docker://catthehacker/ubuntu:act-22.04
volumes:
# Docker socket — see security note in infra/README.md.
- /var/run/docker.sock:/var/run/docker.sock
# Persistent state: runner credentials live here after first registration.
- ./data/runner-1:/data
networks:
- act-runners
runner-2:
image: gitea/act_runner:0.2.13
container_name: apf-portal-runner-2
restart: unless-stopped
environment:
GITEA_INSTANCE_URL: ${GITEA_INSTANCE_URL:?GITEA_INSTANCE_URL must be set in infra/.env}
GITEA_RUNNER_REGISTRATION_TOKEN: ${GITEA_RUNNER_REGISTRATION_TOKEN:-}
GITEA_RUNNER_NAME: apf-portal-runner-2
# Labels are formatted as <label>:docker://<image>. Without the
# docker:// suffix, act_runner uses a minimal default image with no
# Node, breaking any JavaScript action (actions/checkout etc.).
# catthehacker/ubuntu:act-22.04 is the de facto standard for
# act-compatible runners — bundles Node, Python, git, common build
# tools, and the Docker CLI.
GITEA_RUNNER_LABELS: self-hosted:docker://catthehacker/ubuntu:act-22.04,on-prem:docker://catthehacker/ubuntu:act-22.04
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data/runner-2:/data
networks:
- act-runners
runner-3:
image: gitea/act_runner:0.2.13
container_name: apf-portal-runner-3
restart: unless-stopped
environment:
GITEA_INSTANCE_URL: ${GITEA_INSTANCE_URL:?GITEA_INSTANCE_URL must be set in infra/.env}
GITEA_RUNNER_REGISTRATION_TOKEN: ${GITEA_RUNNER_REGISTRATION_TOKEN:-}
GITEA_RUNNER_NAME: apf-portal-runner-3
# Labels are formatted as <label>:docker://<image>. Without the
# docker:// suffix, act_runner uses a minimal default image with no
# Node, breaking any JavaScript action (actions/checkout etc.).
# catthehacker/ubuntu:act-22.04 is the de facto standard for
# act-compatible runners — bundles Node, Python, git, common build
# tools, and the Docker CLI.
GITEA_RUNNER_LABELS: self-hosted:docker://catthehacker/ubuntu:act-22.04,on-prem:docker://catthehacker/ubuntu:act-22.04
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data/runner-3:/data
networks:
- act-runners
networks:
act-runners:
name: apf-portal-act-runners