diff --git a/.github/workflows/semantic.yml b/.github/workflows/semantic.yml index 9a8644b375e60..3fb45b8d322e1 100644 --- a/.github/workflows/semantic.yml +++ b/.github/workflows/semantic.yml @@ -254,3 +254,4 @@ jobs: website deps config provider + opentelemetry lib diff --git a/Cargo.lock b/Cargo.lock index 1534eb2c9f10c..469718eabd349 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7192,6 +7192,7 @@ version = "0.1.0" dependencies = [ "bytes 1.10.1", "chrono", + "glob", "hex", "ordered-float 4.6.0", "prost 0.12.6", diff --git a/lib/opentelemetry-proto/Cargo.toml b/lib/opentelemetry-proto/Cargo.toml index 76c7f9b98aeea..147d17b778067 100644 --- a/lib/opentelemetry-proto/Cargo.toml +++ b/lib/opentelemetry-proto/Cargo.toml @@ -8,6 +8,7 @@ publish = false [build-dependencies] prost-build.workspace = true tonic-build.workspace = true +glob.workspace = true [dependencies] bytes = { version = "1.10.1", default-features = false, features = ["serde"] } diff --git a/lib/opentelemetry-proto/build.rs b/lib/opentelemetry-proto/build.rs index 4e642ce8ab283..19fc3d533bbc7 100644 --- a/lib/opentelemetry-proto/build.rs +++ b/lib/opentelemetry-proto/build.rs @@ -1,22 +1,28 @@ -use std::io::Error; +use glob::glob; +use std::{env, io::Result, path::PathBuf}; + +fn main() -> Result<()> { + let proto_root = PathBuf::from("src/proto/opentelemetry-proto"); + let include_path = proto_root.clone(); + + let proto_paths: Vec<_> = glob(&format!("{}/**/*.proto", proto_root.display())) + .expect("Failed to read glob pattern") + .filter_map(|result| result.ok()) + .collect(); + + // Set up re-run triggers + for proto in &proto_paths { + println!("cargo:rerun-if-changed={}", proto.display()); + } + + let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); + let descriptor_path = out_dir.join("opentelemetry-proto.desc"); -fn main() -> Result<(), Error> { tonic_build::configure() .build_client(true) .build_server(true) - .compile( - &[ - "src/proto/opentelemetry-proto/opentelemetry/proto/common/v1/common.proto", - "src/proto/opentelemetry-proto/opentelemetry/proto/resource/v1/resource.proto", - "src/proto/opentelemetry-proto/opentelemetry/proto/logs/v1/logs.proto", - "src/proto/opentelemetry-proto/opentelemetry/proto/metrics/v1/metrics.proto", - "src/proto/opentelemetry-proto/opentelemetry/proto/trace/v1/trace.proto", - "src/proto/opentelemetry-proto/opentelemetry/proto/collector/trace/v1/trace_service.proto", - "src/proto/opentelemetry-proto/opentelemetry/proto/collector/logs/v1/logs_service.proto", - "src/proto/opentelemetry-proto/opentelemetry/proto/collector/metrics/v1/metrics_service.proto", - ], - &["src/proto/opentelemetry-proto"], - )?; + .file_descriptor_set_path(&descriptor_path) + .compile(&proto_paths, &[include_path])?; Ok(()) }