#protoc #protobuf #prost #tonic #cargo-build #build-script #serialization

构建 dlprotoc

为 Cargo 构建下载 protoc 协议缓冲编译器

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 2024 年 6 月 15 日
0.1.0+27.0 2024 年 6 月 2 日

#605 in 构建工具

Download history 167/week @ 2024-05-31 45/week @ 2024-06-07 323/week @ 2024-06-14 16/week @ 2024-06-21 19/week @ 2024-07-05 7/week @ 2024-07-12 90/week @ 2024-07-19 123/week @ 2024-07-26 13/week @ 2024-08-02 9/week @ 2024-08-09 140/week @ 2024-08-16

每月下载 361

MIT 许可证

27KB
446 代码行

dlprotoc: 为 Cargo 构建脚本下载 protoc

Crates.io Version Docs.rs Link

此 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 版本(对于维护者)

  1. 运行: cargo run -- (版本例如 27.0)
  2. 将打印的结构体定义追加到 KNOWN_VERSIONS 数组中,位于 lib.rs
  3. 运行 make 以执行所有检查。
  4. 更新 Cargo.toml 中的版本以包含 protoc 的版本。例如:"0.1.0+27.0"
  5. 发送一个拉取请求。

发布软件包(维护者操作)

  1. 测试: make && cargo publish --dry-run
  2. 发布到 crates.io: cargo publish
  3. 标记发布: (VERSION=$(cargo pkgid | sed 's/.*@//'); git tag -a "v$VERSION" -m "发布版本 $VERSION")
  4. 推送标签: git push --tags
  5. 从现有的标签在 Github 上创建发布:前往 标签,点击 "..." 菜单,选择创建发布。

依赖

~5–20MB
~333K SLoC