Rust自动化工具链配置指南
一 本地一键安装与标准化脚本
#!/usr/bin/env bash
set -euo pipefail
RUSTUP_INIT_URL="https://sh.rustup.rs"
DEFAULT_TOOLCHAIN="stable"
TARGETS=("x86_64-unknown-linux-gnu" "wasm32-unknown-unknown")
COMPONENTS=("rustfmt" "clippy" "rust-docs")
info() { echo "[INFO] $*"; }
error() { echo "[ERROR] $*" >&2; exit 1; }
if command -v rustup &>/dev/null; then
info "rustup 已安装,跳过安装步骤"
else
info "下载并安装 rustup..."
curl --proto '=https' --tlsv1.2 -sSf "$RUSTUP_INIT_URL" -o rustup-init.sh
chmod +x rustup-init.sh
./rustup-init.sh -y --default-toolchain "$DEFAULT_TOOLCHAIN"
rm -f rustup-init.sh
# 加载环境
if [ -f "$HOME/.cargo/env" ]; then . "$HOME/.cargo/env"; else error "未找到 $HOME/.cargo/env"; fi
fi
for target in "${TARGETS[@]}"; do
info "安装目标平台: $target"
rustup target add "$target" || info "目标平台 $target 已安装"
done
for component in "${COMPONENTS[@]}"; do
info "安装组件: $component"
rustup component add "$component" || info "组件 $component 已安装"
done
info "验证安装结果..."
command -v cargo &>/dev/null || error "cargo 未找到"
command -v rustc &>/dev/null || error "rustc 未找到"
info "Rust 环境配置完成"
rustc --version
cargo --version
rustup show
二 团队一致性与镜像加速
export RUSTUP_HOME="$HOME/.rustup"
export CARGO_HOME="$HOME/.cargo"
export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"
# 可选:统一工具链
export RUSTUP_TOOLCHAIN="stable"
三 CI 自动化模板
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
targets: wasm32-unknown-unknown
- uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ steps.rust-toolchain.outputs.cachekey }}-${{ hashFiles('**/Cargo.lock') }}
- run: cargo test --verbose
- run: cargo clippy -- -D warnings
- run: cargo fmt -- --check
image: rust:latest
variables:
CARGO_HOME: $CI_PROJECT_DIR/.cargo
RUSTUP_HOME: $CI_PROJECT_DIR/.rustup
cache:
paths:
- .cargo/registry
- .cargo/git
- target/
stages:
- setup
- test
- build
setup_rust:
stage: setup
script:
- rustup component add clippy rustfmt
- rustup target add wasm32-unknown-unknown
test_suite:
stage: test
script:
- cargo test --verbose
- cargo clippy -- -D warnings
- cargo fmt -- --check
build_release:
stage: build
script:
- cargo build --release
artifacts:
paths:
- target/release/
四 声明式与多版本管理方案
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
rustc
cargo
rustfmt
clippy
rust-src
cargo-edit
];
home.sessionVariables = {
CARGO_HOME = "${config.xdg.dataHome}/cargo";
PATH = "${config.xdg.dataHome}/cargo/bin:$PATH";
};
}