dbk-rust-gates
Installation
SKILL.md
Rust 提交/推送门禁
Rust 项目(以存在 Cargo.toml 为准)的硬性检查顺序。fmt / clippy 命令原样执行。test 保留 --all-features,按影响范围选择包、target 和用例,不默认执行全量测试。
第 0 步:判定本次改动是否涉及 Rust
commit 前检查 git status --porcelain --untracked-files=all,包含已暂存、未暂存和未跟踪文件。push 前无论工作区是否干净,都先确定分支累计变更:
- 优先使用
origin/main,不存在时使用本地main,记录所用引用及 SHA。引用已知过期时先更新。两者都不存在或无法找到共同祖先时停止并询问基线,不用当前分支的 upstream 或HEAD^代替。 - 用
git merge-base <main-ref> HEAD得到base,用git diff --name-status --find-renames <base> HEAD和对应 diff 检查本分支全部变更,不只检查最后一次提交或尚未推送的提交。 - 合并工作区状态中的改动路径检查影响,重命名同时检查新旧路径,删除也算变更。未提交改动不能作为待推送 HEAD 已通过测试的证据,push 前必须确认测试对应待推送代码状态。
在对应范围中筛选:
*.rs(任意路径:src/源码、build.rs、examples/、tests/、benches/)→ Rust 源码改动Cargo.toml/Cargo.lock(任意层级,workspace 子 crate 也算)→ 清单/依赖改动
测试夹具、快照、生成器输入、.cargo/、工具链或构建配置虽非 .rs,只要影响 Rust 构建或测试也需纳入。只有确认整个范围均不影响 Rust 的纯文档等改动,才跳过全部门禁。