Files
kadence/deploy/act-runner.yaml
timka123andClaude Opus 5 4584a5324d ci: an empty docker_host is how 0.3.x mounts the socket into jobs
`docker_host: automount` is a later act_runner's spelling of the default, and
0.3.1 does not know the word: it exits with `unable to parse docker host
automount` and restart-loops — registered, visible in Gitea, never online, and
the logs say nothing about the config file.

On 0.3.x the empty value is the one that finds a daemon *and* passes it to the
job containers, which is what `docker.yml` needs; `"-"` is the value that
withholds it. Both spellings are now in the guide's failure table, because the
symptom points at the daemon rather than at the one word that caused it.

Verified in the job image on the runner host: Ubuntu 24.04 as root, node 24,
Python 3.12.3, npm, curl and unzip (the SDK script's dependencies), apt-get
update/install, `python3 -m venv` plus pip, `docker version` against the host's
27.5.1 through the mounted socket, and openjdk-21-jdk-headless landing exactly
at the `JAVA_HOME` the Android jobs assume.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-22 18:42:25 +03:00

58 lines
2.2 KiB
YAML

# act_runner's own configuration, mounted into the container as
# /config/config.yaml. See docker-compose.ci.yml and docs/gitea-runner.md.
log:
level: info
runner:
# Two jobs at a time. The test workflow has four, so a push runs them in two
# waves on an 8-core box — raise it if the box is idle anyway.
capacity: 2
timeout: 1h
shutdown_timeout: 3h
insecure: false
fetch_timeout: 5s
fetch_interval: 2s
# Deliberately empty: the labels come from GITEA_RUNNER_LABELS at registration
# and live in .runner afterwards. Setting them in both places is how they end
# up disagreeing.
labels: []
cache:
# What makes `actions/cache@v4` work — the Android SDK download and the gradle
# caches are most of the APK job's wall clock. The server is run by the runner
# itself, inside the container, and reached by job containers over the shared
# `gitea-runner` network, so there is no port to publish or firewall.
enabled: true
dir: ""
host: ""
port: 0
container:
# The same network the runner is on. Not `bridge`: on the default bridge the
# job containers cannot reach the runner's cache server.
network: gitea-runner
privileged: false
options:
workdir_parent: workspace
# How job containers get at a docker daemon, which `docker.yml` needs to build
# and push the image.
#
# **Empty is not "off" here.** In act_runner 0.3.x an empty `docker_host` means
# "find a docker host and mount it into the job containers" — which is exactly
# what is wanted. `"-"` is the value that finds one for the runner but does
# *not* pass it to jobs, and `automount` is a later version's spelling of the
# default: on 0.3.1 it fails with `unable to parse docker host automount` and
# the daemon restart-loops without ever coming online.
docker_host: ""
# The allow-list for volumes a workflow or a service container may ask for.
# The socket is already mounted by the line above; this is what makes an
# explicit mount of it legal too, rather than silently dropped.
valid_volumes:
- /var/run/docker.sock
force_pull: false
force_rebuild: false
host:
# Only used by `:host` labels, which this runner deliberately does not offer.
workdir_parent: /tmp/act_runner