🚀 use prebuilt-only Rust tools to cut arm64 build time 🚀
Build and Push / build (push) Has been cancelled

- Switch cargo-binstall to --disable-strategies compile (no source fallback)
- Reorganize tools into core (reliable prebuilts) and secondary groups
- Add GHA cache for Docker buildx in Gitea workflow
- Disable binstall telemetry prompt for non-interactive builds
- Silently skip tools without prebuilts instead of hours-long compilation

Dockerfile
.gitea/workflows/build.yml
This commit is contained in:
2026-06-30 16:19:57 -04:00
parent 2e7b3fdfe0
commit 8b454163d7
2 changed files with 40 additions and 42 deletions
+2
View File
@@ -59,6 +59,8 @@ jobs:
context: . context: .
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
push: true push: true
cache-from: type=gha
cache-to: type=gha,mode=max
tags: | tags: |
${{ steps.meta.outputs.registry_host }}/${{ github.repository }}:${{ steps.meta.outputs.tag_yymm }} ${{ steps.meta.outputs.registry_host }}/${{ github.repository }}:${{ steps.meta.outputs.tag_yymm }}
${{ vars.DOCKER_USERNAME != '' && format('{0}/{1}:{2}', vars.DOCKER_ORG || vars.DOCKER_USERNAME, github.event.repository.name, steps.meta.outputs.tag_yymm) || '' }} ${{ vars.DOCKER_USERNAME != '' && format('{0}/{1}:{2}', vars.DOCKER_ORG || vars.DOCKER_USERNAME, github.event.repository.name, steps.meta.outputs.tag_yymm) || '' }}
+38 -42
View File
@@ -82,21 +82,25 @@ RUN mkdir -p /rust-tools/bin
# CARGO_INSTALL_ROOT routes both `cargo install` and `cargo binstall` to /rust-tools/bin # CARGO_INSTALL_ROOT routes both `cargo install` and `cargo binstall` to /rust-tools/bin
ENV CARGO_INSTALL_ROOT=/rust-tools ENV CARGO_INSTALL_ROOT=/rust-tools
# Install all Rust tools for the target arch with the native build cache active. # Install all Rust tools for the target arch — prebuilt binaries ONLY, no source fallback.
# Prebuilts are downloaded directly; source fallbacks cross-compile on amd64. # Tools without prebuilts for the target arch are silently skipped (exit 0).
# This cuts arm64 build time from hours to minutes.
RUN --mount=type=cache,id=cargo-registry-native,sharing=shared,target=/usr/local/cargo/registry \ RUN --mount=type=cache,id=cargo-registry-native,sharing=shared,target=/usr/local/cargo/registry \
--mount=type=cache,id=cargo-git-native,sharing=locked,target=/usr/local/cargo/git \ --mount=type=cache,id=cargo-git-native,sharing=locked,target=/usr/local/cargo/git \
set -o pipefail; \ set -o pipefail; \
RUST_TARGET="$(cat /tmp/rust-target)"; \ RUST_TARGET="$(cat /tmp/rust-target)"; \
cargo binstall -y --target "${RUST_TARGET}" \ # Disable telemetry prompt — required for non-interactive builds
mkdir -p /usr/local/cargo && echo 'disable-telemetry = true' > /usr/local/cargo/binstall.toml; \
BINSTALL="cargo binstall -y --disable-strategies compile --target ${RUST_TARGET}"; \
# Core tools — most have prebuilts for both amd64 and arm64
$BINSTALL \
cargo-binstall \
cargo-edit \ cargo-edit \
cargo-watch \ cargo-watch \
cargo-update \ cargo-update \
cargo-outdated \ cargo-outdated \
cargo-expand \ cargo-expand \
bacon \ bacon \
cargo-llvm-cov \
cargo-tarpaulin \
cargo-audit \ cargo-audit \
cargo-deny \ cargo-deny \
cargo-machete \ cargo-machete \
@@ -107,9 +111,23 @@ RUN --mount=type=cache,id=cargo-registry-native,sharing=shared,target=/usr/local
cargo-release \ cargo-release \
cargo-chef \ cargo-chef \
cargo-zigbuild \ cargo-zigbuild \
cargo-nextest \
just \ just \
tokei \ tokei \
hyperfine \ hyperfine \
sccache \
mdbook \
mdbook-toc \
typos-cli \
taplo-cli \
cargo-sort \
cargo-hack \
dprint \
grcov || true; \
# Secondary tools — may or may not have prebuilts
$BINSTALL \
cargo-llvm-cov \
cargo-tarpaulin \
wasm-pack \ wasm-pack \
wasm-tools \ wasm-tools \
wasm-bindgen-cli \ wasm-bindgen-cli \
@@ -117,48 +135,26 @@ RUN --mount=type=cache,id=cargo-registry-native,sharing=shared,target=/usr/local
cargo-binutils \ cargo-binutils \
cargo-bloat \ cargo-bloat \
cargo-asm \ cargo-asm \
mdbook \
mdbook-toc \
typos-cli \
taplo-cli \
cargo-sort \
cargo-hack \
cargo-criterion \ cargo-criterion \
dprint \
cargo-careful \ cargo-careful \
cargo-public-api \ cargo-public-api \
cargo-spellcheck \ cargo-spellcheck \
cargo-geiger \ cargo-geiger \
grcov || true; \ cargo-dist \
cargo binstall -y --target "${RUST_TARGET}" sccache 2>/dev/null || true; \ cargo-msrv \
cargo binstall -y --target "${RUST_TARGET}" cargo-nextest 2>/dev/null || \ cargo-mutants \
cargo install --locked --target "${RUST_TARGET}" cargo-nextest || true; \ flip-link \
cargo binstall -y --target "${RUST_TARGET}" cargo-dist 2>/dev/null || \ cargo-ndk \
cargo install --target "${RUST_TARGET}" cargo-dist || true; \ trunk \
cargo binstall -y --target "${RUST_TARGET}" cargo-msrv 2>/dev/null || \ cargo-udeps \
cargo install --target "${RUST_TARGET}" cargo-msrv; \ cargo-fuzz \
cargo binstall -y --target "${RUST_TARGET}" cargo-mutants 2>/dev/null || \ cargo-minimal-versions \
cargo install --target "${RUST_TARGET}" cargo-mutants; \ cross \
cargo binstall -y --target "${RUST_TARGET}" flip-link 2>/dev/null || \ samply \
cargo install --target "${RUST_TARGET}" flip-link; \ flamegraph \
cargo binstall -y --target "${RUST_TARGET}" cargo-ndk 2>/dev/null || \ probe-rs \
cargo install --target "${RUST_TARGET}" cargo-ndk; \ sqlx-cli \
cargo binstall -y --target "${RUST_TARGET}" trunk 2>/dev/null || \ sea-orm-cli || true
cargo install --target "${RUST_TARGET}" trunk 2>/dev/null || true; \
cargo binstall -y --target "${RUST_TARGET}" cargo-udeps 2>/dev/null || \
cargo install --target "${RUST_TARGET}" cargo-udeps || true; \
cargo binstall -y --target "${RUST_TARGET}" cargo-fuzz 2>/dev/null || \
cargo install --target "${RUST_TARGET}" cargo-fuzz || true; \
cargo binstall -y --target "${RUST_TARGET}" cargo-minimal-versions 2>/dev/null || \
cargo install --target "${RUST_TARGET}" cargo-minimal-versions || true; \
cargo binstall -y --target "${RUST_TARGET}" cross 2>/dev/null || \
cargo install --target "${RUST_TARGET}" cross 2>/dev/null || true; \
cargo binstall -y --target "${RUST_TARGET}" samply 2>/dev/null || true; \
cargo binstall -y --target "${RUST_TARGET}" flamegraph 2>/dev/null || \
cargo install --target "${RUST_TARGET}" flamegraph || true; \
cargo binstall -y --target "${RUST_TARGET}" probe-rs 2>/dev/null || true; \
cargo binstall -y --target "${RUST_TARGET}" sqlx-cli 2>/dev/null || true; \
cargo binstall -y --target "${RUST_TARGET}" sea-orm-cli 2>/dev/null || true
FROM ${PULL_URL}:${DISTRO_VERSION} AS build FROM ${PULL_URL}:${DISTRO_VERSION} AS build
ARG TZ ARG TZ