From 168803d944fb5c8501a207e2cc45033abd7becf3 Mon Sep 17 00:00:00 2001 From: iamvigneshwars Date: Thu, 6 Feb 2025 11:35:05 +0000 Subject: [PATCH 1/6] feat(backend): add telemetry library --- backend/Cargo.lock | 17 +++++ backend/Cargo.toml | 9 ++- backend/telemetry/Cargo.toml | 22 +++++++ backend/telemetry/build.rs | 3 + backend/telemetry/src/lib.rs | 124 +++++++++++++++++++++++++++++++++++ 5 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 backend/telemetry/Cargo.toml create mode 100644 backend/telemetry/build.rs create mode 100644 backend/telemetry/src/lib.rs diff --git a/backend/Cargo.lock b/backend/Cargo.lock index d914ece2..947fb6d0 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -3461,6 +3461,23 @@ dependencies = [ "syn 2.0.98", ] +[[package]] +name = "telemetry" +version = "0.1.0" +dependencies = [ + "built", + "clap", + "opentelemetry", + "opentelemetry-otlp", + "opentelemetry-semantic-conventions", + "opentelemetry_sdk", + "thiserror 2.0.11", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", + "url", +] + [[package]] name = "tempfile" version = "3.16.0" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 2e61a997..715ee3c5 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,9 +1,15 @@ [workspace] -members = ["argo-workflows-openapi", "graph-proxy", "sessionspaces"] +members = [ + "argo-workflows-openapi", + "graph-proxy", + "sessionspaces", + "telemetry", +] resolver = "2" [workspace.dependencies] anyhow = { version = "1.0.95" } +built = { version = "0.7.5" } clap = { version = "4.5.26", features = ["derive", "env"] } chrono = { version = "0.4.39" } derive_more = { version = "1.0.0", features = [ @@ -20,6 +26,7 @@ reqwest = { version = "0.12.9", default-features = false, features = [ ] } serde = { version = "1.0.217", features = ["derive"] } serde_json = { version = "1.0.137" } +thiserror = { version = "2.0.11" } tracing = { version = "0.1.41" } tokio = { version = "1.43.0", features = [ "macros", diff --git a/backend/telemetry/Cargo.toml b/backend/telemetry/Cargo.toml new file mode 100644 index 00000000..27bdb24b --- /dev/null +++ b/backend/telemetry/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "telemetry" +build = "build.rs" +version = "0.1.0" +edition = "2021" +license = "Apache-2.0" +description = "A telemetry library for collecting and exporting metrics and traces." + +[dependencies] +clap = { workspace = true } +opentelemetry = { version = "0.27.1" } +opentelemetry-otlp = { version = "0.27.0", features = ["metrics"] } +opentelemetry-semantic-conventions = "0.27.0" +opentelemetry_sdk = { version = "0.27.1", features = ["rt-tokio"] } +thiserror = { workspace = true } +tracing = { workspace = true } +tracing-opentelemetry = { version = "0.28.0" } +tracing-subscriber = { version = "0.3.19" } +url = { workspace = true } + +[build-dependencies] +built = { workspace = true } diff --git a/backend/telemetry/build.rs b/backend/telemetry/build.rs new file mode 100644 index 00000000..fa809bfd --- /dev/null +++ b/backend/telemetry/build.rs @@ -0,0 +1,3 @@ +fn main() { + built::write_built_file().unwrap(); +} diff --git a/backend/telemetry/src/lib.rs b/backend/telemetry/src/lib.rs new file mode 100644 index 00000000..48782d90 --- /dev/null +++ b/backend/telemetry/src/lib.rs @@ -0,0 +1,124 @@ +use opentelemetry::{trace::TracerProvider as _, KeyValue}; +use opentelemetry_otlp::{MetricExporter, SpanExporter, WithExportConfig}; +use opentelemetry_sdk::{ + metrics::{PeriodicReader, SdkMeterProvider}, + propagation::TraceContextPropagator, + runtime, + trace::TracerProvider, + Resource, +}; +use opentelemetry_semantic_conventions::resource::{SERVICE_NAME, SERVICE_VERSION}; +use thiserror::Error; +use tracing::{level_filters::LevelFilter, Level}; +use tracing_opentelemetry::{MetricsLayer, OpenTelemetryLayer}; +use tracing_subscriber::layer::SubscriberExt; +use tracing_subscriber::util::SubscriberInitExt; +use url::Url; + +/// Provides crate information from the time it was built +mod built_info { + include!(concat!(env!("OUT_DIR"), "/built.rs")); +} + +#[derive(Debug, Error)] +pub enum TelemetryError { + #[error("Metric error: {0}")] + MetricError(#[from] opentelemetry_sdk::metrics::MetricError), + #[error("Trace error: {0}")] + TraceError(#[from] opentelemetry::trace::TraceError), + #[error("Tracing Subscriber initialization error: {0}")] + TracingSubscriberInitError(#[from] tracing_subscriber::util::TryInitError), +} + +/// Encapsulates a [`TracerProvider`] and [`SdkMeterProvider`] to ensure metrics & trace streams +/// are shutdown and flushed on drop +#[allow(clippy::missing_docs_in_private_items)] +pub struct OtelGuard { + tracer_provider: Option, + meter_provider: Option, +} + +impl Drop for OtelGuard { + fn drop(&mut self) { + if let Some(tracer_provider) = &self.tracer_provider { + if let Err(err) = tracer_provider.shutdown() { + eprintln!("{}", TelemetryError::TraceError(err)); + } + } + if let Some(meter_provider) = &self.meter_provider { + if let Err(err) = meter_provider.shutdown() { + eprintln!("{}", TelemetryError::MetricError(err)); + } + } + } +} + +#[derive(clap::Parser, Clone, Debug)] +pub struct TelemetryConfig { + /// The endpoint to send OTLP metrics to + #[arg(short, long, env = "METRICS_ENDPOINT")] + pub metrics_endpoint: Option, + /// The endpoint to send OTLP traces to + #[arg(short, long, env = "TRACING_ENDPOINT")] + pub tracing_endpoint: Option, + /// The minimum telemetry level + #[arg(short, long, env="TELEMETRY_LEVEL", default_value_t=Level::INFO)] + pub telemetry_level: Level, +} + +/// Sets up Logging & Tracing using opentelemetry if available +pub fn setup_telemetry(config: TelemetryConfig) -> Result { + let level_filter = LevelFilter::from_level(config.telemetry_level); + let log_layer = tracing_subscriber::fmt::layer(); + + let otel_resources = Resource::new([ + KeyValue::new(SERVICE_NAME, built_info::PKG_NAME), + KeyValue::new(SERVICE_VERSION, built_info::PKG_VERSION), + ]); + + let (meter_provider, metrics_layer) = if let Some(metrics_endpoint) = config.metrics_endpoint { + let exporter = MetricExporter::builder() + .with_tonic() + .with_endpoint(metrics_endpoint) + .build()?; + let meter_provider = SdkMeterProvider::builder() + .with_reader(PeriodicReader::builder(exporter, runtime::Tokio).build()) + .with_resource(otel_resources.clone()) + .build(); + ( + Some(meter_provider.clone()), + Some(MetricsLayer::new(meter_provider)), + ) + } else { + (None, None) + }; + + let (tracer_provider, tracing_layer) = if let Some(tracing_endpoint) = config.tracing_endpoint { + let exporter = SpanExporter::builder() + .with_tonic() + .with_endpoint(tracing_endpoint) + .build()?; + let tracer_provider = TracerProvider::builder() + .with_batch_exporter(exporter, runtime::Tokio) + .with_resource(otel_resources) + .build(); + let tracer = tracer_provider.tracer(built_info::PKG_NAME); + (Some(tracer_provider), Some(OpenTelemetryLayer::new(tracer))) + } else { + (None, None) + }; + + let otel_guard = OtelGuard { + tracer_provider, + meter_provider, + }; + + opentelemetry::global::set_text_map_propagator(TraceContextPropagator::default()); + tracing_subscriber::Registry::default() + .with(level_filter) + .with(log_layer) + .with(metrics_layer) + .with(tracing_layer) + .try_init()?; + Ok(otel_guard) +} From 27a19895136062bb1385d0f47cda1390394c07e6 Mon Sep 17 00:00:00 2001 From: iamvigneshwars Date: Thu, 6 Feb 2025 11:50:52 +0000 Subject: [PATCH 2/6] fix(graph-proxy): use telemetry library --- backend/Cargo.lock | 8 +- backend/graph-proxy/Cargo.toml | 12 +-- backend/graph-proxy/build.rs | 3 - backend/graph-proxy/src/main.rs | 30 +++----- backend/graph-proxy/src/telemetry.rs | 111 --------------------------- backend/telemetry/Cargo.toml | 3 +- 6 files changed, 16 insertions(+), 151 deletions(-) delete mode 100644 backend/graph-proxy/build.rs delete mode 100644 backend/graph-proxy/src/telemetry.rs diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 947fb6d0..7c316a10 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -1129,7 +1129,6 @@ dependencies = [ "async-graphql-axum", "axum 0.8.1", "axum-extra", - "built", "chrono", "clap", "derive_more", @@ -1137,20 +1136,15 @@ dependencies = [ "lazy_static", "mime_guess", "mockito", - "opentelemetry", - "opentelemetry-otlp", - "opentelemetry-semantic-conventions", - "opentelemetry_sdk", "regex", "reqwest", "serde", "serde_json", + "telemetry", "thiserror 2.0.11", "tokio", "tower-http", "tracing", - "tracing-opentelemetry", - "tracing-subscriber", "url", ] diff --git a/backend/graph-proxy/Cargo.toml b/backend/graph-proxy/Cargo.toml index 94a9024f..10cef0ad 100644 --- a/backend/graph-proxy/Cargo.toml +++ b/backend/graph-proxy/Cargo.toml @@ -18,24 +18,16 @@ derive_more = { workspace = true } dotenvy = { workspace = true } lazy_static = { version = "1.5.0" } mime_guess = "2.0.5" -opentelemetry = { version = "0.27.1" } -opentelemetry-otlp = { version = "0.27.0", features = ["metrics"] } -opentelemetry-semantic-conventions = "0.27.0" -opentelemetry_sdk = { version = "0.27.1", features = ["rt-tokio"] } regex = "1.11.1" reqwest = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } -thiserror = { version = "2.0.11" } +thiserror = { workspace = true } +telemetry = { path = "../telemetry" } tokio = { workspace = true } tower-http = { version = "0.6.2", features = ["cors"] } tracing = { workspace = true } -tracing-opentelemetry = { version = "0.28.0" } -tracing-subscriber = { workspace = true } url = { workspace = true } [dev-dependencies] mockito = "1.6.1" - -[build-dependencies] -built = { version = "0.7.5" } diff --git a/backend/graph-proxy/build.rs b/backend/graph-proxy/build.rs deleted file mode 100644 index fa809bfd..00000000 --- a/backend/graph-proxy/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - built::write_built_file().unwrap(); -} diff --git a/backend/graph-proxy/src/main.rs b/backend/graph-proxy/src/main.rs index 021e4d3b..3f41d08a 100644 --- a/backend/graph-proxy/src/main.rs +++ b/backend/graph-proxy/src/main.rs @@ -5,8 +5,6 @@ /// GraphQL resolvers mod graphql; -/// OpenTelemetry setup and configuration -mod telemetry; use async_graphql::{http::GraphiQLSource, SDLExportOptions}; use axum::{response::Html, routing::get, Router}; @@ -20,7 +18,7 @@ use std::{ net::{IpAddr, Ipv4Addr, SocketAddr}, path::PathBuf, }; -use telemetry::setup_telemetry; +use telemetry::{setup_telemetry, TelemetryConfig}; use tokio::net::TcpListener; use tower_http::cors::{AllowOrigin, CorsLayer}; use tracing::{info, instrument, Level}; @@ -51,15 +49,9 @@ struct ServeArgs { /// The endpoint at which the GraphQL API should be served #[arg(long, env = "PREFIX_PATH", default_value = "/")] prefix_path: String, - /// The endpoint to send OTLP metrics to - #[arg(short, long, env = "METRICS_ENDPOINT")] - metrics_endpoint: Option, - /// The endpoint to send OTLP traces to - #[arg(short, long, env = "TRACING_ENDPOINT")] - tracing_endpoint: Option, - /// The minimum telemetry level - #[arg(short, long, env="TELEMETRY_LEVEL", default_value_t=Level::INFO)] - telemetry_level: Level, + /// Args to setup telemetry + #[command(flatten)] + telemetry_config: TelemetryConfig, /// Regexes of Cross Origin Resource Sharing (CORS) Origins to allow #[arg(long, env="CORS_ALLOW", value_delimiter=' ', num_args=1..)] cors_allow: Option>, @@ -84,12 +76,7 @@ async fn main() { match args { Cli::Serve(args) => { - let _otlp_guard = setup_telemetry( - args.metrics_endpoint.clone(), - args.tracing_endpoint.clone(), - args.telemetry_level, - ) - .unwrap(); + let _otlp_guard = setup_telemetry(args.telemetry_config.clone()).unwrap(); info!(?args, "Starting GraphQL Server"); let schema = root_schema_builder() .data(ArgoServerUrl(args.argo_server_url)) @@ -98,7 +85,12 @@ async fn main() { serve(router, args.host, args.port).await.unwrap(); } Cli::Schema(args) => { - setup_telemetry(None, None, Level::INFO).unwrap(); + setup_telemetry(TelemetryConfig { + metrics_endpoint: None, + tracing_endpoint: None, + telemetry_level: Level::INFO, + }) + .unwrap(); info!(?args, "Generating GraphQL schema"); let schema = root_schema_builder().finish(); let schema_string = schema.sdl_with_options(SDLExportOptions::new().federation()); diff --git a/backend/graph-proxy/src/telemetry.rs b/backend/graph-proxy/src/telemetry.rs deleted file mode 100644 index 808c7edd..00000000 --- a/backend/graph-proxy/src/telemetry.rs +++ /dev/null @@ -1,111 +0,0 @@ -use opentelemetry::{trace::TracerProvider as _, KeyValue}; -use opentelemetry_otlp::{MetricExporter, SpanExporter, WithExportConfig}; -use opentelemetry_sdk::{ - metrics::{PeriodicReader, SdkMeterProvider}, - propagation::TraceContextPropagator, - runtime, - trace::TracerProvider, - Resource, -}; -use opentelemetry_semantic_conventions::resource::{SERVICE_NAME, SERVICE_VERSION}; -use tracing::{level_filters::LevelFilter, Level}; -use tracing_opentelemetry::{MetricsLayer, OpenTelemetryLayer}; -use tracing_subscriber::layer::SubscriberExt; -use tracing_subscriber::util::SubscriberInitExt; -use url::Url; - -/// Provides crate information from the time it was built -mod built_info { - include!(concat!(env!("OUT_DIR"), "/built.rs")); -} - -/// Encapsulates a [`TracerProvider`] and [`SdkMeterProvider`] to ensure metrics & trace streams -/// are shutdown and flushed on drop -#[allow(clippy::missing_docs_in_private_items)] -pub struct OtelGuard { - tracer_provider: Option, - meter_provider: Option, -} - -impl Drop for OtelGuard { - fn drop(&mut self) { - if let Some(tracer_provider) = &self.tracer_provider { - if let Err(err) = tracer_provider.shutdown() { - eprintln!("{err:?}"); - } - } - if let Some(meter_provider) = &self.meter_provider { - if let Err(err) = meter_provider.shutdown() { - eprintln!("{err}:?"); - } - } - } -} - -/// Sets up Logging & Tracing using opentelemetry if available -pub fn setup_telemetry( - metrics_endpoint: Option, - tracing_endpoint: Option, - telemetry_level: Level, -) -> anyhow::Result { - let level_filter = LevelFilter::from_level(telemetry_level); - let log_layer = tracing_subscriber::fmt::layer(); - - let otel_resources = Resource::new([ - KeyValue::new(SERVICE_NAME, built_info::PKG_NAME), - KeyValue::new(SERVICE_VERSION, built_info::PKG_VERSION), - ]); - - let (meter_provider, metrics_layer) = if let Some(metrics_endpoint) = metrics_endpoint { - let meter_provider = SdkMeterProvider::builder() - .with_reader( - PeriodicReader::builder( - MetricExporter::builder() - .with_tonic() - .with_endpoint(metrics_endpoint) - .build()?, - runtime::Tokio, - ) - .build(), - ) - .with_resource(otel_resources.clone()) - .build(); - ( - Some(meter_provider.clone()), - Some(MetricsLayer::new(meter_provider)), - ) - } else { - (None, None) - }; - - let (tracer_provider, tracing_layer) = if let Some(tracing_endpoint) = tracing_endpoint { - let tracer_provider = TracerProvider::builder() - .with_batch_exporter( - SpanExporter::builder() - .with_tonic() - .with_endpoint(tracing_endpoint) - .build()?, - runtime::Tokio, - ) - .with_resource(otel_resources) - .build(); - let tracer = tracer_provider.tracer(built_info::PKG_NAME); - (Some(tracer_provider), Some(OpenTelemetryLayer::new(tracer))) - } else { - (None, None) - }; - - let otel_guard = OtelGuard { - tracer_provider, - meter_provider, - }; - - opentelemetry::global::set_text_map_propagator(TraceContextPropagator::default()); - tracing_subscriber::Registry::default() - .with(level_filter) - .with(log_layer) - .with(metrics_layer) - .with(tracing_layer) - .try_init()?; - Ok(otel_guard) -} diff --git a/backend/telemetry/Cargo.toml b/backend/telemetry/Cargo.toml index 27bdb24b..ad3f16fa 100644 --- a/backend/telemetry/Cargo.toml +++ b/backend/telemetry/Cargo.toml @@ -19,4 +19,5 @@ tracing-subscriber = { version = "0.3.19" } url = { workspace = true } [build-dependencies] -built = { workspace = true } +built = { version = "0.7.5" } + From c2a7830fa068cee2406c2606e037b33c5c78ada0 Mon Sep 17 00:00:00 2001 From: iamvigneshwars Date: Thu, 6 Feb 2025 12:45:48 +0000 Subject: [PATCH 3/6] fix(graph-proxy): update Dockerfile for telemetry --- backend/Dockerfile.graph-proxy | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/backend/Dockerfile.graph-proxy b/backend/Dockerfile.graph-proxy index af7c179c..a981f359 100644 --- a/backend/Dockerfile.graph-proxy +++ b/backend/Dockerfile.graph-proxy @@ -12,20 +12,25 @@ COPY argo-workflows-openapi/build.rs argo-workflows-openapi/build.rs COPY argo-workflows-openapi/src/lib.rs argo-workflows-openapi/src/lib.rs COPY sessionspaces/Cargo.toml sessionspaces/Cargo.toml COPY graph-proxy/Cargo.toml graph-proxy/ +COPY telemetry/build.rs telemetry/Cargo.toml telemetry/ COPY Cargo.toml Cargo.lock ./ -RUN mkdir sessionspaces/src \ - && echo "fn main() {}" > sessionspaces/src/main.rs - RUN mkdir graph-proxy/src \ - && echo "fn main() {}" > graph-proxy/src/main.rs \ - && touch --date @0 graph-proxy/src/main.rs \ - && cargo build --release --package graph-proxy + && echo "fn main() {}" > graph-proxy/src/main.rs \ + && mkdir sessionspaces/src \ + && echo "fn main() {}" > sessionspaces/src/main.rs \ + && mkdir telemetry/src \ + && echo "fn prebuild() {}" > telemetry/src/lib.rs + +RUN cargo build --release --package telemetry + +RUN touch --date @0 graph-proxy/src/main.rs \ + && cargo build --release --package graph-proxy COPY . . RUN touch graph-proxy/src/main.rs \ - && cargo auditable build --release --manifest-path graph-proxy/Cargo.toml + && cargo auditable build --release --package graph-proxy FROM gcr.io/distroless/cc-debian12@sha256:b7550f0b15838de14c564337eef2b804ba593ae55d81ca855421bd52f19bb480 AS deploy From fa7a87e439bcaa5ad135305305367867dd8d5597 Mon Sep 17 00:00:00 2001 From: iamvigneshwars Date: Thu, 6 Feb 2025 12:01:54 +0000 Subject: [PATCH 4/6] fix(sessionspaces): use telemetry library --- backend/Cargo.lock | 2 +- backend/sessionspaces/Cargo.toml | 2 +- backend/sessionspaces/src/main.rs | 11 +++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 7c316a10..ec4e044b 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -3026,11 +3026,11 @@ dependencies = [ "serde_json", "sqlx", "strum", + "telemetry", "time", "tokio", "tower 0.5.2", "tracing", - "tracing-subscriber", "url", "wiremock", ] diff --git a/backend/sessionspaces/Cargo.toml b/backend/sessionspaces/Cargo.toml index f2a3cb6c..7d222559 100644 --- a/backend/sessionspaces/Cargo.toml +++ b/backend/sessionspaces/Cargo.toml @@ -25,11 +25,11 @@ sqlx = { version = "0.8.3", features = [ "time", ] } strum = { version = "0.26.3", features = ["derive"] } +telemetry = { path = "../telemetry" } time = { version = "0.3.37" } tokio = { workspace = true } tower = { version = "0.5.2", features = ["limit", "util"] } tracing = { workspace = true } -tracing-subscriber = { workspace = true } url = { workspace = true } [dev-dependencies] diff --git a/backend/sessionspaces/src/main.rs b/backend/sessionspaces/src/main.rs index 371317c5..9c750f81 100644 --- a/backend/sessionspaces/src/main.rs +++ b/backend/sessionspaces/src/main.rs @@ -16,6 +16,7 @@ use ldap3::LdapConnAsync; use resources::{create_configmap, create_namespace, delete_namespace}; use sqlx::mysql::MySqlPoolOptions; use std::{collections::BTreeSet, time::Duration}; +use telemetry::{setup_telemetry, TelemetryConfig}; use tokio::time::interval; use tracing::{info, warn}; use url::Url; @@ -35,9 +36,9 @@ struct Cli { /// The maximum allowable k8s API requests per second #[clap(long, env, default_value = "10")] request_rate: Option, - /// The [`tracing::Level`] to log at - #[arg(long, env="LOG_LEVEL", default_value_t=tracing::Level::INFO)] - log_level: tracing::Level, + /// Args to setup telemetry + #[command(flatten)] + telemetry_config: TelemetryConfig, } #[tokio::main(flavor = "current_thread")] @@ -45,9 +46,7 @@ async fn main() { dotenvy::dotenv().ok(); let args = Cli::parse(); - tracing_subscriber::fmt() - .with_max_level(args.log_level) - .init(); + let _otlp_guard = setup_telemetry(args.telemetry_config).unwrap(); let ispyb_pool = MySqlPoolOptions::new() .connect(args.database_url.as_str()) From 4de847a75680ce57e070e5d3a1b6cb86da0cee4f Mon Sep 17 00:00:00 2001 From: iamvigneshwars Date: Thu, 6 Feb 2025 12:46:34 +0000 Subject: [PATCH 5/6] fix(sessionspaces): update Dockerfile for sessionspaces --- backend/Dockerfile.sessionspaces | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/backend/Dockerfile.sessionspaces b/backend/Dockerfile.sessionspaces index d7c9e211..fffff68a 100644 --- a/backend/Dockerfile.sessionspaces +++ b/backend/Dockerfile.sessionspaces @@ -9,21 +9,28 @@ RUN cargo install cargo-auditable COPY argo-workflows-openapi/Cargo.toml argo-workflows-openapi/Cargo.toml COPY graph-proxy/Cargo.toml graph-proxy/ COPY sessionspaces/Cargo.toml sessionspaces/ +COPY telemetry/build.rs telemetry/build.rs +COPY telemetry/Cargo.toml telemetry/Cargo.toml COPY Cargo.toml Cargo.lock ./ RUN mkdir argo-workflows-openapi/src \ && touch argo-workflows-openapi/src/lib.rs \ && mkdir graph-proxy/src \ - && echo "fn main() {}" > graph-proxy/src/main.rs + && echo "fn main() {}" > graph-proxy/src/main.rs \ + && mkdir sessionspaces/src \ + && echo "fn main() {}" > sessionspaces/src/main.rs \ + && mkdir telemetry/src \ + && echo "fn prebuild() {}" > telemetry/src/lib.rs -RUN mkdir sessionspaces/src && echo "fn main() {}" > sessionspaces/src/main.rs \ - && touch --date @0 sessionspaces/src/main.rs \ - && cargo build --release --package sessionspaces +RUN cargo build --release --package telemetry + +RUN touch --date @0 sessionspaces/src/main.rs \ + && cargo build --release --package sessionspaces COPY . . RUN touch sessionspaces/src/main.rs \ - && cargo auditable build --release --manifest-path sessionspaces/Cargo.toml + && cargo auditable build --release --package sessionspaces FROM gcr.io/distroless/cc-debian12@sha256:b7550f0b15838de14c564337eef2b804ba593ae55d81ca855421bd52f19bb480 AS deploy From 5de01315f9448d0633a0173d77d0eeff4418f4d7 Mon Sep 17 00:00:00 2001 From: iamvigneshwars Date: Thu, 6 Feb 2025 12:43:04 +0000 Subject: [PATCH 6/6] fix(CI): disable path dependencies in workspace lint --- backend/deny.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/deny.toml b/backend/deny.toml index 8bb217b0..6eed462e 100644 --- a/backend/deny.toml +++ b/backend/deny.toml @@ -22,5 +22,5 @@ license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }] [bans.workspace-dependencies] duplicates = "deny" -include-path-dependencies = true +include-path-dependencies = false unused = "deny"