# Runner base image for Forgejo act_runner job containers. # Pre-installs Python 3.12, Node 22, uv, and ruff so workflows skip # lengthy runtime installs on every run. # # Build and push (re-run when this file changes): # docker build -f infra/Dockerfile.runner-base \ # -t git.fabledsword.com/bvandeusen/runner-base:ci-runner . # docker push git.fabledsword.com/bvandeusen/runner-base:ci-runner # # Then redeploy the act_runner stack in Portainer to pick up the new image. FROM ubuntu:24.04 ENV DEBIAN_FRONTEND=noninteractive ENV TZ=UTC # Split into separate RUN steps so each pushed layer is smaller — one # combined layer exceeds the nginx upload timeout on the self-hosted # Forgejo registry. # Python 3.12 (ships in Ubuntu 24.04 main repos) + core tools RUN apt-get update -qq && \ apt-get install -y -qq \ python3.12 python3.12-dev python3.12-venv \ git curl ca-certificates gnupg jq tzdata && \ apt-get clean && rm -rf /var/lib/apt/lists/* # Node 22 LTS via NodeSource RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ apt-get install -y -qq nodejs && \ apt-get clean && rm -rf /var/lib/apt/lists/* # Docker CLI — daemon comes from the host socket mount, only CLI needed. # docker.io from Ubuntu repos is sufficient for docker login + buildx. RUN apt-get update -qq && \ apt-get install -y -qq docker.io && \ apt-get clean && rm -rf /var/lib/apt/lists/* # uv — fast Python package installer/resolver (~10x faster than pip). # Used by test jobs instead of pip for venv creation + dep installs. RUN curl -LsSf https://astral.sh/uv/install.sh | env INSTALLER_NO_MODIFY_PATH=1 sh && \ mv /root/.local/bin/uv /usr/local/bin/ && \ mv /root/.local/bin/uvx /usr/local/bin/ # ruff — Python linter. Baked in so the lint job is just # `ruff check src/` with zero install overhead. RUN curl -LsSf https://astral.sh/ruff/install.sh | env INSTALLER_NO_MODIFY_PATH=1 sh && \ mv /root/.local/bin/ruff /usr/local/bin/