From fef8606843b36cf3d857b392ed2e6551e5e3a2d7 Mon Sep 17 00:00:00 2001 From: geofmureithi Date: Wed, 28 Jan 2026 20:35:04 +0300 Subject: [PATCH 1/2] chore: add DagCodec trait which handles entry and output in dag nodes --- apalis-sql/src/datetime.rs | 2 +- apalis-workflow/src/dag/decode.rs | 196 ++++++++++++++++++++++++++++ apalis-workflow/src/dag/error.rs | 2 +- apalis-workflow/src/dag/executor.rs | 3 +- apalis-workflow/src/dag/mod.rs | 35 ++--- apalis-workflow/src/dag/node.rs | 5 +- apalis-workflow/src/dag/service.rs | 43 +++--- apalis-workflow/src/sink.rs | 37 +++++- 8 files changed, 278 insertions(+), 45 deletions(-) create mode 100644 apalis-workflow/src/dag/decode.rs diff --git a/apalis-sql/src/datetime.rs b/apalis-sql/src/datetime.rs index ce762c1c..3f08b79b 100644 --- a/apalis-sql/src/datetime.rs +++ b/apalis-sql/src/datetime.rs @@ -74,7 +74,7 @@ impl DateTimeExt for DateTime { } fn from_unix_timestamp(secs: i64) -> Self { - DateTime::from_timestamp(secs, 0).unwrap_or_default() + Self::from_timestamp(secs, 0).unwrap_or_default() } } diff --git a/apalis-workflow/src/dag/decode.rs b/apalis-workflow/src/dag/decode.rs new file mode 100644 index 00000000..8233e14c --- /dev/null +++ b/apalis-workflow/src/dag/decode.rs @@ -0,0 +1,196 @@ +use apalis_core::backend::{BackendExt, codec::Codec}; + +/// An entry trait that handles the values of a fan-in/fanout entry +pub trait DagCodec: Sized { + /// The codec error + type Error; + + /// Encode the input into a Vec + fn encode(self) -> Result; + + /// Decode the previous input + fn decode(response: &B::Compact) -> Result; +} + +impl DagCodec for Vec +where + B: BackendExt, + B::Codec: Codec + + Codec, Compact = B::Compact, Error = Err> + + Codec, +{ + type Error = Err; + fn encode(self) -> Result>::Error> { + let mut result = Vec::new(); + for input in self { + result.push(B::Codec::encode(&input)?); + } + let compact = B::Codec::encode(&result)?; + Ok(compact) + } + + fn decode(response: &B::Compact) -> Result { + let decoded = B::Codec::decode(response)?; + Ok(decoded) + } +} + +macro_rules! impl_entry_for_tuple { + // First, implement for the first type to extract the error type + ($T1:ident) => { + impl DagCodec for ($T1,) + where + B: BackendExt, + B::Codec: Codec<($T1,), Compact = B::Compact, Error = Err> + Codec, Compact = B::Compact, Error = Err>, + { + type Error = Err; + + fn encode(self) -> Result { + let result = vec![B::Codec::encode(&self)?]; + let compact = B::Codec::encode(&result)?; + Ok(compact) + } + fn decode(response: &B::Compact) -> Result { + let decoded = B::Codec::decode(response)?; + Ok(decoded) + } + } + }; + + // For 2+ types, use the first type's error + ($T1:ident, $($T:ident),+) => { + impl DagCodec for ($T1, $($T),+) + where + B: BackendExt, + B::Codec: Codec<$T1, Compact = B::Compact, Error = Err> + Codec, Compact = B::Compact, Error = Err>, + $(B::Codec: Codec<$T, Compact = B::Compact, Error = Err>,)+ + // Ensure all errors are the same type as T1's error + $( + >::Error: Into<>::Error>, + )+ + { + type Error = >::Error; + + fn encode(self) -> Result { + #[allow(non_snake_case)] + let ($T1, $($T),+) = self; + + let mut result = vec![B::Codec::encode(&$T1)?]; + $( + result.push(B::Codec::encode(&$T).map_err(Into::into)?); + )+ + let compact = B::Codec::encode(&result)?; + Ok(compact) + } + + fn decode(response: &B::Compact) -> Result { + let decoded: Vec = B::Codec::decode(response)?; + // Count the number of types in the tuple + let expected_len = 1 $(+ {let _ = stringify!($T); 1})+; + if decoded.len() != expected_len { + panic!("Expected {} elements, got {}", expected_len, decoded.len()); + } + + let mut iter = decoded.into_iter(); + + #[allow(non_snake_case)] + let $T1 = B::Codec::decode(&iter.next().unwrap())?; + $( + #[allow(non_snake_case)] + let $T = B::Codec::decode(&iter.next().unwrap()).map_err(Into::into)?; + )+ + + Ok(($T1, $($T),+)) + } + } + }; +} + +impl_entry_for_tuple!(T1); +impl_entry_for_tuple!(T1, T2); +impl_entry_for_tuple!(T1, T2, T3); +impl_entry_for_tuple!(T1, T2, T3, T4); +impl_entry_for_tuple!(T1, T2, T3, T4, T5); +impl_entry_for_tuple!(T1, T2, T3, T4, T5, T6); +impl_entry_for_tuple!(T1, T2, T3, T4, T5, T6, T7); +impl_entry_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8); +impl_entry_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9); +impl_entry_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10); +impl_entry_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11); +impl_entry_for_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12); + +macro_rules! impl_entry_passthrough { + ($($T:ty),+) => { + $( + impl DagCodec for $T + where + B: BackendExt, + B::Codec: Codec<$T, Compact = B::Compact, Error = Err>, + { + type Error = Err; + + fn encode(self) -> Result { + B::Codec::encode(&self) + } + + fn decode(response: &B::Compact) -> Result { + B::Codec::decode(response) + } + } + )+ + }; +} + +impl_entry_passthrough!( + String, + &'static str, + u8, + u16, + u32, + u64, + u128, + usize, + i8, + i16, + i32, + i64, + i128, + isize, + f32, + f64, + bool, + char, + () +); + +impl DagCodec for Option +where + B: BackendExt, + B::Codec: Codec, +{ + type Error = Err; + + fn encode(self) -> Result { + B::Codec::encode(&self) + } + + fn decode(response: &B::Compact) -> Result { + B::Codec::decode(response) + } +} + +impl DagCodec for Result +where + B: BackendExt, + B::Codec: Codec, +{ + type Error = Err; + + fn encode(self) -> Result { + B::Codec::encode(&self) + } + + fn decode(response: &B::Compact) -> Result { + B::Codec::decode(response) + } +} diff --git a/apalis-workflow/src/dag/error.rs b/apalis-workflow/src/dag/error.rs index 34b0e2f4..e5b92e8f 100644 --- a/apalis-workflow/src/dag/error.rs +++ b/apalis-workflow/src/dag/error.rs @@ -8,7 +8,7 @@ use thiserror::Error; pub enum DagFlowError { /// An error originating from the actual node execution. #[error("Node execution error: {0}")] - Node(#[source] BoxDynError), + NodeExecutionError(#[source] BoxDynError), /// An error originating from the backend. #[error("Backend error: {0}")] Backend(#[source] BoxDynError), diff --git a/apalis-workflow/src/dag/executor.rs b/apalis-workflow/src/dag/executor.rs index 7e567ae4..d2c8ec18 100644 --- a/apalis-workflow/src/dag/executor.rs +++ b/apalis-workflow/src/dag/executor.rs @@ -113,13 +113,12 @@ where .await .map_err(|e| DagFlowError::Metadata(e.into()))? .0; - // Get the service for this node let service = graph .node_weight_mut(context.current_node) .ok_or_else(|| DagFlowError::MissingService(context.current_node))?; - let result = service.call(req).await.map_err(DagFlowError::Node)?; + let result = service.call(req).await.map_err(DagFlowError::NodeExecutionError)?; Ok(result) }) diff --git a/apalis-workflow/src/dag/mod.rs b/apalis-workflow/src/dag/mod.rs index 3d25616f..fd281166 100644 --- a/apalis-workflow/src/dag/mod.rs +++ b/apalis-workflow/src/dag/mod.rs @@ -33,12 +33,15 @@ pub mod context; /// DAG response implementations pub mod response; +/// DAG Decoding and encoding utilities +pub mod decode; + use serde::{Deserialize, Serialize}; use tower::{Service, util::BoxCloneSyncService}; use crate::{ DagService, - dag::{error::DagFlowError, executor::DagExecutor, node::NodeService}, + dag::{decode::DagCodec, error::DagFlowError, executor::DagExecutor, node::NodeService}, }; pub use context::DagFlowContext; @@ -96,7 +99,7 @@ where CodecError: Into + Send + 'static, S::Error: Into, B: Send + Sync + 'static, - Input: Send + Sync + 'static, + Input: DagCodec + Send + Sync + 'static, { let svc: NodeService = NodeService::new(service); let node = self @@ -130,7 +133,7 @@ where CodecError: Into + Send + 'static, Err: Into, B: Send + Sync + 'static, - Input: Send + Sync + 'static, + Input: DagCodec + Send + Sync + 'static, { self.add_node(std::any::type_name::(), task_fn(node)) @@ -155,7 +158,7 @@ where CodecError: Into + Send + 'static, Err: Into, B: Send + Sync + 'static, - Input: Send + Sync + 'static, + Input: DagCodec + Send + Sync + 'static, { self.add_node::, Input, CodecError>( @@ -455,7 +458,7 @@ mod tests { let mut backend = JsonStorage::new_temp().unwrap(); - backend.push_start(Value::from(42)).await.unwrap(); + backend.push_start(42).await.unwrap(); let worker = WorkerBuilder::new("rango-tango") .backend(backend) @@ -498,7 +501,7 @@ mod tests { let mut backend: JsonStorage = JsonStorage::new_temp().unwrap(); - backend.push_start(Value::from(42)).await.unwrap(); + backend.push_start(42).await.unwrap(); let worker = WorkerBuilder::new("rango-tango") .backend(backend) @@ -517,7 +520,7 @@ mod tests { let dag = DagFlow::new("fan-in-workflow"); let get_name = dag.add_node( "get_name", - task_fn(|task: u32| async move { task as usize }), + task_fn(|task: usize| async move { task as usize }), ); let get_age = dag.add_node( "get_age", @@ -525,7 +528,7 @@ mod tests { ); let get_address = dag.add_node( "get_address", - task_fn(|task: u32| async move { task as usize }), + task_fn(|task: i32| async move { task as usize }), ); let main_collector = dag .add_node( @@ -539,9 +542,11 @@ mod tests { let side_collector = dag .add_node( "side_collector", - task_fn(|task: Vec| async move { task.iter().sum::() }), + task_fn( + |task: (usize, usize)| async move { [task.0, task.1].iter().sum::() }, + ), ) - .depends_on(vec![&get_name, &get_address]); + .depends_on((&get_name, &get_address)); let _final_node = dag .add_node( @@ -557,7 +562,10 @@ mod tests { let mut backend: JsonStorage = JsonStorage::new_temp().unwrap(); - backend.push_start(vec![42, 43, 44]).await.unwrap(); + backend + .start_fan_out((42usize, 43u32, 44i32)) + .await + .unwrap(); let worker = WorkerBuilder::new("rango-tango") .backend(backend) @@ -641,10 +649,7 @@ mod tests { let mut backend = JsonStorage::new_temp().unwrap(); - backend - .push_start(Value::from(vec![17, 18, 19])) - .await - .unwrap(); + backend.start_fan_out(vec![17, 18, 19]).await.unwrap(); let worker = WorkerBuilder::new("rango-tango") .backend(backend) diff --git a/apalis-workflow/src/dag/node.rs b/apalis-workflow/src/dag/node.rs index b88e7a2d..2cfbd5ba 100644 --- a/apalis-workflow/src/dag/node.rs +++ b/apalis-workflow/src/dag/node.rs @@ -7,6 +7,8 @@ use std::pin::Pin; use std::task::{Context, Poll}; use tower::Service; +use crate::dag::decode::DagCodec; + /// A service that wraps another service to handle encoding and decoding /// of task inputs and outputs using the backend's codec. pub struct NodeService @@ -66,6 +68,7 @@ where B: BackendExt, B::Codec: Codec + Codec, + Input: DagCodec, CdcErr: Into + Send + 'static, S::Future: Send + 'static, { @@ -78,7 +81,7 @@ where } fn call(&mut self, req: Task) -> Self::Future { - let decoded_req = match B::Codec::decode(&req.args) { + let decoded_req = match Input::decode(&req.args) { Ok(decoded) => req.map(|_| decoded), Err(e) => { return Box::pin(async move { Err(CdcErr::into(e)) }); diff --git a/apalis-workflow/src/dag/service.rs b/apalis-workflow/src/dag/service.rs index 5509c38e..43014d10 100644 --- a/apalis-workflow/src/dag/service.rs +++ b/apalis-workflow/src/dag/service.rs @@ -63,12 +63,17 @@ where } } -impl Service> +impl Service> for RootDagService where - B: BackendExt + Send + Sync + 'static + Clone + WaitForCompletion, - B::IdType: GenerateId + Send + Sync + 'static + PartialEq + Debug, - B::Compact: Send + Sync + 'static + Clone, + B: BackendExt + + Send + + Sync + + 'static + + Clone + + WaitForCompletion>, + IdType: GenerateId + Send + Sync + 'static + PartialEq + Debug + Clone, + B::Compact: Send + Sync + 'static + Clone + Debug, B::Context: Send + Sync + Default + MetadataExt, Error = MetaError> + 'static, Err: std::error::Error + Send + Sync + 'static, @@ -141,10 +146,11 @@ where dependency_task_ids.values().cloned().collect::>(), ) .await?; + // TODO(bug): The check of done is not a good one as it can be called more than once if the jobs a too quickly executed if results.iter().all(|s| matches!(s.status, Status::Done)) { let sorted_results = { // Match the order of incoming_nodes by matching NodeIndex - let res =incoming_nodes + let res = incoming_nodes .iter() .rev() .map(|node_index| { @@ -165,26 +171,16 @@ where Err(_) => return Ok(DagExecutionResponse::WaitingForDependencies { pending_dependencies: dependency_task_ids }), } }; - let encoded_input = B::Codec::encode( - &sorted_results + let res = sorted_results .iter() .map(|s| match &s.result { Ok(val) => { - let decoded: DagExecutionResponse< - B::Compact, - B::IdType, - > = B::Codec::decode(val).map_err(|e: CdcErr| { - format!( - "Failed to decode dependency result: {:?}", - e.into() - ) - })?; - match decoded { + match val { DagExecutionResponse::FanOut { response, .. } => { - Ok(response) + Ok(response.clone()) } DagExecutionResponse::EnqueuedNext { result } | DagExecutionResponse::Complete { result } => { - Ok(result) + Ok(result.clone()) } _ => Err("Dependency task returned invalid response, which is unexpected during fan-in".to_owned()) } @@ -195,9 +191,12 @@ where )) } }) - .collect::, String>>()?, + .collect::, String>>()?; + let encoded_input = B::Codec::encode( + &res ) .map_err(|e| e.into())?; + let req = req.map(|_| encoded_input); // Replace args with fan-in input let response = executor.call(req).await?; (response, context) @@ -308,7 +307,7 @@ where B::Context: Send + Sync + Default + MetadataExt> + 'static, B: Sink, Error = Err> + Unpin, Err: std::error::Error + Send + Sync + 'static, - B: BackendExt + Send + Sync + 'static + Clone + WaitForCompletion, + B: BackendExt + Send + Sync + 'static + Clone, B::Codec: Codec, Compact = B::Compact, Error = CdcErr>, CdcErr: Into, { @@ -361,7 +360,7 @@ where B::Context: Send + Sync + Default + MetadataExt> + 'static, B: Sink, Error = Err> + Unpin, Err: std::error::Error + Send + Sync + 'static, - B: BackendExt + Send + Sync + 'static + Clone + WaitForCompletion, + B: BackendExt + Send + Sync + 'static + Clone, B::Codec: Codec, Compact = B::Compact, Error = CdcErr>, CdcErr: Into, { diff --git a/apalis-workflow/src/sink.rs b/apalis-workflow/src/sink.rs index 69d2b790..258ea34b 100644 --- a/apalis-workflow/src/sink.rs +++ b/apalis-workflow/src/sink.rs @@ -6,19 +6,32 @@ use apalis_core::{ use futures::Sink; use petgraph::graph::NodeIndex; -use crate::{dag::DagFlowContext, id_generator::GenerateId, sequential::WorkflowContext}; +use crate::{ + dag::{DagFlowContext, decode::DagCodec}, + id_generator::GenerateId, + sequential::WorkflowContext, +}; /// Extension trait for pushing tasks into a workflow -pub trait WorkflowSink: BackendExt +pub trait WorkflowSink: BackendExt + Sized where Self::Codec: Codec, { - /// Push a task into the workflow sink at the start + /// Push a single task into the workflow sink at the start fn push_start( &mut self, args: Args, ) -> impl Future>> + Send; + /// Push a single task into the workflow sink at the start + fn start_fan_out( + &mut self, + args: Args, + ) -> impl Future>> + Send + where + Args: DagCodec, + Args::Error: std::error::Error + Send + Sync + 'static; + /// Push a step into the workflow sink at the specified index /// /// This is a helper method for pushing tasks into the workflow sink @@ -70,6 +83,24 @@ where .await .map_err(|e| TaskSinkError::PushError(e)) } + + async fn start_fan_out(&mut self, args: Args) -> Result<(), TaskSinkError> + where + Args: DagCodec, + Args::Error: std::error::Error + Send + Sync + 'static + { + use futures::SinkExt; + let task_id = TaskId::new(S::IdType::generate()); + + let compact = Args::encode(args).map_err(|e| TaskSinkError::CodecError(e.into()))?; + let task = TaskBuilder::new(compact) + .with_task_id(task_id.clone()) + .build(); + self.send(task) + .await + .map_err(|e| TaskSinkError::PushError(e)) + } + async fn push_step( &mut self, step: Args, From 1b3ccc9c0a8bff9df94c3ed9f5a0e0129b2757db Mon Sep 17 00:00:00 2001 From: geofmureithi Date: Wed, 28 Jan 2026 21:07:22 +0300 Subject: [PATCH 2/2] chore: add changelog --- CHANGELOG.md | 2 + Cargo.lock | 215 ++++++++++++++-------------- apalis-workflow/src/dag/executor.rs | 5 +- apalis-workflow/src/sink.rs | 2 +- supply-chain/config.toml | 158 +++++++++++++++----- 5 files changed, 236 insertions(+), 146 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7f0ba67..dbf8ff2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ All notable changes to this project are documented in this file. ## [Unreleased] + +- **chore**: add `DagCodec` trait which handles entry and output in dag nodes ([#668](https://github.com/geofmureithi/apalis/pull/668)) - **chore**: bump to v1.0.0 rc.2 ([#660](https://github.com/geofmureithi/apalis/pull/660)) - **refactor(apalis-sql)**: refactor `SqlDateTime` and `SqlDateTimeExt` to remove the `Sql` prefix ([#659](https://github.com/apalis-dev/apalis/pull/659)) - **chore**: chore: add file storage backend docs ([#658](https://github.com/apalis-dev/apalis/pull/658)) diff --git a/Cargo.lock b/Cargo.lock index 46b45d68..dd5feb4a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -68,9 +68,9 @@ dependencies = [ "pin-project", "sentry-core 0.45.0", "serde", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", - "tower 0.5.2", + "tower 0.5.3", "tracing", "ulid", "uuid", @@ -85,7 +85,7 @@ dependencies = [ "rmp-serde", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -100,9 +100,9 @@ dependencies = [ "futures-util", "pin-project", "serde", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", - "tower 0.5.2", + "tower 0.5.3", "tower-layer", "tower-service", "tracing", @@ -132,7 +132,7 @@ dependencies = [ "chrono", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] @@ -147,9 +147,9 @@ dependencies = [ "rand 0.9.2", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", - "tower 0.5.2", + "tower 0.5.3", "tracing", "ulid", "uuid", @@ -180,9 +180,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.15.2" +version = "1.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88aab2464f1f25453baa7a07c84c5b7684e274054ba06817f382357f77a288" +checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256" dependencies = [ "aws-lc-sys", "zeroize", @@ -190,9 +190,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.35.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45afffdee1e7c9126814751f88dddc747f41d91da16c9551a0f1e8a11e788a1" +checksum = "5c34dda4df7017c8db52132f0f8a2e0f8161649d15723ed63fc00c82d0f2081a" dependencies = [ "cc", "cmake", @@ -259,7 +259,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper 1.0.2", "tokio", - "tower 0.5.2", + "tower 0.5.3", "tower-layer", "tower-service", "tracing", @@ -342,7 +342,7 @@ dependencies = [ "futures", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tower 0.4.13", "tracing", @@ -423,9 +423,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.51" +version = "1.2.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" +checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583" dependencies = [ "find-msvc-tools", "jobserver", @@ -447,9 +447,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" dependencies = [ "iana-time-zone", "js-sys", @@ -644,9 +644,9 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "find-msvc-tools" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" +checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" [[package]] name = "findshlibs" @@ -824,9 +824,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "libc", @@ -859,7 +859,7 @@ dependencies = [ "apalis-core", "futures", "serde", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tower 0.4.13", "tracing", @@ -1112,7 +1112,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.1", + "socket2 0.6.2", "tokio", "tower-service", "tracing", @@ -1120,9 +1120,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1246,9 +1246,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -1308,9 +1308,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.83" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" dependencies = [ "once_cell", "wasm-bindgen", @@ -1324,9 +1324,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.179" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "linux-raw-sys" @@ -1414,7 +1414,7 @@ dependencies = [ "metrics", "metrics-util", "quanta", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", ] @@ -1501,9 +1501,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-traits" @@ -1722,9 +1722,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-probe" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" @@ -1748,7 +1748,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", ] @@ -1797,7 +1797,7 @@ dependencies = [ "opentelemetry-proto", "opentelemetry_sdk", "prost", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -1837,7 +1837,7 @@ dependencies = [ "opentelemetry", "percent-encoding", "rand 0.9.2", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -1968,9 +1968,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.105" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -1987,7 +1987,7 @@ dependencies = [ "memchr", "parking_lot", "protobuf", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -2068,9 +2068,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.43" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -2099,7 +2099,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -2119,7 +2119,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -2128,14 +2128,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom 0.3.4", ] @@ -2146,7 +2146,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" dependencies = [ - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -2225,7 +2225,7 @@ dependencies = [ "sync_wrapper 1.0.2", "tokio", "tokio-native-tls", - "tower 0.5.2", + "tower 0.5.3", "tower-http 0.6.8", "tower-service", "url", @@ -2256,7 +2256,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", @@ -2283,9 +2283,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" +checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" [[package]] name = "rustc_version" @@ -2329,7 +2329,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ - "openssl-probe 0.2.0", + "openssl-probe 0.2.1", "rustls-pki-types", "schannel", "security-framework 3.5.1", @@ -2337,18 +2337,18 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.8" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "aws-lc-rs", "ring", @@ -2585,7 +2585,7 @@ dependencies = [ "rand 0.9.2", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", "url", "uuid", @@ -2712,9 +2712,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" dependencies = [ "libc", "windows-sys 0.60.2", @@ -2816,11 +2816,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.18", ] [[package]] @@ -2836,9 +2836,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", @@ -2856,30 +2856,30 @@ dependencies = [ [[package]] name = "time" -version = "0.3.44" +version = "0.3.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "9da98b7d9b7dad93488a84b8248efc35352b0b2657397d4167e7ad67e5d535e5" dependencies = [ "deranged", "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "78cc610bac2dcee56805c99642447d4c5dbde4d01f752ffea0199aee1f601dc4" dependencies = [ "num-conv", "time-core", @@ -2907,7 +2907,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.1", + "socket2 0.6.2", "tokio-macros", "windows-sys 0.61.2", ] @@ -2969,9 +2969,9 @@ dependencies = [ [[package]] name = "tonic" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb7613188ce9f7df5bfe185db26c5814347d110db17920415cf2fbcad85e7203" +checksum = "a286e33f82f8a1ee2df63f4fa35c0becf4a85a0cb03091a15fd7bf0b402dc94a" dependencies = [ "async-trait", "base64", @@ -2990,9 +2990,9 @@ dependencies = [ [[package]] name = "tonic-prost" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66bd50ad6ce1252d87ef024b3d64fe4c3cf54a86fb9ef4c631fdd0ded7aeaa67" +checksum = "d6c55a2d6a14174563de34409c9f92ff981d006f56da9c6ecd40d9d4a31500b0" dependencies = [ "bytes", "prost", @@ -3017,9 +3017,9 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", @@ -3067,7 +3067,7 @@ dependencies = [ "http-body 1.0.1", "iri-string", "pin-project-lite", - "tower 0.5.2", + "tower 0.5.3", "tower-layer", "tower-service", ] @@ -3266,9 +3266,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" dependencies = [ "getrandom 0.3.4", "js-sys", @@ -3317,18 +3317,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" +checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" dependencies = [ "cfg-if", "once_cell", @@ -3339,11 +3339,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.56" +version = "0.4.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" +checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" dependencies = [ "cfg-if", + "futures-util", "js-sys", "once_cell", "wasm-bindgen", @@ -3352,9 +3353,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" +checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3362,9 +3363,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" +checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" dependencies = [ "bumpalo", "proc-macro2", @@ -3375,18 +3376,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.83" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" +checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" dependencies = [ "js-sys", "wasm-bindgen", @@ -3650,9 +3651,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[package]] name = "writeable" @@ -3685,18 +3686,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.32" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fabae64378cb18147bb18bca364e63bdbe72a0ffe4adf0addfec8aa166b2c56" +checksum = "fdea86ddd5568519879b8187e1cf04e24fce28f7fe046ceecbce472ff19a2572" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.32" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c2d862265a8bb4471d87e033e730f536e2a285cc7cb05dbce09a2a97075f90" +checksum = "0c15e1b46eff7c6c91195752e0eeed8ef040e391cdece7c25376957d5f15df22" dependencies = [ "proc-macro2", "quote", @@ -3765,6 +3766,6 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.12" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc5a66a20078bf1251bde995aa2fdcc4b800c70b5d92dd2c62abc5c60f679f8" +checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439" diff --git a/apalis-workflow/src/dag/executor.rs b/apalis-workflow/src/dag/executor.rs index d2c8ec18..aa0940ae 100644 --- a/apalis-workflow/src/dag/executor.rs +++ b/apalis-workflow/src/dag/executor.rs @@ -118,7 +118,10 @@ where .node_weight_mut(context.current_node) .ok_or_else(|| DagFlowError::MissingService(context.current_node))?; - let result = service.call(req).await.map_err(DagFlowError::NodeExecutionError)?; + let result = service + .call(req) + .await + .map_err(DagFlowError::NodeExecutionError)?; Ok(result) }) diff --git a/apalis-workflow/src/sink.rs b/apalis-workflow/src/sink.rs index 258ea34b..a3194329 100644 --- a/apalis-workflow/src/sink.rs +++ b/apalis-workflow/src/sink.rs @@ -87,7 +87,7 @@ where async fn start_fan_out(&mut self, args: Args) -> Result<(), TaskSinkError> where Args: DagCodec, - Args::Error: std::error::Error + Send + Sync + 'static + Args::Error: std::error::Error + Send + Sync + 'static, { use futures::SinkExt; let task_id = TaskId::new(S::IdType::generate()); diff --git a/supply-chain/config.toml b/supply-chain/config.toml index 54932fb1..6cf32c55 100644 --- a/supply-chain/config.toml +++ b/supply-chain/config.toml @@ -69,21 +69,33 @@ version = "1.5.0" criteria = "safe-to-deploy" [[exemptions.aws-lc-rs]] -version = "1.15.2" +version = "1.15.4" criteria = "safe-to-deploy" [[exemptions.aws-lc-sys]] -version = "0.35.0" +version = "0.37.0" criteria = "safe-to-deploy" [[exemptions.axum]] version = "0.5.17" criteria = "safe-to-deploy" +[[exemptions.axum]] +version = "0.8.8" +criteria = "safe-to-deploy" + [[exemptions.axum-core]] version = "0.2.9" criteria = "safe-to-deploy" +[[exemptions.axum-core]] +version = "0.5.6" +criteria = "safe-to-deploy" + +[[exemptions.axum-macros]] +version = "0.5.0" +criteria = "safe-to-deploy" + [[exemptions.backtrace]] version = "0.3.76" criteria = "safe-to-deploy" @@ -125,7 +137,7 @@ version = "1.11.0" criteria = "safe-to-deploy" [[exemptions.cc]] -version = "1.2.51" +version = "1.2.54" criteria = "safe-to-deploy" [[exemptions.cfg-if]] @@ -137,7 +149,7 @@ version = "0.2.1" criteria = "safe-to-deploy" [[exemptions.chrono]] -version = "0.4.42" +version = "0.4.43" criteria = "safe-to-deploy" [[exemptions.cmake]] @@ -188,6 +200,10 @@ criteria = "safe-to-deploy" version = "1.0.5" criteria = "safe-to-deploy" +[[exemptions.either]] +version = "1.15.0" +criteria = "safe-to-deploy" + [[exemptions.email_address]] version = "0.2.9" criteria = "safe-to-deploy" @@ -209,7 +225,7 @@ version = "2.3.0" criteria = "safe-to-deploy" [[exemptions.find-msvc-tools]] -version = "0.1.6" +version = "0.1.8" criteria = "safe-to-deploy" [[exemptions.findshlibs]] @@ -289,7 +305,7 @@ version = "0.3.31" criteria = "safe-to-deploy" [[exemptions.getrandom]] -version = "0.2.16" +version = "0.2.17" criteria = "safe-to-deploy" [[exemptions.getrandom]] @@ -385,7 +401,7 @@ version = "0.1.19" criteria = "safe-to-deploy" [[exemptions.iana-time-zone]] -version = "0.1.64" +version = "0.1.65" criteria = "safe-to-deploy" [[exemptions.iana-time-zone-haiku]] @@ -429,7 +445,7 @@ version = "1.2.1" criteria = "safe-to-deploy" [[exemptions.indexmap]] -version = "2.12.1" +version = "2.13.0" criteria = "safe-to-deploy" [[exemptions.ipnet]] @@ -444,6 +460,10 @@ criteria = "safe-to-deploy" version = "0.4.17" criteria = "safe-to-deploy" +[[exemptions.itertools]] +version = "0.14.0" +criteria = "safe-to-deploy" + [[exemptions.itoa]] version = "1.0.17" criteria = "safe-to-deploy" @@ -453,7 +473,7 @@ version = "0.1.34" criteria = "safe-to-deploy" [[exemptions.js-sys]] -version = "0.3.83" +version = "0.3.85" criteria = "safe-to-deploy" [[exemptions.lazy_static]] @@ -461,7 +481,7 @@ version = "1.5.0" criteria = "safe-to-deploy" [[exemptions.libc]] -version = "0.2.179" +version = "0.2.180" criteria = "safe-to-deploy" [[exemptions.linux-raw-sys]] @@ -492,6 +512,10 @@ criteria = "safe-to-deploy" version = "0.5.0" criteria = "safe-to-deploy" +[[exemptions.matchit]] +version = "0.8.4" +criteria = "safe-to-deploy" + [[exemptions.memchr]] version = "2.7.6" criteria = "safe-to-deploy" @@ -533,7 +557,7 @@ version = "0.50.3" criteria = "safe-to-deploy" [[exemptions.num-conv]] -version = "0.1.0" +version = "0.2.0" criteria = "safe-to-deploy" [[exemptions.num-traits]] @@ -617,13 +641,37 @@ version = "0.1.6" criteria = "safe-to-deploy" [[exemptions.openssl-probe]] -version = "0.2.0" +version = "0.2.1" criteria = "safe-to-deploy" [[exemptions.openssl-sys]] version = "0.9.111" criteria = "safe-to-deploy" +[[exemptions.opentelemetry]] +version = "0.31.0" +criteria = "safe-to-deploy" + +[[exemptions.opentelemetry-http]] +version = "0.31.0" +criteria = "safe-to-deploy" + +[[exemptions.opentelemetry-otlp]] +version = "0.31.0" +criteria = "safe-to-deploy" + +[[exemptions.opentelemetry-prometheus]] +version = "0.31.0" +criteria = "safe-to-deploy" + +[[exemptions.opentelemetry-proto]] +version = "0.31.0" +criteria = "safe-to-deploy" + +[[exemptions.opentelemetry_sdk]] +version = "0.31.0" +criteria = "safe-to-deploy" + [[exemptions.os_info]] version = "3.14.0" criteria = "safe-to-deploy" @@ -681,7 +729,27 @@ version = "0.2.21" criteria = "safe-to-deploy" [[exemptions.proc-macro2]] -version = "1.0.105" +version = "1.0.106" +criteria = "safe-to-deploy" + +[[exemptions.prometheus]] +version = "0.14.0" +criteria = "safe-to-deploy" + +[[exemptions.prost]] +version = "0.14.3" +criteria = "safe-to-deploy" + +[[exemptions.prost-derive]] +version = "0.14.3" +criteria = "safe-to-deploy" + +[[exemptions.protobuf]] +version = "3.7.2" +criteria = "safe-to-deploy" + +[[exemptions.protobuf-support]] +version = "3.7.2" criteria = "safe-to-deploy" [[exemptions.quanta]] @@ -689,7 +757,7 @@ version = "0.12.6" criteria = "safe-to-deploy" [[exemptions.quote]] -version = "1.0.43" +version = "1.0.44" criteria = "safe-to-deploy" [[exemptions.r-efi]] @@ -717,7 +785,7 @@ version = "0.6.4" criteria = "safe-to-deploy" [[exemptions.rand_core]] -version = "0.9.3" +version = "0.9.5" criteria = "safe-to-deploy" [[exemptions.rand_xoshiro]] @@ -761,7 +829,7 @@ version = "1.3.1" criteria = "safe-to-deploy" [[exemptions.rustc-demangle]] -version = "0.1.26" +version = "0.1.27" criteria = "safe-to-deploy" [[exemptions.rustc_version]] @@ -781,11 +849,11 @@ version = "0.8.3" criteria = "safe-to-deploy" [[exemptions.rustls-pki-types]] -version = "1.13.2" +version = "1.14.0" criteria = "safe-to-deploy" [[exemptions.rustls-webpki]] -version = "0.103.8" +version = "0.103.9" criteria = "safe-to-deploy" [[exemptions.rustversion]] @@ -880,6 +948,10 @@ criteria = "safe-to-deploy" version = "1.0.149" criteria = "safe-to-deploy" +[[exemptions.serde_path_to_error]] +version = "0.1.20" +criteria = "safe-to-deploy" + [[exemptions.serde_urlencoded]] version = "0.7.1" criteria = "safe-to-deploy" @@ -913,7 +985,7 @@ version = "0.5.10" criteria = "safe-to-deploy" [[exemptions.socket2]] -version = "0.6.1" +version = "0.6.2" criteria = "safe-to-deploy" [[exemptions.stable_deref_trait]] @@ -953,7 +1025,7 @@ version = "1.0.69" criteria = "safe-to-deploy" [[exemptions.thiserror]] -version = "2.0.17" +version = "2.0.18" criteria = "safe-to-deploy" [[exemptions.thiserror-impl]] @@ -961,7 +1033,7 @@ version = "1.0.69" criteria = "safe-to-deploy" [[exemptions.thiserror-impl]] -version = "2.0.17" +version = "2.0.18" criteria = "safe-to-deploy" [[exemptions.thread_local]] @@ -969,15 +1041,15 @@ version = "1.1.9" criteria = "safe-to-deploy" [[exemptions.time]] -version = "0.3.44" +version = "0.3.46" criteria = "safe-to-deploy" [[exemptions.time-core]] -version = "0.1.6" +version = "0.1.8" criteria = "safe-to-deploy" [[exemptions.time-macros]] -version = "0.2.24" +version = "0.2.26" criteria = "safe-to-deploy" [[exemptions.tinystr]] @@ -1000,16 +1072,28 @@ criteria = "safe-to-deploy" version = "0.26.4" criteria = "safe-to-deploy" +[[exemptions.tokio-stream]] +version = "0.1.18" +criteria = "safe-to-deploy" + [[exemptions.tokio-util]] version = "0.7.18" criteria = "safe-to-deploy" +[[exemptions.tonic]] +version = "0.14.3" +criteria = "safe-to-deploy" + +[[exemptions.tonic-prost]] +version = "0.14.3" +criteria = "safe-to-deploy" + [[exemptions.tower]] version = "0.4.13" criteria = "safe-to-deploy" [[exemptions.tower]] -version = "0.5.2" +version = "0.5.3" criteria = "safe-to-deploy" [[exemptions.tower-http]] @@ -1089,7 +1173,7 @@ version = "1.0.4" criteria = "safe-to-deploy" [[exemptions.uuid]] -version = "1.19.0" +version = "1.20.0" criteria = "safe-to-deploy" [[exemptions.valuable]] @@ -1117,31 +1201,31 @@ version = "0.11.1+wasi-snapshot-preview1" criteria = "safe-to-deploy" [[exemptions.wasip2]] -version = "1.0.1+wasi-0.2.4" +version = "1.0.2+wasi-0.2.9" criteria = "safe-to-deploy" [[exemptions.wasm-bindgen]] -version = "0.2.106" +version = "0.2.108" criteria = "safe-to-deploy" [[exemptions.wasm-bindgen-futures]] -version = "0.4.56" +version = "0.4.58" criteria = "safe-to-deploy" [[exemptions.wasm-bindgen-macro]] -version = "0.2.106" +version = "0.2.108" criteria = "safe-to-deploy" [[exemptions.wasm-bindgen-macro-support]] -version = "0.2.106" +version = "0.2.108" criteria = "safe-to-deploy" [[exemptions.wasm-bindgen-shared]] -version = "0.2.106" +version = "0.2.108" criteria = "safe-to-deploy" [[exemptions.web-sys]] -version = "0.3.83" +version = "0.3.85" criteria = "safe-to-deploy" [[exemptions.web-time]] @@ -1273,7 +1357,7 @@ version = "0.53.1" criteria = "safe-to-deploy" [[exemptions.wit-bindgen]] -version = "0.46.0" +version = "0.51.0" criteria = "safe-to-deploy" [[exemptions.writeable]] @@ -1289,11 +1373,11 @@ version = "0.8.1" criteria = "safe-to-deploy" [[exemptions.zerocopy]] -version = "0.8.32" +version = "0.8.35" criteria = "safe-to-deploy" [[exemptions.zerocopy-derive]] -version = "0.8.32" +version = "0.8.35" criteria = "safe-to-deploy" [[exemptions.zerofrom]] @@ -1321,5 +1405,5 @@ version = "0.11.2" criteria = "safe-to-deploy" [[exemptions.zmij]] -version = "1.0.12" +version = "1.0.17" criteria = "safe-to-deploy"