Bake sccache into the SDK image and enable it via RUSTC_WRAPPER in CI and the devcontainer (not repo-wide, so non-SDK builds are unaffected). - container/Containerfile: install the sccache musl binary. - ci.yml: RUSTC_WRAPPER=sccache, CARGO_INCREMENTAL=0, SCCACHE_DIR=/sccache, cache size cap, plus a `sccache --show-stats` step per job. - runner-config.example.yaml: bind-mount /var/cache/sccache into job containers so the cache persists across runs and is shared between jobs. - .devcontainer: enable sccache with a named cache volume. Assisted-By: Claude Code (claude-opus-4) Claude-Session: https://claude.ai/code/session_01NFpGtGTWUEYXLwZeZs2RAV Signed-off-by: Stan Grams <sjg@haxx.space>
56 lines
2.4 KiB
Docker
56 lines
2.4 KiB
Docker
# SPDX-FileCopyrightText: 2026 Stan Grams <sjg@haxx.space>
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
# trx-rs SDK / build image.
|
|
#
|
|
# Single source of truth for the build environment. Used two ways:
|
|
# * CI — as the job container for the lint/test jobs (Docker executor).
|
|
# * Dev — run locally or via .devcontainer for a reproducible toolchain.
|
|
#
|
|
# Pinning the Rust version here (and in rust-toolchain.toml) means CI and every
|
|
# developer share the exact same rustc/clippy, so "works locally, fails in CI"
|
|
# cannot happen.
|
|
FROM docker.io/library/debian:bookworm-slim
|
|
|
|
# Keep in sync with rust-toolchain.toml.
|
|
ARG RUST_VERSION=1.97.1
|
|
ARG NODE_MAJOR=20
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
RUSTUP_HOME=/usr/local/rustup \
|
|
CARGO_HOME=/usr/local/cargo \
|
|
PATH=/usr/local/cargo/bin:/usr/local/bin:/usr/bin:/bin
|
|
|
|
# Build dependencies (mirror README's manual instructions).
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ca-certificates curl git \
|
|
build-essential pkg-config cmake clang libclang-dev \
|
|
libopus-dev libasound2-dev libsoapysdr-dev chromium \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Node.js — JS-based actions (actions/checkout, actions/cache) run *inside*
|
|
# the job container under the Docker executor, so node must be present.
|
|
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/*
|
|
|
|
# Pinned Rust toolchain, installed world-readable so any UID the runner or a
|
|
# devcontainer uses can invoke cargo.
|
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \
|
|
| sh -s -- -y --no-modify-path \
|
|
--default-toolchain "${RUST_VERSION}" --profile minimal \
|
|
--component rustfmt --component clippy \
|
|
&& chmod -R a+rwX "$RUSTUP_HOME" "$CARGO_HOME"
|
|
|
|
# sccache — shared compilation cache. Enabled at build time via
|
|
# RUSTC_WRAPPER (see the CI workflow and .devcontainer), not repo-wide, so
|
|
# non-SDK builds are unaffected. musl build is static and runs anywhere.
|
|
ARG SCCACHE_VERSION=0.8.2
|
|
RUN curl -fsSL "https://github.com/mozilla/sccache/releases/download/v${SCCACHE_VERSION}/sccache-v${SCCACHE_VERSION}-x86_64-unknown-linux-musl.tar.gz" \
|
|
| tar -xz -C /tmp \
|
|
&& install -m755 "/tmp/sccache-v${SCCACHE_VERSION}-x86_64-unknown-linux-musl/sccache" /usr/local/bin/sccache \
|
|
&& rm -rf /tmp/sccache-*
|
|
|
|
WORKDIR /work
|