Written for the other machine, which asked. Everything in it was read off the running host rather than remembered. Also adds docker/ci/ -- the CI image recipe and a capped runner -- because the image existed on exactly one host and its Dockerfile was in a scratch directory under /tmp, which was swept. That is the same shape as every other thing this consolidation has turned up: something correct that exists in one place. docker/ci/Dockerfile rust 1.98.1 + the apt list copied from ci.yml docker/ci/Dockerfile.ffmpeg + ffmpeg, which sylpheed-export shells out to docker/ci/run 6 CPUs / 7 GB / NO SWAP, named cargo volumes The rule the runner exists to enforce: every heavy command goes in the capped container. CARGO_BUILD_JOBS caps codegen units, not rustc's threads, not the linker, not the test harness -- a bare host build is unbounded and has frozen this box repeatedly. The document also records the two agent defects the other machine will meet: a brief change does not reach a RESUMED session, and nothing brought an agent back to its own red PR (fixed in #24, which is itself subject to the first). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
34 lines
1.3 KiB
Docker
34 lines
1.3 KiB
Docker
# The CI image, reproduced locally.
|
|
#
|
|
# 🔴 WHY THIS FILE EXISTS. This image was built once, by hand, from a Dockerfile
|
|
# in a scratch directory under /tmp — and /tmp was swept. The image survived on
|
|
# one host and its recipe did not, which is the same shape as every other thing
|
|
# this consolidation found: something correct that exists in exactly one place.
|
|
#
|
|
# The apt list below is COPIED from `.github/workflows/ci.yml`'s "Install Linux
|
|
# system dependencies" step. If that list changes, this must change with it, or
|
|
# a local run stops predicting the runner.
|
|
#
|
|
# docker build -t sylph-ci:local docker/ci
|
|
#
|
|
# ⚠️ The Rust version is PINNED and the runner's is NOT — `dtolnay/rust-toolchain@stable`
|
|
# floats. That difference is issue #15: `collapsible_else_if` is `warn` on 1.92
|
|
# and `allow` on 1.98.1, so a local clippy pass and a runner clippy pass can
|
|
# legitimately disagree. When they do, the runner is the authority.
|
|
FROM rust:1.98.1-bookworm
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
libasound2-dev \
|
|
libudev-dev \
|
|
libwayland-dev \
|
|
libxkbcommon-dev \
|
|
libx11-dev \
|
|
libxi-dev \
|
|
pkg-config \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN rustup component add clippy rustfmt \
|
|
&& rustup target add wasm32-unknown-unknown
|
|
|
|
WORKDIR /work
|