9 个版本 (4 个破坏性更新)
0.5.3 | 2019 年 6 月 16 日 |
---|---|
0.5.2 | 2019 年 6 月 16 日 |
0.5.1 | 2018 年 12 月 30 日 |
0.4.1 | 2018 年 12 月 26 日 |
0.1.0 | 2018 年 12 月 23 日 |
#428 in Cargo 插件
40 每月下载量
在 jito-solana-account-decod… 中使用
26KB
539 行
cargo-publish-all
自行承担风险。
此工具扫描当前工作区,将每个包都构建成已发布的样子,并将尚未在 crates.io 上存在的包发布出去。如果验证失败,它将停止。
验证分为两个阶段
- 包 & 规范化所有包;将即将发布的 crate 的版本依赖替换为路径,并尝试构建每个包。
- 如果第一次遍历成功,则按正确顺序发布所有包。这将在第二次验证,理论上不应该失败。然而,安全总是更好的。
如果仅在第二个阶段检测到错误(不应该发生),则一半的工作区将被发布(并成功构建),另一半则不会在 crates.io
上。这肯定比在 crates.io 上有损坏的包要好。
用法
cargo install cargo-publish-all
cargo-publish-all
请注意,您需要通过输入 "y" 确认 "发布计划"。如果您不希望这样做,请指定 --yes
cargo-publish-all --yes
由于此工具仍处于早期阶段,它可能不会始终按预期工作。因此,您可以使用 --dry-run
确保它按预期运行,而不向 crates.io 推送
cargo-publish-all --dry-run
注意: 这对于第二个 crate 总是会失败,这是一个已知问题。尽管如此,您仍然可以看到它将执行的操作。这将在未来得到改进。
显示更多输出
默认情况下,cargo-publish-all
会隐藏所有输出,只显示错误和高层次的状态消息,因为输出将变得相当大。您可以使用 --verbose
标志更改此设置。
Docker
有一个用于 cargo-publish-all
的 Docker 镜像。您可以使用以下方式访问
registry.gitlab.com/torkleyy/cargo-publish-all
GitLab CI
请注意,您应该定义一个环境变量 CRATES_IO_TOKEN
(并保护它!)。
crates.io:
image: registry.gitlab.com/torkleyy/cargo-publish-all:latest
stage: deploy
script:
- cargo-publish-all --token $CRATES_IO_TOKEN --yes
only:
refs:
- master
这将允许所有具有写入权限的人触发向 crates.io 的推送。 请注意,秘密变量未进行掩码,可以通过合并更改后的脚本泄露。
帮助
cargo-publish-all --help
cargo-publish-all 0.2
Thomas Schaller <torkleyy@gmail.com>
Upload workspace packages to crates.io
USAGE:
cargo-publish-all [FLAGS] [OPTIONS]
FLAGS:
--allow-dirty Allow dirty working directories to be packaged
--dry-run Perform all checks without uploading
-h, --help Prints help information
--manifest-path Path to Cargo.toml
-V, --version Prints version information
--verbose Show more output
--yes Confirm publishing without interaction
OPTIONS:
--token <TOKEN> Token to use when uploading
示例输出
$ cargo-publish-all
Resolving workspace
Fetching crates.io versions
Skipping crate `nitric-lock-internals`, version already published
Skipping crate `nitric`, version already published
Verifying workspace
Verifying nitric-lock-internals
Verifying nitric-lock
Verifying nitric
Summary:
nitric-lock-internals: 0.0.1 (skipped)
nitric-lock: 0.0.1
nitric: 0.0.1 (skipped)
Continue? [y/N] y
Publishing workspace
Skipping nitric-lock-internals
Publishing nitric-lock
Skipping nitric
行为
高级行为可以描述如下
发布当前工作区中所有未发布的crate,前提是当从crates.io拉取时,工作区的所有成员都会构建。
这意味着您可以在CI上简单地运行它,一旦版本号增加,它就会发布crate。
示例案例
注意:以下属性应在未来进行测试
- 再次执行
cargo-publish-all
应该没有影响 cargo-publish-all
对于单crate工作区等同于cargo publish
待办事项
- 适当的日志记录,不要使用
println!
- 展示版本是如何增加的 (
0.1.2
->0.1.3
)- 增加旧版本(如何显示?)
- 尝试将其合并到Cargo中
- 可能过于主观?
cargo-publish-all
是幂等的,cargo publish
则不是
依赖
~65MB
~1.5M SLoC