linux

Rust如何配置自动化工具链

小樊
32
2025-12-16 07:39:24
栏目: 编程语言

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";
  };
}

0
看了该问题的人还看了