Name rust-analyzer everywhere the toolchain is installed
Build and test / Desktop (Linux) (push) Failing after 1h18m38s
Build and test / Layer separation (push) Successful in 48s
🐳 Android image / Build and push (push) Successful in 9m41s
Build and test / android-image (push) Successful in 9m41s
Traceability / Requirement traces (push) Successful in 48s
Build and test / Android (aarch64) (push) Successful in 21m54s

VS Code's rust-analyzer extension ships a server newer than 1.92.0
supports and prompts, on every window, to add one. Listing the component
in rust-toolchain.toml makes rustup supply the server matching the pin —
the same thing the pin buys everywhere else.

The cost lands outside the editor, which is why this is four files
rather than one. rustup reconciles that component list against the
installed toolchain on the first cargo call in the work tree and
downloads what is missing, inside whatever job happens to be running. An
unasked-for fetch in the middle of a build step is nobody's line item
and hard to find in a log. So every environment that builds this repo
names it too: baked into the Android image, and in the install step of
each CI job that rolls its own toolchain.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-29 23:21:44 +02:00
co-authored by Claude Opus 5
parent 2955cad654
commit d70f5c14e0
4 changed files with 46 additions and 6 deletions
+9 -1
View File
@@ -118,6 +118,14 @@ ENV ANDROID_NDK_HOME=${ANDROID_HOME}/ndk/${NDK_VERSION} \
#
# All four ABIs. arm64-v8a covers essentially every current device; the others
# exist so an ABI-specific build break is caught here rather than at release.
#
# The component list must be a superset of rust-toolchain.toml's. rustup
# reconciles that file against the installed toolchain on the first cargo
# invocation in the work tree, and silently downloads whatever is missing —
# inside the CI job, after this image has already been pulled. Anything the
# repo asks for therefore belongs here, or the image is not the whole
# environment it claims to be. rust-analyzer is in that list for the editor's
# sake; here it costs a layer and buys a job that fetches nothing.
# ---------------------------------------------------------------------------
RUN curl -fsSL https://sh.rustup.rs | sh -s -- \
-y --no-modify-path --profile minimal --default-toolchain ${RUST_VERSION} \
@@ -126,7 +134,7 @@ RUN curl -fsSL https://sh.rustup.rs | sh -s -- \
armv7-linux-androideabi \
x86_64-linux-android \
i686-linux-android \
&& rustup component add rustfmt clippy \
&& rustup component add rustfmt clippy rust-analyzer \
&& cargo install cargo-ndk --locked \
&& chmod -R a+rwX ${CARGO_HOME} ${RUSTUP_HOME}