actions-rs/cargo实战配方:build、test、clippy、fmt的6种Rust CI组合姿势
actions-rs/cargo实战配方build、test、clippy、fmt的6种Rust CI组合姿势【免费下载链接】cargo GitHub Action for Rust cargo command项目地址: https://gitcode.com/gh_mirrors/cargo1/cargo在 GitHub Actions 中为 Rust 项目搭建 CIactions-rs/cargo这个 Action 是最省心的选择它把cargo build、cargo test、cargo clippy、cargo fmt等命令统一封装一行配置即可完成编译、测试、静态检查与格式校验还能自动把 cargo 的警告高亮到 PR 页面。本文给出 6 种最常用的 Rust CI 组合姿势新手可直接复制使用。为什么用 actions-rs/cargo 而不是直接 run你可能会问为什么不用普通的run: cargo build两个核心优势警告可见性内置 Rust 问题匹配器定义在 .matchers/rust.jsoncargo 输出的warning、error会直接显示在 PR 检查的 UI 面板中而不是淹没在日志里cross 透明安装开启use-cross: true后自动安装并调用 cross 工具跨平台编译零额外配置核心参数只有 4 个定义在 action.yml 中参数必填说明command✅要执行的 cargo 命令如build、test、clippyargs传给命令的参数如--release --all-featurestoolchain指定工具链不带如nightlyuse-cross用 cross 替代 cargo默认false 参数解析逻辑很严谨args支持任意空白字符、toolchain自动去除前缀可以在 src/input.ts 中看到实现测试用例见tests/input.test.ts。姿势一一键 release 构建最常用最基础也是出现频率最高的组合——编译发布版本on: [push] name: CI jobs: build_and_test: name: Rust project runs-on: ubuntu-latest steps: - uses: actions/checkoutv2 - uses: actions-rs/toolchainv1 with: toolchain: stable - uses: actions-rs/cargov1 with: command: build args: --release --all-featurescommand: buildargs: --release --all-features等价于本地执行cargo build --release --all-features适合每次 push 后验证发布产物能正常编译。姿势二cargo test 全量测试 指定 feature测试环节的关键是覆盖你启用的 feature 组合- uses: actions-rs/cargov1 with: command: test args: --features unstable --no-default-features需要说明一点Rust 的测试不会在 release 模式下编译所以args里千万不要带--release。如果项目依赖 nightly 特性把toolchain参数设为nightly即可无需手写cargo nightly。姿势三cargo clippy 严格静态检查clippy 是 Rust 代码质量的守门员建议把警告升级为失败防止坏味道混入主干- uses: actions-rs/cargov1 with: command: clippy args: -- -D warnings-D warnings会让任何 warning 直接导致 CI 失败。得益于内置的问题匹配器clippy 报出的每条警告都会带行号高亮在代码检查面板中定位问题非常快。姿势四cargo fmt --check 格式守门fmt本身不会失败必须加--check才会把格式不一致当作错误退出- uses: actions-rs/cargov1 with: command: fmt args: --all -- --check放在流水线最前面跑代码风格不达标就直接拦截避免后面的编译、测试白跑浪费时间。姿势五四合一完整流水线推荐模板把上面四个命令按先快后慢的顺序串成一个 job一次 push 全覆盖jobs: rust_ci: runs-on: ubuntu-latest steps: - uses: actions/checkoutv2 - uses: actions-rs/toolchainv1 with: toolchain: stable - uses: actions-rs/cargov1 with: command: fmt args: --all -- --check - uses: actions-rs/cargov1 with: command: clippy args: -- -D warnings - uses: actions-rs/cargov1 with: command: build args: --release - uses: actions-rs/cargov1 with: command: test同一个 job 里连续调用同一个 Action 是允许的且共享同一份工具链缓存执行效率很高。姿势六use-cross 跨平台交叉编译给嵌入式或 ARM 设备构建时手动装目标工具链很麻烦use-cross: true一个开关搞定jobs: linux_arm7: name: Linux ARMv7 runs-on: ubuntu-latest steps: - uses: actions/checkoutv2 - uses: actions-rs/toolchainv1 with: toolchain: stable target: armv7-unknown-linux-gnueabihf override: true - uses: actions-rs/cargov1 with: use-cross: true command: build args: --target armv7-unknown-linux-gnueabihfAction 会按需自动安装 cross 并在同一 job 内复用命令实际以cross build --target ...执行对使用者完全透明。项目结构与源码导读整个 Action 用 TypeScript 编写结构清晰值得学习action.ymlAction 入口声明定义 4 个输入参数与运行环境src/main.ts主流程——根据use-cross决定调用 cargo 还是 cross拼接toolchain command args后执行src/input.ts输入解析层把环境变量转成结构化的Input对象.matchers/rust.jsonRust 问题匹配器规则负责把编译输出转成带文件行号的诊断信息README.md官方说明文档含全部使用场景常见问题速答Q每次都要装 toolchain 吗配合actions-rs/toolchain使用指定stable/nightly等版本不指定则使用环境里现有的 cargo。Qargs 里的引号会出问题吗参数经string-argv库解析见 src/input.ts--features a b这类带空格值能正确切分无需额外转义。Q失败时日志在哪里看命令失败会调用core.setFailed标记整个步骤失败逻辑在 src/main.ts同时 warning/error 已同步到检查面板。掌握这 6 种组合你的 Rust 项目 CI 就能在格式、质量、编译、测试四个维度全部自动化把关。想深入了解参数细节建议从 README.md 的 Use cases 章节读起配合本文的完整流水线模板基本可以覆盖绝大多数场景。【免费下载链接】cargo GitHub Action for Rust cargo command项目地址: https://gitcode.com/gh_mirrors/cargo1/cargo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考