#impact #downstream #before #publishing #software #reliable #publish

crusadertest1

在发布前测试 Rust crate 变更对下游用户的影响

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2015年8月2日

#5 in #downstream

每月21次下载
crusadertest2 中使用

1KB

Cargo Crusader

啊哈,Rust crate 作者!Rust 作为“史上最可靠的软件平台”的声誉之战已经打响,没有人能够免责。亲爱的 Rustians,Rust 的未来掌握在你的手中。

加入 Cargo Crusade 并将 负责任的 API 进化理论 带给那些不信者。

Cargo Crusader 是一个工具,帮助 crate 作者在将 crate 发布到 crates.io 之前评估未来 API 变更对 crate 下游用户的影响。

如何使用?

当你从已发布的 crate 的源目录运行 cargo-crusader 时,Crusader 会向 crates.io 请求所有反向依赖项 - 依赖你的已发布 crates。然后它会下载并构建每个依赖项:首先针对当前已发布的 crate,然后针对你的本地工作进度(即你将要发布的下一个版本)。然后它会报告行为差异。

入门指南

重要安全警告:此程序执行从互联网下载的任意不受信任的代码。强烈建议在运行之前采取自己的沙箱隔离措施。

首先,下载并构建 Cargo Crusader,并将 cargo-crusader 命令放入您的 PATH 环境变量中

$ git clone https://github.com/brson/cargo-crusader
$ cd cargo-crusader
$ cargo build --release
$ export PATH=$PATH:`pwd`/target/release/

现在切换到您的源目录并运行 cargo-crusader

$ cargo-crusader
crusader: downloading reverse deps for hyper
crusader: 10 reverse deps
crusader: testing crate aloft
crusader: testing crate austenite
crusader: result 1 of 10, aloft 0.3.1: broken
crusader: testing crate bare
crusader: result 2 of 10, austenite 0.0.1: broken
crusader: testing crate catapult
crusader: result 3 of 10, bare 0.0.1: broken
crusader: testing crate chan
crusader: result 4 of 10, catapult 0.1.2: broken
crusader: testing crate chatbot
crusader: result 5 of 10, chan 0.1.14: passed
crusader: testing crate click_and_load
crusader: result 6 of 10, chatbot 0.2.2: regressed
crusader: testing crate coinbaser
crusader: result 7 of 10, click_and_load 0.0.1: broken
crusader: testing crate doapi
crusader: result 8 of 10, coinbaser 0.1.0: regressed
crusader: testing crate ease
crusader: result 9 of 10, doapi 0.1.0: broken
crusader: result 10 of 10, ease 0.2.1: regressed

passed: 1
regressed: 3
broken: 6
error: 0

full report: ./crusader-report.html

完整运行将花费相当长的时间。完成后,它会打印一个摘要,并生成一个包含完整结果的 HTML 文件,包括每个测试的编译器输出。

测试结果有四种可能的状态:“通过”,如果反向依赖项在升级前后都构建成功;“退化”,如果它在升级前构建成功但在升级后失败;“损坏”,如果它甚至在升级前就无法构建;“错误”,对于 Crusader 的内部错误。

未来改进

目前,Crusader 会覆盖反向依赖项,即使它们请求的版本与你的工作进度不兼容。Crusader 可能会首先验证 WIP 是否符合 semver 升级。

测试上游也是如此 - Crusader 可以请求所有依赖项的 WIP 分支,然后覆盖你的构建以查看即将到来的更改是否会破坏你的 crate。

沙箱隔离。

许可证

MIT/Apache-2.0 是 Rust 项目和 Cargo Crusade 的官方许可证。

无运行时依赖