From 6fe549e34e823abccf987d9be7e21d206fe41e31 Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Sat, 18 Jul 2026 13:24:26 +0200 Subject: [PATCH 1/3] [chore](trx-rs): run reuse lint directly instead of Docker action The host-executor runners have no Docker daemon, so fsfe/reuse-action (a Docker action) fails with "Cannot connect to the Docker daemon". Call the reuse CLI directly; it is baked into the runner image. Assisted-By: Claude Code (claude-opus-4) Claude-Session: https://claude.ai/code/session_01NFpGtGTWUEYXLwZeZs2RAV Signed-off-by: Stan Grams --- .gitea/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index f797828d..a6b00419 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -103,4 +103,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: REUSE compliance - uses: fsfe/reuse-action@v5 + # `reuse` CLI instead of fsfe/reuse-action: the latter is a Docker + # action, which the host-executor runners cannot run. `reuse` is baked + # into the runner image (see container/Containerfile). + run: reuse lint -- 2.55.0 From 2ef9f80fc173dfc4e9891f2f587ec571125c56a4 Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Sat, 18 Jul 2026 23:33:42 +0200 Subject: [PATCH 2/3] [chore](trx-rs): drop redundant CI setup steps for baked runner image The host-executor runners run jobs inside one container that already has the Rust toolchain and all build dependencies baked in, so the per-job `apt-get install` and rustup steps were redundant. Worse, with two jobs running concurrently in the same runner they collided on the dpkg lock ("Could not get lock /var/lib/dpkg/lock-frontend"). Remove the system-dependency, rustup and cache steps; jobs now run cargo directly. The cargo registry persists in the long-lived runner container. Assisted-By: Claude Code (claude-opus-4) Claude-Session: https://claude.ai/code/session_01NFpGtGTWUEYXLwZeZs2RAV Signed-off-by: Stan Grams --- .gitea/workflows/ci.yml | 80 +++++------------------------------------ 1 file changed, 9 insertions(+), 71 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index a6b00419..7cc2a4d0 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -2,6 +2,11 @@ # # SPDX-License-Identifier: GPL-2.0-or-later +# CI for the self-hosted, host-executor Podman runners (see container/). +# The runner image bakes in the Rust toolchain and all build dependencies, +# so jobs go straight to cargo — no apt/rustup setup steps (which also +# collided on the dpkg lock when jobs ran concurrently in the same runner). + name: CI on: @@ -17,86 +22,19 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - - name: Install system dependencies - run: | - sudo apt-get update - sudo apt-get install -y --no-install-recommends \ - build-essential pkg-config cmake clang libclang-dev \ - libopus-dev libasound2-dev libsoapysdr-dev - - - name: Set up Rust - run: | - export PATH="$HOME/.cargo/bin:$PATH" - if ! command -v rustup >/dev/null 2>&1; then - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ - | sh -s -- -y --profile minimal - fi - rustup toolchain install stable --profile minimal \ - --component rustfmt --component clippy - rustup default stable - - - name: Cache cargo - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }} - restore-keys: cargo-${{ runner.os }}- - - name: rustfmt - run: | - export PATH="$HOME/.cargo/bin:$PATH" - cargo fmt --all -- --check - + run: cargo fmt --all -- --check - name: clippy - run: | - export PATH="$HOME/.cargo/bin:$PATH" - cargo clippy --workspace --all-targets --all-features -- -D warnings + run: cargo clippy --workspace --all-targets --all-features -- -D warnings test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - - name: Install system dependencies - run: | - sudo apt-get update - sudo apt-get install -y --no-install-recommends \ - build-essential pkg-config cmake clang libclang-dev \ - libopus-dev libasound2-dev libsoapysdr-dev - - - name: Set up Rust - run: | - export PATH="$HOME/.cargo/bin:$PATH" - if ! command -v rustup >/dev/null 2>&1; then - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ - | sh -s -- -y --profile minimal - fi - rustup toolchain install stable --profile minimal - rustup default stable - - - name: Cache cargo - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }} - restore-keys: cargo-${{ runner.os }}- - - name: Build - run: | - export PATH="$HOME/.cargo/bin:$PATH" - cargo build --workspace --all-targets --locked - + run: cargo build --workspace --all-targets --locked - name: Test - run: | - export PATH="$HOME/.cargo/bin:$PATH" - cargo test --workspace --locked + run: cargo test --workspace --locked reuse: runs-on: ubuntu-latest -- 2.55.0 From ff4e2a5c5ddaa919131a3b04be0072872c8d9c71 Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Sat, 18 Jul 2026 23:57:38 +0200 Subject: [PATCH 3/3] [chore](trx-rs): install reuse with charset-normalizer extra 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 --- container/Containerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/container/Containerfile b/container/Containerfile index 1632a08e..1e5b62ca 100644 --- a/container/Containerfile +++ b/container/Containerfile @@ -32,7 +32,9 @@ RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash - \ && rm -rf /var/lib/apt/lists/* # REUSE >= 3 (Debian's packaged reuse is too old for REUSE.toml). -RUN PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/local/bin pipx install reuse +# 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 \ -- 2.55.0