aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-daemon
diff options
context:
space:
mode:
authorRemo Senekowitsch <remo@buenzli.dev>2024-06-12 17:45:38 +0200
committerGitHub <noreply@github.com>2024-06-12 16:45:38 +0100
commit9fa223eaaf0eda4e5f76621dc6d457417afb8b54 (patch)
tree8327137d550f5aacdd6c05bc89eed3afca3387dd /crates/atuin-daemon
parentchore: remove unnecessary proto import (#2120) (diff)
downloadatuin-9fa223eaaf0eda4e5f76621dc6d457417afb8b54.zip
chore(build): compile protobufs with protox (#2122)
* chore(build): compile protobufs with protox protox is a pure-rust implementation of the protobuf compiler. Therefore, it can be managed by cargo. This removes the implicit dependency on protoc being available in the environment for the build. * fix(build): replace copypasta in build script The paths passed to `compile` aren't actually used by the build. `skip_protoc_run` prevents that. That's why a clean build succeeds even with this mistake. However, the paths are passed to a `cargo:rerun-if-changed` directive. So this mistake would've caused a failed incremental build if the protobuf definitions were changed.
Diffstat (limited to 'crates/atuin-daemon')
-rw-r--r--crates/atuin-daemon/Cargo.toml1
-rw-r--r--crates/atuin-daemon/build.rs19
2 files changed, 17 insertions, 3 deletions
diff --git a/crates/atuin-daemon/Cargo.toml b/crates/atuin-daemon/Cargo.toml
index 3133bcdf..0f3ccb1a 100644
--- a/crates/atuin-daemon/Cargo.toml
+++ b/crates/atuin-daemon/Cargo.toml
@@ -38,4 +38,5 @@ rand.workspace = true
listenfd = "1.0.1"
[build-dependencies]
+protox = "0.6.0"
tonic-build = "0.11"
diff --git a/crates/atuin-daemon/build.rs b/crates/atuin-daemon/build.rs
index 95118f6f..37721249 100644
--- a/crates/atuin-daemon/build.rs
+++ b/crates/atuin-daemon/build.rs
@@ -1,4 +1,17 @@
-fn main() -> Result<(), Box<dyn std::error::Error>> {
- tonic_build::compile_protos("./proto/history.proto")?;
- Ok(())
+use std::{env, fs, path::PathBuf};
+
+use protox::prost::Message;
+
+fn main() -> std::io::Result<()> {
+ let file_descriptors = protox::compile(["history.proto"], ["./proto/"]).unwrap();
+
+ let file_descriptor_path = PathBuf::from(env::var_os("OUT_DIR").expect("OUT_DIR not set"))
+ .join("file_descriptor_set.bin");
+ fs::write(&file_descriptor_path, file_descriptors.encode_to_vec()).unwrap();
+
+ tonic_build::configure()
+ .build_server(true)
+ .file_descriptor_set_path(&file_descriptor_path)
+ .skip_protoc_run()
+ .compile(&["history.proto"], &["."])
}