From 52166799bd4a7743253ba3ccddbba3986f4e5fe9 Mon Sep 17 00:00:00 2001 From: Arseny Sher Date: Mon, 28 Nov 2022 19:08:28 +0400 Subject: [PATCH] Put .proto compilation result to $OUT_DIR/ Sometimes CI build fails with error: couldn't read storage_broker/src/../proto/storage_broker.rs: No such file or directory (os error 2) --> storage_broker/src/lib.rs:14:5 | 14 | include!("../proto/storage_broker.rs"); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The root cause is not clear, but it looks like interference with cachepot. Per cargo docs, build scripts shouldn't output to anywhere but OUT_DIR; let's follow this and see if it helps. --- storage_broker/build.rs | 12 ++++++++---- storage_broker/src/lib.rs | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/storage_broker/build.rs b/storage_broker/build.rs index 244c7217de..08dadeacd5 100644 --- a/storage_broker/build.rs +++ b/storage_broker/build.rs @@ -1,7 +1,11 @@ fn main() -> Result<(), Box> { - // Generate code to deterministic location to make finding it easier. - tonic_build::configure() - .out_dir("proto/") // put generated code to proto/ - .compile(&["proto/broker.proto"], &["proto/"])?; + // Generate rust code from .proto protobuf. + // + // Note: we previously tried to use deterministic location at proto/ for + // easy location, but apparently interference with cachepot sometimes fails + // the build then. Anyway, per cargo docs build script shouldn't output to + // anywhere but $OUT_DIR. + tonic_build::compile_protos("proto/broker.proto") + .unwrap_or_else(|e| panic!("failed to compile protos {:?}", e)); Ok(()) } diff --git a/storage_broker/src/lib.rs b/storage_broker/src/lib.rs index 39e72ca721..f25acdfcb3 100644 --- a/storage_broker/src/lib.rs +++ b/storage_broker/src/lib.rs @@ -11,7 +11,7 @@ use proto::{ // Code generated by protobuf. pub mod proto { - include!("../proto/storage_broker.rs"); + tonic::include_proto!("storage_broker"); } pub mod metrics;