4 个版本
新增 0.3.2+27.3 | 2024 年 8 月 18 日 |
---|---|
0.3.1+27.2 | 2024 年 7 月 24 日 |
0.3.0+27.1 | 2024 年 6 月 15 日 |
0.2.0+27.1 |
|
0.1.0+27.0 | 2024 年 6 月 2 日 |
#605 in 构建工具
每月下载 361 次
27KB
446 代码行
dlprotoc: 为 Cargo 构建脚本下载 protoc
此 crate 从 Google 的 protobuf Github 仓库下载 官方二进制发布版本的 protoc
,验证 SHA256 哈希,然后提取它。它打算用于带有 Prost 或 Tonic 的 Cargo 构建脚本 (build.rs
) 中,这样您就不需要安装 protoc
来构建使用 Protocol Buffers 的 Rust 项目。
这修复了如下 Cargo 错误
error: failed to run custom build command for `example v0.1.0 (/home/user/example)`
Caused by:
process didn't exit successfully: `target/debug/build/example-3f5090329e3c4e4b/build-script-build` (exit status: 1)
--- stderr
Error: Custom { kind: NotFound, error: "Could not find `protoc`. If `protoc` is installed, try setting the `PROTOC` environment variable to the path of the `protoc` binary. To install it on Debian, run `apt-get install protobuf-compiler`. It is also available at https://github.com/protocolbuffers/protobuf/releases For more information: https://docs.rs/prost-build/#sourcing-protoc" }
另一种选择是 protobuf-src crate,它从源代码编译 protoc。不幸的是,编译 protoc 很慢(在我的 2020 年 4 核 Intel 桌面上大约需要 2 分钟),并且需要 cmake
和 C++ 编译器。此 crate 只需要 Rust。
快速开始
在 build.rs
中添加 dlprotoc
,在调用 dlprotoc::download_protoc()
之前调用 compile_protos(...)
fn main() -> Result<(), Box<dyn std::error::Error>> {
dlprotoc::download_protoc()?;
prost_build::compile_protos(&["src/example.proto"], &["src/"])?;
Ok(())
}
有关完整示例,请参阅 protoc-cargo-example-rs.
信任/安全
这会在 Github 上下载预编译的可执行文件,这是相当危险的。您需要信任
- 源代码中嵌入的 SHA256 哈希用于非恶意二进制文件的 protoc。这些哈希来自 Google 的 Github 发布版。
- 此 crate 没有错误,并且不会运行之前未见过的 protoc 二进制文件。
- Crates.io:必须为您提供非恶意版本的此 crate。
- Google Protobuf 维护者:将非恶意二进制文件上传到 Github。
更新到新的 protoc 版本(对于维护者)
- 运行:
cargo run -- (版本例如 27.0)
- 将打印的结构体定义追加到
KNOWN_VERSIONS
数组中,位于lib.rs
。 - 运行
make
以执行所有检查。 - 更新
Cargo.toml
中的版本以包含 protoc 的版本。例如:"0.1.0+27.0"
。 - 发送一个拉取请求。
发布软件包(维护者操作)
- 测试:
make && cargo publish --dry-run
- 发布到 crates.io:
cargo publish
- 标记发布:
(VERSION=$(cargo pkgid | sed 's/.*@//'); git tag -a "v$VERSION" -m "发布版本 $VERSION")
- 推送标签:
git push --tags
- 从现有的标签在 Github 上创建发布:前往 标签,点击 "..." 菜单,选择创建发布。
依赖
~5–20MB
~333K SLoC