The runner image's `reuse` failed to import (NoEncodingModuleError): it needs an encoding-detection backend, which the bare `reuse` install does not provide and which libmagic/`file` is not present to satisfy. Install `reuse[charset-normalizer]` so the reuse job can run in the image. Rebuild the runner image and recreate the containers to pick this up. Assisted-By: Claude Code (claude-opus-4) Claude-Session: https://claude.ai/code/session_01NFpGtGTWUEYXLwZeZs2RAV Signed-off-by: Stan Grams <sjg@haxx.space>
62 lines
2.7 KiB
Docker
62 lines
2.7 KiB
Docker
# SPDX-FileCopyrightText: 2026 Stan Grams <sjg@haxx.space>
|
|
#
|
|
# 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"]
|