# silvermetal-builder Gitea Actions runner.
#
# Deployment target: SLAB docker host (10.0.0.51) at /opt/silvermetal-builder-runner/
# Setup:
#   1. Ensure docker-registry.silverlabs.uk/silvermetal-builder:latest is pushed.
#   2. Get a registration token: Gitea Admin -> Actions -> Runners
#      (or `curl -H "Authorization: token $GITEA_TOKEN" \
#            https://git.silverlabs.uk/api/v1/admin/runners/registration-token`)
#   3. Set RUNNER_TOKEN in .env
#   4. docker compose up -d
#
# Why privileged: live-build mounts loop devices and chroots inside the build
# container. Without privileged, mksquashfs and debootstrap fail.

services:
  silvermetal-runner:
    build:
      context: .
      dockerfile: Dockerfile.runner
    container_name: silvermetal-builder-runner
    restart: unless-stopped
    privileged: true
    environment:
      GITEA_INSTANCE_URL: https://git.silverlabs.uk
      GITEA_RUNNER_REGISTRATION_TOKEN: ${RUNNER_TOKEN}
      GITEA_RUNNER_NAME: silvermetal-builder
      # Label routing. Both labels map to the standard catthehacker image
      # (has bash + git + docker-cli, everything build.sh needs to run).
      # The actual silvermetal-builder build environment (live-build, etc.)
      # is invoked by build.sh via `docker run`, not as the job container —
      # that keeps the silvermetal-builder image minimal and avoids nesting
      # docker-cli inside our own pinned image.
      GITEA_RUNNER_LABELS: "silvermetal-builder:docker://catthehacker/ubuntu:act-latest,ubuntu-latest:docker://catthehacker/ubuntu:act-latest"
      # Tell run.sh to launch act_runner with `--config /etc/act_runner/config.yaml`.
      # Without this env, run.sh skips --config entirely and act_runner falls
      # back to compiled-in defaults — silently ignoring everything in
      # config.yaml (timeout, container.options, valid_volumes…).
      CONFIG_FILE: /etc/act_runner/config.yaml
    volumes:
      - runner-data:/data
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.docker:/root/.docker:ro
      # Bind the runner config in. With CONFIG_FILE set above, run.sh hands
      # this path to `act_runner daemon --config`. Both the host file and the
      # mount path must match the env var exactly.
      - ./config.yaml:/etc/act_runner/config.yaml:ro
      # Cache for snapshot.debian.org and apt downloads — survives container
      # recreate, avoids repeated mirror traffic and the rate-limit risk.
      - /opt/silvermetal-builder-runner/cache:/cache
    labels:
      - "com.silverlabs.service=gitea-silvermetal-builder-runner"

volumes:
  runner-data:
