# SPDX-FileCopyrightText: 2026 Stan Grams # # SPDX-License-Identifier: GPL-2.0-or-later # Gitea Actions runner image for trx-rs CI (host-executor / "Pattern B"). # # All build dependencies, the Rust toolchain, Node.js (for JS actions such as # actions/checkout and actions/cache) and the `reuse` tool are baked in, so CI # runs skip the per-run apt/rustup install cost. `sudo` is present so the # existing workflow's `sudo apt-get ...` / rustup steps remain valid — they # just become fast no-ops because everything is already installed. FROM docker.io/library/debian:bookworm-slim ARG ACT_RUNNER_VERSION=0.2.11 ARG NODE_MAJOR=20 ENV DEBIAN_FRONTEND=noninteractive \ RUSTUP_HOME=/opt/rustup \ CARGO_HOME=/opt/cargo \ PATH=/opt/cargo/bin:/usr/local/bin:/usr/bin:/bin # Base tooling + trx-rs build dependencies (mirrors .gitea/workflows/ci.yml). RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates curl xz-utils git sudo pipx \ build-essential pkg-config cmake clang libclang-dev \ libopus-dev libasound2-dev libsoapysdr-dev \ && rm -rf /var/lib/apt/lists/* # Node.js (JS-based actions need node in PATH under the host executor). RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash - \ && apt-get install -y --no-install-recommends nodejs \ && rm -rf /var/lib/apt/lists/* # REUSE >= 3 (Debian's packaged reuse is too old for REUSE.toml). # The [charset-normalizer] extra provides an encoding-detection backend; # without it (and without libmagic) reuse fails to import at runtime. RUN PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/local/bin pipx install 'reuse[charset-normalizer]' # Rust stable with rustfmt + clippy, installed system-wide. RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | sh -s -- -y --no-modify-path --profile minimal \ --component rustfmt --component clippy \ && chmod -R a+rwX "$CARGO_HOME" "$RUSTUP_HOME" # act_runner binary. RUN arch="$(dpkg --print-architecture)"; \ case "$arch" in amd64) rarch=amd64;; arm64) rarch=arm64;; *) echo "unsupported arch $arch" >&2; exit 1;; esac; \ curl -fsSL -o /usr/local/bin/act_runner \ "https://gitea.com/gitea/act_runner/releases/download/v${ACT_RUNNER_VERSION}/act_runner-${ACT_RUNNER_VERSION}-linux-${rarch}" \ && chmod +x /usr/local/bin/act_runner # Default config template (seeded into the /data volume on first boot). COPY config.yaml /etc/act_runner/config.yaml COPY entrypoint.sh /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/entrypoint.sh # /data holds the .runner registration, cache and workflow workspaces. VOLUME /data WORKDIR /data ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]