众所周知,Github Actions可以执行工作流任务,而且免费版本还具备三种系统和两种架构可选,这就非常适合拿来编译代码。
花了一些时间研究出了个编译Rust代码Github Actions Workflow文件模版,可以把简单的Rust项目分别编译成3个平台2种架构的可执行程序。
Github:Github_Actions_Rust_Workflows: 简单的Github Actions编译Rust工作流文件
工作流文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| name: Build Rust Project
on: workflow_dispatch:
jobs: build: env: program_name: rust_program strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] arch: [amd64, arm64] runs-on: ${{ matrix.os }} steps: - name: Checkout code uses: actions/checkout@v4
- name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: toolchain: stable
- name: Build for rust shell: bash run: | #处理环境变量 arch=${{ matrix.arch }} os=$RUNNER_OS program_name=${{ env.program_name }} if [ "$os" == "Linux" ]; then if [ "$arch" == "amd64" ]; then target=x86_64-unknown-linux-gnu linker=gcc elif [ "$arch" == "arm64" ]; then target=aarch64-unknown-linux-gnu linker=aarch64-linux-gnu-gcc sudo apt-get update && sudo apt-get install -y gcc-aarch64-linux-gnu fi suffix="" elif [ "$os" == "Windows" ]; then if [ "$arch" == "amd64" ]; then target=x86_64-pc-windows-msvc linker=link.exe elif [ "$arch" == "arm64" ]; then target=aarch64-pc-windows-msvc linker=link.exe fi suffix=".exe" elif [ "$os" == "macOS" ]; then if [ "$arch" == "amd64" ]; then target=x86_64-apple-darwin linker=clang elif [ "$arch" == "arm64" ]; then target=aarch64-apple-darwin linker=clang fi suffix="" fi echo "当前环境:$os/$arch" echo "当前rust工具链版本" rustc --version
rustup target add ${target} mkdir -p .cargo cat <<EOL > "./.cargo/config.toml" [target.${target}] linker = "${linker}" EOL
echo "开始编译" echo "目标:${target}" cargo build --release --target=${target}
- name: Upload Build Artifacts uses: actions/upload-artifact@v4 with: name: ${{ env.program_name }}_${{ matrix.os }}_${{ matrix.arch }} path: target/*
|
使用说明
1. 把 .github/workflows/rust.yml 复制到你的 rust 项目仓库根目录中
2. 在 GitHub 仓库页面的 Actions 选项卡中手动点击 Run workflow 开始构建。
3. 根据rust.yml文件中matrix选择的平台架构矩阵,工作流会自动执行并构建对应平台架构的可执行文件。
4. 构建完成后,指定目录构建产物(target/)会被上传至对应的构建产物列表中,便于下载和后续使用。
注意事项
这个工作流只会把Cargo的编译产物(target/)上传到构建产物中,如果需要上传多个文件,请自行配置rust.yml中path: output/*
依赖项目
其中使用了 dtolnay/rust-toolchain 的脚本安装 stable 版本的 Rust 工具链,感谢脚本作者的辛勤维护~