From dbeffa1a5f1d364f3afd5d253fef3175aef5c62f Mon Sep 17 00:00:00 2001 From: Colin Kinloch Date: Tue, 25 Feb 2025 15:19:25 +0000 Subject: [PATCH 01/10] test: Increase log verbosity for dependencies When tests fail the logging from gitlab-runner-rs is likely useful. * trace for obs_gitlab_runner * debug for gitlab_runner * warn for anything else --- src/handler.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/handler.rs b/src/handler.rs index dcf4c6a..9fffd0e 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -806,7 +806,12 @@ mod tests { tracing_subscriber::fmt::layer() .with_test_writer() .with_filter( - Targets::new().with_target("obs_gitlab_runner", Level::TRACE), + Targets::new() + .with_targets([ + ("obs_gitlab_runner", Level::TRACE), + ("gitlab_runner", Level::DEBUG), + ]) + .with_default(Level::WARN), ), ) .with(tracing_error::ErrorLayer::default()) From bc27bffbe06e851258ccd9901398329fb082787d Mon Sep 17 00:00:00 2001 From: Colin Kinloch Date: Tue, 25 Feb 2025 15:34:01 +0000 Subject: [PATCH 02/10] Improve log wording when committing artifacts --- src/upload.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/upload.rs b/src/upload.rs index caf6ed8..4d59470 100644 --- a/src/upload.rs +++ b/src/upload.rs @@ -8,7 +8,7 @@ use futures_util::{FutureExt, Stream, TryStreamExt}; use gitlab_runner::outputln; use md5::{Digest, Md5}; use open_build_service_api as obs; -use tracing::{debug, info_span, instrument, trace, Instrument}; +use tracing::{debug, info_span, instrument, trace, warn, Instrument}; use crate::{artifacts::ArtifactDirectory, dsc::Dsc, retry::retry_request}; @@ -280,7 +280,10 @@ impl ObsDscUploader { return dir.rev.ok_or_else(|| eyre!("Revision is empty")); } obs::CommitResult::MissingEntries(missing) => { - trace!("Retry commit, missing {} entries", missing.entries.len()); + trace!("Committing {} missing entries", missing.entries.len()); + if attempt > 0 { + warn!("Commit attempt {}", attempt); + } debug!(?missing); ensure!( From 73ac167a37fbaf52668d0fd06cc757aaaf35e417 Mon Sep 17 00:00:00 2001 From: Colin Kinloch Date: Tue, 25 Feb 2025 16:35:12 +0000 Subject: [PATCH 03/10] test: Use `impl Layer` for the gitlab tracing layer GitlabLayer is replaced with with Filtered in gitlab-runner-rs 0.0.9. Replacing `with_tracing` with a macro simplifys resolving trait bounds. --- src/handler.rs | 93 +++++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 50 deletions(-) diff --git a/src/handler.rs b/src/handler.rs index 9fffd0e..a47d741 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -727,14 +727,14 @@ mod tests { use camino::Utf8Path; use claim::*; - use futures_util::{AsyncWriteExt, Future}; - use gitlab_runner::{GitlabLayer, Runner}; + use futures_util::AsyncWriteExt; + use gitlab_runner::Runner; use gitlab_runner_mock::*; use open_build_service_mock::*; - use rstest::{fixture, rstest}; + use rstest::rstest; use tempfile::TempDir; - use tracing::{instrument::WithSubscriber, Level}; - use tracing_subscriber::{filter::Targets, prelude::*, Layer, Registry}; + use tracing::{instrument::WithSubscriber, Level, Subscriber}; + use tracing_subscriber::{filter::Targets, prelude::*, registry::LookupSpan, Layer, Registry}; use zip::ZipArchive; use crate::{test_support::*, upload::compute_md5}; @@ -768,8 +768,11 @@ mod tests { obs_client: obs::Client, } - #[fixture] - async fn test_context() -> (TestContext, GitlabLayer) { + async fn test_context() -> (TestContext, impl Layer) + where + S: Subscriber + 'static + Send + Sync, + S: for<'span> LookupSpan<'span>, + { COLOR_EYRE_INSTALL.call_once(|| color_eyre::install().unwrap()); let runner_dir = tempfile::tempdir().unwrap(); @@ -795,29 +798,25 @@ mod tests { ) } - async fn with_tracing(layer: GitlabLayer, future: Fut) -> T - where - Fut: Future, - { - future - .with_subscriber( - Registry::default() - .with( - tracing_subscriber::fmt::layer() - .with_test_writer() - .with_filter( - Targets::new() - .with_targets([ - ("obs_gitlab_runner", Level::TRACE), - ("gitlab_runner", Level::DEBUG), - ]) - .with_default(Level::WARN), - ), - ) - .with(tracing_error::ErrorLayer::default()) - .with(layer), - ) - .await + macro_rules! with_tracing { + ($layer:expr, $future:expr) => {{ + let sub = Registry::default() + .with( + tracing_subscriber::fmt::layer() + .with_test_writer() + .with_filter( + Targets::new() + .with_targets([ + ("obs_gitlab_runner", Level::TRACE), + ("gitlab_runner", Level::DEBUG), + ]) + .with_default(Level::WARN), + ), + ) + .with(tracing_error::ErrorLayer::default()) + .with($layer); + $future.with_subscriber(sub).await + }}; } #[derive(Default)] @@ -1698,7 +1697,6 @@ mod tests { #[rstest] #[tokio::test] async fn test_handler_flow( - #[future] test_context: (TestContext, GitlabLayer), #[values( DputTest::Basic, DputTest::Rebuild, @@ -1716,8 +1714,8 @@ mod tests { #[values(true, false)] download_binaries: bool, #[values(true, false)] prune_only_if_job_unsuccessful: bool, ) { - let (mut context, layer) = test_context.await; - with_tracing(layer, async { + let (mut context, layer) = test_context().await; + with_tracing!(layer, async { let (dput, build_info) = test_dput(&mut context, dput_test).await; test_monitoring( @@ -1738,15 +1736,14 @@ mod tests { prune_only_if_job_unsuccessful, ) .await; - }) - .await; + }); } #[rstest] #[tokio::test] - async fn test_variable_expansion(#[future] test_context: (TestContext, GitlabLayer)) { - let (mut context, layer) = test_context.await; - with_tracing(layer, async { + async fn test_variable_expansion() { + let (mut context, layer) = test_context().await; + with_tracing!(layer, async { let job = enqueue_job( &context, JobSpec { @@ -1770,15 +1767,14 @@ mod tests { job_log.lines().last().unwrap(), ";$ESCAPED;spaces should be preserved;recursion()" ); - }) - .await; + }); } #[rstest] #[tokio::test] - async fn test_flag_parsing(#[future] test_context: (TestContext, GitlabLayer)) { - let (mut context, layer) = test_context.await; - with_tracing(layer, async { + async fn test_flag_parsing() { + let (mut context, layer) = test_context().await; + with_tracing!(layer, async { let job = enqueue_job( &context, JobSpec { @@ -1835,8 +1831,7 @@ mod tests { run_obs_handler(&mut context).await; assert_eq!(job.state(), MockJobState::Failed); - }) - .await; + }); } #[derive(Debug, PartialEq, Eq)] @@ -1848,7 +1843,6 @@ mod tests { #[rstest] #[tokio::test] async fn test_generate_monitor_timeouts( - #[future] test_context: (TestContext, GitlabLayer), #[values( None, Some(GenerateMonitorTimeoutLocation::HandlerOption), @@ -1858,8 +1852,8 @@ mod tests { ) { const TEST_MONITOR_TIMEOUT: &str = "10 minutes"; - let (mut context, layer) = test_context.await; - with_tracing(layer, async { + let (mut context, layer) = test_context().await; + with_tracing!(layer, async { let build_info = ObsBuildInfo { project: TEST_PROJECT.to_owned(), package: TEST_PACKAGE_1.to_owned(), @@ -1943,7 +1937,6 @@ mod tests { } else { assert_none!(timeout_yaml); } - }) - .await; + }); } } From d51d990156bb364c4403f1006ed3aa278fe4cee3 Mon Sep 17 00:00:00 2001 From: Colin Kinloch Date: Wed, 26 Feb 2025 12:52:18 +0000 Subject: [PATCH 04/10] Update gitlab-runner-rs to 0.0.8 Requires async `UploadableFile::get_data` --- Cargo.lock | 87 +++++++++------ Cargo.toml | 4 +- src/binaries.rs | 30 ++--- src/handler.rs | 292 +++++++++++++++++++++++++++--------------------- src/monitor.rs | 25 +++-- src/pipeline.rs | 14 ++- 6 files changed, 262 insertions(+), 190 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b377816..a6c8f2d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -242,13 +242,13 @@ checksum = "677d306121baf53310a3fd342d88dc0824f6bbeace68347593658525565abee8" [[package]] name = "async-trait" -version = "0.1.52" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.98", ] [[package]] @@ -537,7 +537,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.86", ] [[package]] @@ -712,7 +712,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" dependencies = [ "quote", - "syn", + "syn 1.0.86", ] [[package]] @@ -746,7 +746,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.86", ] [[package]] @@ -962,7 +962,7 @@ checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.86", ] [[package]] @@ -1051,14 +1051,14 @@ checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "gitlab-runner" -version = "0.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9c03f6aa98ae8a13e2e860bdf4fc6b4a7cb09e97d2cc9370f689e6690077c0" +version = "0.0.8" dependencies = [ "async-trait", "bytes", "doc-comment", + "flate2", "futures", + "glob", "parking_lot", "pin-project", "reqwest", @@ -1076,9 +1076,7 @@ dependencies = [ [[package]] name = "gitlab-runner-mock" -version = "0.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c7009ddc9128fe6e5ba158e9e08fc93d6db11f1ee83d34374138f22a1e4419c" +version = "0.0.8" dependencies = [ "http-types", "multipart", @@ -1089,6 +1087,12 @@ dependencies = [ "wiremock", ] +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + [[package]] name = "gloo-timers" version = "0.2.3" @@ -1794,7 +1798,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.86", ] [[package]] @@ -1950,7 +1954,7 @@ checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.86", ] [[package]] @@ -2019,7 +2023,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.86", "version_check 0.9.4", ] @@ -2042,11 +2046,11 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] @@ -2067,9 +2071,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.15" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2365,7 +2369,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.0", - "syn", + "syn 1.0.86", ] [[package]] @@ -2487,7 +2491,7 @@ checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.86", ] [[package]] @@ -2686,7 +2690,7 @@ dependencies = [ "quote", "serde", "serde_derive", - "syn", + "syn 1.0.86", ] [[package]] @@ -2702,7 +2706,7 @@ dependencies = [ "serde_derive", "serde_json", "sha1 0.6.1", - "syn", + "syn 1.0.86", ] [[package]] @@ -2742,7 +2746,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.86", ] [[package]] @@ -2755,7 +2759,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.86", ] [[package]] @@ -2775,6 +2779,17 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "syn" +version = "2.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "tempfile" version = "3.3.0" @@ -2821,7 +2836,7 @@ checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.86", ] [[package]] @@ -2896,7 +2911,7 @@ dependencies = [ "proc-macro2", "quote", "standback", - "syn", + "syn 1.0.86", ] [[package]] @@ -2954,7 +2969,7 @@ checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.86", ] [[package]] @@ -3024,7 +3039,7 @@ checksum = "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.86", ] [[package]] @@ -3151,6 +3166,12 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +[[package]] +name = "unicode-ident" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" + [[package]] name = "unicode-normalization" version = "0.1.19" @@ -3304,7 +3325,7 @@ dependencies = [ "log 0.4.14", "proc-macro2", "quote", - "syn", + "syn 1.0.86", "wasm-bindgen-shared", ] @@ -3338,7 +3359,7 @@ checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.86", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/Cargo.toml b/Cargo.toml index 6501b98..147f5dd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ tracing-error = "0.2" tracing-subscriber = { version = "0.3", features = ["default", "json"] } url = "2.2" -gitlab-runner = "0.0.7" +gitlab-runner = "0.0.8" # gitlab-runner = { path = "../gitlab-runner-rs/gitlab-runner" } open-build-service-api = { git = "https://github.com/collabora/open-build-service-rs" } # open-build-service-api = { path = "../open-build-service-rs/open-build-service-api" } @@ -43,7 +43,7 @@ rstest = "0.12" wiremock = "0.5" zip = "0.5" -gitlab-runner-mock = "0.0.5" +gitlab-runner-mock = "0.0.8" # gitlab-runner-mock = { path = "../gitlab-runner-rs/gitlab-runner-mock" } open-build-service-mock = { git = "https://github.com/collabora/open-build-service-rs" } # open-build-service-mock = { path = "../open-build-service-rs/open-build-service-mock" } diff --git a/src/binaries.rs b/src/binaries.rs index 4d5ef55..25b377b 100644 --- a/src/binaries.rs +++ b/src/binaries.rs @@ -1,9 +1,10 @@ -use std::{collections::HashMap, io}; +use std::{collections::HashMap, io, path::PathBuf}; use color_eyre::eyre::{Report, Result, WrapErr}; use futures_util::TryStreamExt; use open_build_service_api as obs; -use tokio::{fs::File as AsyncFile, io::AsyncSeekExt}; +use tempfile::NamedTempFile; +use tokio::fs::File as AsyncFile; use tokio_util::compat::FuturesAsyncReadCompatExt; use tracing::{info_span, instrument, Instrument}; @@ -16,7 +17,7 @@ pub async fn download_binaries( package: &str, repository: &str, arch: &str, -) -> Result> { +) -> Result> { let binary_list = retry_request(|| async { client .project(project.to_owned()) @@ -28,13 +29,11 @@ pub async fn download_binaries( let mut binaries = HashMap::new(); for binary in binary_list.binaries { - let mut dest = retry_request(|| { + let path = retry_request(|| { let binary = binary.clone(); let client = client.clone(); async move { - let mut dest = AsyncFile::from_std( - tempfile::tempfile().wrap_err("Failed to create temporary file")?, - ); + let (file, path) = NamedTempFile::new()?.keep()?; let stream = client .project(project.to_owned()) @@ -48,20 +47,17 @@ pub async fn download_binaries( .map_err(|e| io::Error::new(io::ErrorKind::Other, e)) .into_async_read() .compat(), - &mut dest, + &mut AsyncFile::from_std(file), ) .await .wrap_err("Failed to download file")?; - Ok::(dest) + Ok::(path) } }) .instrument(info_span!("download_binaries:download", ?binary)) .await?; - dest.rewind() - .instrument(info_span!("download_binaries:rewind", ?binary)) - .await?; - binaries.insert(binary.filename, dest); + binaries.insert(binary.filename, path); } Ok(binaries) @@ -123,7 +119,13 @@ mod tests { let binary = assert_some!(binaries.get_mut(test_file)); let mut contents = String::new(); - assert_ok!(binary.read_to_string(&mut contents).await); + assert_ok!( + AsyncFile::open(binary) + .await + .unwrap() + .read_to_string(&mut contents) + .await + ); assert_eq!(contents, test_contents); } } diff --git a/src/handler.rs b/src/handler.rs index a47d741..85dc622 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -2,7 +2,9 @@ use std::{ borrow::Cow, collections::{HashMap, HashSet}, fs::File, + hash::{Hash, Hasher}, io::SeekFrom, + path::PathBuf, }; use async_trait::async_trait; @@ -10,17 +12,19 @@ use camino::Utf8PathBuf; use clap::{Parser, Subcommand}; use color_eyre::eyre::{eyre, Context, Result}; use derivative::*; -use futures_util::StreamExt; +use futures_util::{AsyncRead, StreamExt}; use gitlab_runner::{ job::{Dependency, Job, Variable}, - outputln, - uploader::Uploader, - JobHandler, JobResult, Phase, + outputln, JobHandler, JobResult, Phase, UploadableFile, }; use open_build_service_api as obs; use serde::{Deserialize, Serialize}; +use tempfile::NamedTempFile; use tokio::{fs::File as AsyncFile, io::AsyncSeekExt}; -use tokio_util::{compat::FuturesAsyncWriteCompatExt, io::ReaderStream}; +use tokio_util::{ + compat::TokioAsyncReadCompatExt, + io::ReaderStream, +}; use tracing::{debug, error, instrument}; use crate::{ @@ -177,12 +181,84 @@ struct ObsBuildInfo { enabled_repos: HashMap, } +#[derive(Clone, Debug)] +pub struct StringFile { + path: String, + content: String, +} + +// To avoid duplicate files for HashSet of artifacts match and hash paths only +impl PartialEq for StringFile { + fn eq(&self, other: &Self) -> bool { + self.path == other.path + } +} +impl Eq for StringFile {} + +impl Hash for StringFile { + fn hash(&self, state: &mut H) { + self.path.hash(state); + } +} + +#[async_trait] +impl UploadableFile for StringFile { + type Data<'a> = &'a [u8]; + + fn get_path(&self) -> Cow<'_, str> { + self.path.clone().into() + } + + async fn get_data(&self) -> Result, ()> { + Ok(self.content.as_bytes()) + } +} + +#[derive(Debug, Clone)] +pub struct PathArtifact { + pub real_path: PathBuf, + pub path: String, +} + +impl PartialEq for PathArtifact { + fn eq(&self, other: &Self) -> bool { + self.path == other.path + } +} + +impl Eq for PathArtifact {} + +impl Hash for PathArtifact { + fn hash(&self, state: &mut H) { + self.path.hash(state); + } +} + +#[async_trait] +impl UploadableFile for PathArtifact { + type Data<'a> = Box; + + fn get_path(&self) -> Cow<'_, str> { + self.path.clone().into() + } + + async fn get_data(&self) -> Result, ()> { + let file = AsyncFile::open(&self.real_path).await.map_err(|_| {})?; + Ok(Box::new(file.compat())) + } +} + impl ObsBuildInfo { #[instrument] - fn save(&self) -> Result { - let mut file = tempfile::tempfile().wrap_err("Failed to create build info file")?; - serde_yaml::to_writer(&mut file, self).wrap_err("Failed to write build info file")?; - Ok(file) + fn save(&self) -> Result { + let mut temp_file = + NamedTempFile::new().wrap_err("Failed to create file for build info")?; + serde_yaml::to_writer(temp_file.as_file_mut(), self) + .wrap_err("Failed to write build yaml to file")?; + let (_file, path) = temp_file + .keep() + .wrap_err("Failed to keep build info file")?; + Ok(path) } } @@ -219,7 +295,7 @@ pub struct ObsJobHandler { options: HandlerOptions, script_failed: bool, - artifacts: HashMap, + artifacts: HashSet, } impl ObsJobHandler { @@ -229,7 +305,7 @@ impl ObsJobHandler { client, options, script_failed: false, - artifacts: HashMap::new(), + artifacts: HashSet::new(), } } @@ -305,12 +381,12 @@ impl ObsJobHandler { debug!("Saving initial build info: {:?}", build_info); let build_info_2 = build_info.clone(); - let build_info_file = tokio::task::spawn_blocking(move || build_info_2.save()).await??; + let build_info_path = tokio::task::spawn_blocking(move || build_info_2.save()).await??; - self.artifacts.insert( - args.build_info_out.clone(), - AsyncFile::from_std(build_info_file), - ); + self.artifacts.replace(PathArtifact { + path: args.build_info_out.clone(), + real_path: build_info_path, + }); let initial_build_meta = BuildMeta::get_if_package_exists( self.client.clone(), @@ -386,9 +462,11 @@ impl ObsJobHandler { }; debug!("Saving complete build info: {:?}", build_info); - let build_info_file = tokio::task::spawn_blocking(move || build_info.save()).await??; - self.artifacts - .insert(args.build_info_out, AsyncFile::from_std(build_info_file)); + let build_info_path = tokio::task::spawn_blocking(move || build_info.save()).await??; + self.artifacts.replace(PathArtifact { + path: args.build_info_out.clone(), + real_path: build_info_path, + }); Ok(()) } @@ -399,7 +477,7 @@ impl ObsJobHandler { let build_info: ObsBuildInfo = serde_yaml::from_slice(&build_info_data[..]) .wrap_err("Failed to parse provided build info file")?; - let file = generate_monitor_pipeline( + let path = generate_monitor_pipeline( &build_info.project, &build_info.package, &build_info @@ -427,8 +505,10 @@ impl ObsJobHandler { build_log_out: args.build_log_out.to_string(), }, )?; - self.artifacts - .insert(args.pipeline_out.clone(), AsyncFile::from_std(file)); + self.artifacts.replace(PathArtifact { + path: args.pipeline_out.clone(), + real_path: path, + }); outputln!("Wrote pipeline file '{}'.", args.pipeline_out); @@ -455,15 +535,11 @@ impl ObsJobHandler { .await?; debug!("Completed with: {:?}", completion); - let mut log_file = monitor.download_build_log().await?; - self.artifacts.insert( - args.build_log_out.clone(), - log_file - .file - .try_clone() - .await - .wrap_err("Failed to clone log file")?, - ); + let log_file = monitor.download_build_log().await?; + self.artifacts.replace(PathArtifact { + path: args.build_log_out.clone(), + real_path: log_file.path.clone(), + }); match completion { PackageCompletion::Succeeded => { @@ -476,15 +552,14 @@ impl ObsJobHandler { outputln!("Package is disabled for this architecture."); } PackageCompletion::Failed(reason) => { - log_file - .file - .seek(SeekFrom::End( - -(std::cmp::min(self.options.log_tail, log_file.len) as i64), - )) - .await - .wrap_err("Failed to find length of log file")?; + let mut file = AsyncFile::open(log_file.path).await?; + file.seek(SeekFrom::End( + -(std::cmp::min(self.options.log_tail, log_file.len) as i64), + )) + .await + .wrap_err("Failed to find length of log file")?; - let mut log_stream = ReaderStream::new(log_file.file); + let mut log_stream = ReaderStream::new(file); while let Some(bytes) = log_stream.next().await { let bytes = bytes.wrap_err("Failed to stream log bytes")?; self.job.trace(String::from_utf8_lossy(&bytes).as_ref()); @@ -519,11 +594,11 @@ impl ObsJobHandler { .await?; let binary_count = binaries.len(); - self.artifacts.extend( - binaries - .into_iter() - .map(|(path, file)| (args.build_results_dir.join(path).to_string(), file)), - ); + self.artifacts + .extend(binaries.into_iter().map(|(path, real_path)| PathArtifact { + path: args.build_results_dir.join(path).to_string(), + real_path, + })); outputln!("Downloaded {} artifact(s).", binary_count); Ok(()) @@ -607,24 +682,8 @@ impl ObsJobHandler { } } -#[instrument(skip(file, uploader))] -async fn upload_artifact( - name: String, - file: &mut AsyncFile, - uploader: &mut Uploader, -) -> Result<()> { - let dest = uploader.file(name).await; - - file.rewind().await.wrap_err("Failed to rewind artifact")?; - tokio::io::copy(file, &mut dest.compat_write()) - .await - .wrap_err("Failed to copy artifact contents")?; - - Ok(()) -} - #[async_trait] -impl JobHandler for ObsJobHandler { +impl JobHandler for ObsJobHandler { async fn step(&mut self, script: &[String], _phase: Phase) -> JobResult { for command in script { if let Err(err) = self.command(command).await { @@ -642,21 +701,10 @@ impl JobHandler for ObsJobHandler { Ok(()) } - async fn upload_artifacts(&mut self, uploader: &mut Uploader) -> JobResult { - let mut success = true; - - for (name, file) in &mut self.artifacts { - if let Err(err) = upload_artifact(name.clone(), file, uploader).await { - error!(gitlab.output = true, "Failed to upload {}: {:?}", name, err); - success = false; - } - } - - if success { - Ok(()) - } else { - Err(()) - } + async fn get_uploadable_files( + &mut self, + ) -> Result + Send>, ()> { + Ok(Box::new(self.artifacts.clone().into_iter())) } } @@ -689,12 +737,8 @@ impl ArtifactDirectory for ObsJobHandler { #[instrument(skip(self))] async fn get_file_or_none(&self, filename: &str) -> Result> { - if let Some(file) = self.artifacts.get(filename) { - let mut file = file - .try_clone() - .await - .wrap_err("Failed to clone artifact")?; - file.rewind().await.wrap_err("Failed to rewind artifact")?; + if let Some(artifact) = self.artifacts.iter().find(|a| a.path == filename) { + let file = AsyncFile::open(&artifact.real_path).await?; return Ok(Some(file)); } @@ -727,7 +771,6 @@ mod tests { use camino::Utf8Path; use claim::*; - use futures_util::AsyncWriteExt; use gitlab_runner::Runner; use gitlab_runner_mock::*; use open_build_service_mock::*; @@ -880,9 +923,10 @@ mod tests { job } - async fn run_handler(context: &mut TestContext, handler_func: Func) + async fn run_handler(context: &mut TestContext, handler_func: Func) where - H: JobHandler + Send + 'static, + U: UploadableFile + Send + 'static, + H: JobHandler + Send + 'static, Func: (FnOnce(Job) -> H) + Send + Sync + 'static, { let got_job = context @@ -894,29 +938,24 @@ mod tests { context.runner.wait_for_space(1).await; } - struct PutArtifactsHandler { - artifacts: HashMap>, + struct PutArtifactsHandler { + artifacts: HashSet, } #[async_trait] - impl JobHandler for PutArtifactsHandler { + impl JobHandler for PutArtifactsHandler { async fn step(&mut self, _script: &[String], _phase: Phase) -> JobResult { Ok(()) } - async fn upload_artifacts(&mut self, uploader: &mut Uploader) -> JobResult { - for (name, content) in &self.artifacts { - let mut file = uploader.file(name.clone()).await; - file.write_all(content).await.unwrap(); - } - - Ok(()) + async fn get_uploadable_files(&mut self) -> Result + Send>, ()> { + Ok(Box::new(self.artifacts.clone().into_iter())) } } - async fn put_artifacts( + async fn put_artifacts( context: &mut TestContext, - artifacts: HashMap>, + artifacts: HashSet, ) -> MockJob { let artifacts_job = enqueue_job( context, @@ -926,29 +965,32 @@ mod tests { ..Default::default() }, ); - run_handler(context, |_| PutArtifactsHandler { artifacts }).await; + run_handler(context, |_| PutArtifactsHandler:: { artifacts }).await; artifacts_job } fn get_job_artifacts(job: &MockJob) -> HashMap> { - let data = (*job.artifact()).clone(); - if data.is_empty() { - return HashMap::new(); - } + let mut file_map = HashMap::new(); + for artifact in job.uploaded_artifacts() { + let data = artifact.data.as_ref(); + + if data.is_empty() { + continue; + } - let cursor = Cursor::new(data); - let mut zip = ZipArchive::new(cursor).unwrap(); + let cursor = Cursor::new(data); + let mut zip = ZipArchive::new(cursor).unwrap(); - (0..zip.len()) - .map(|i| { + file_map.extend((0..zip.len()).map(|i| { let mut file = zip.by_index(i).unwrap(); let mut contents = vec![]; file.read_to_end(&mut contents).unwrap(); (file.name().to_owned(), contents) - }) - .collect() + })); + } + file_map } async fn run_obs_handler_with_options(context: &mut TestContext, options: HandlerOptions) { @@ -974,6 +1016,10 @@ mod tests { let test1_file = "test1"; let test1_contents = b"123"; let test1_md5 = compute_md5(test1_contents); + let test1 = StringFile { + path: test1_file.to_owned(), + content: String::from_utf8(test1_contents.into()).unwrap(), + }; let dsc1_file = "test1.dsc"; let dsc1_contents = format!( @@ -984,10 +1030,18 @@ mod tests { test1_file ); let dsc1_md5 = compute_md5(dsc1_contents.as_bytes()); + let dsc1 = StringFile { + path: dsc1_file.to_owned(), + content: dsc1_contents.clone(), + }; let dsc1_bad_file = "test1-bad.dsc"; let dsc1_bad_contents = dsc1_contents.replace(test1_file, &(test1_file.to_owned() + ".missing")); + let dsc1_bad = StringFile { + path: dsc1_bad_file.to_owned(), + content: dsc1_bad_contents, + }; context.obs_mock.add_project(TEST_PROJECT.to_owned()); @@ -1022,19 +1076,7 @@ mod tests { ); } - let artifacts = put_artifacts( - context, - [ - (dsc1_file.to_owned(), dsc1_contents.as_bytes().to_vec()), - ( - dsc1_bad_file.to_owned(), - dsc1_bad_contents.as_bytes().to_vec(), - ), - (test1_file.to_owned(), test1_contents.to_vec()), - ] - .into(), - ) - .await; + let artifacts = put_artifacts(context, [dsc1, dsc1_bad, test1].into()).await; let mut dput_command = format!("dput {} {}", TEST_PROJECT, dsc1_file); let mut created_project = TEST_PROJECT.to_owned(); @@ -1874,10 +1916,10 @@ mod tests { let build_info = put_artifacts( &mut context, - [( - DEFAULT_BUILD_INFO.to_owned(), - serde_yaml::to_vec(&build_info).unwrap(), - )] + [StringFile { + path: DEFAULT_BUILD_INFO.to_owned(), + content: serde_yaml::to_string(&build_info).unwrap(), + }] .into(), ) .await; diff --git a/src/monitor.rs b/src/monitor.rs index 2b31e46..d75abe7 100644 --- a/src/monitor.rs +++ b/src/monitor.rs @@ -1,10 +1,11 @@ -use std::time::Duration; +use std::{path::PathBuf, time::Duration}; use color_eyre::eyre::{ensure, eyre, Context, Report, Result}; use derivative::*; use futures_util::stream::StreamExt; use gitlab_runner::outputln; use open_build_service_api as obs; +use tempfile::NamedTempFile; use tokio::{ fs::File as AsyncFile, io::{AsyncReadExt, AsyncSeekExt, AsyncWriteExt}, @@ -30,7 +31,7 @@ enum PackageBuildState { #[derive(Debug)] pub struct LogFile { - pub file: AsyncFile, + pub path: PathBuf, pub len: u64, } @@ -245,10 +246,10 @@ impl ObsMonitor { pub async fn download_build_log(&self) -> Result { const LOG_LEN_TO_CHECK_FOR_MD5: u64 = 2500; - let mut file = retry_request(|| async { - let mut file = AsyncFile::from_std( - tempfile::tempfile().wrap_err("Failed to create tempfile to build log")?, - ); + let (mut file, path) = retry_request(|| async { + let temp_file = NamedTempFile::new()?; + let (file, path) = temp_file.keep()?; + let mut file = AsyncFile::from_std(file); let mut stream = self .client .project(self.package.project.clone()) @@ -263,7 +264,7 @@ impl ObsMonitor { .wrap_err("Failed to download build log")?; } - Ok::(file) + Ok::<(AsyncFile, PathBuf), Report>((file, path)) }) .await?; @@ -279,8 +280,7 @@ impl ObsMonitor { .wrap_err("Failed to read start of logs")?; self.check_log_md5(&String::from_utf8_lossy(&buf))?; - file.rewind().await.wrap_err("Failed to rewind file")?; - Ok(LogFile { file, len }) + Ok(LogFile { path, len }) } } @@ -428,11 +428,14 @@ mod tests { }, ); - let mut log_file = assert_ok!(monitor.download_build_log().await); + let log_file = assert_ok!(monitor.download_build_log().await); assert_eq!(log_file.len, log_content.len() as u64); let mut log = "".to_owned(); - assert_ok!(log_file.file.read_to_string(&mut log).await); + let mut file = AsyncFile::open(log_file.path) + .await + .expect("Failed to open log file"); + assert_ok!(file.read_to_string(&mut log).await); assert_eq!(log, log_content); let new_srcmd5 = random_md5(); diff --git a/src/pipeline.rs b/src/pipeline.rs index 247cede..1929ac5 100644 --- a/src/pipeline.rs +++ b/src/pipeline.rs @@ -1,7 +1,8 @@ -use std::{collections::HashMap, fs::File}; +use std::{collections::HashMap, path::PathBuf}; use color_eyre::eyre::{Context, Result}; use serde::Serialize; +use tempfile::NamedTempFile; use tracing::instrument; use crate::build_meta::{CommitBuildInfo, RepoArch}; @@ -61,7 +62,7 @@ pub fn generate_monitor_pipeline( srcmd5: &str, enabled_repos: &HashMap, options: GeneratePipelineOptions, -) -> Result { +) -> Result { let rules: Option = options .rules .as_deref() @@ -129,8 +130,11 @@ pub fn generate_monitor_pipeline( } // TODO: check this blocking file write & any others - let mut file = tempfile::tempfile().wrap_err("Failed to create temp file")?; - serde_yaml::to_writer(&mut file, &jobs).wrap_err("Failed to serialize jobs")?; + // TODO: Should this just be a StringFile?, it's yaml, how big can it be? + // We can't do that because the Job struct specifies TempFileArtifact + let mut temp_file = NamedTempFile::new().wrap_err("Failed to create temp file")?; + serde_yaml::to_writer(temp_file.as_file_mut(), &jobs).wrap_err("Failed to serialize jobs")?; + let (_file, path) = temp_file.keep()?; - Ok(file) + Ok(path) } From dab2198f4da2e07d7c620666423fedbeaad0bed6 Mon Sep 17 00:00:00 2001 From: Colin Kinloch Date: Thu, 27 Feb 2025 19:07:55 +0000 Subject: [PATCH 05/10] Add UploadableFile for file or in memory artifacts Add lifetime to `ArtifactDirectory` `Reader` to avoid copying. --- src/artifacts.rs | 23 +++--- src/handler.rs | 188 ++++++++++++++++++++++++----------------------- src/pipeline.rs | 14 +--- 3 files changed, 112 insertions(+), 113 deletions(-) diff --git a/src/artifacts.rs b/src/artifacts.rs index 4fe86c2..619fc2e 100644 --- a/src/artifacts.rs +++ b/src/artifacts.rs @@ -24,28 +24,31 @@ pub async fn async_save_to_tempfile(mut reader: R) -> #[async_trait] pub trait ArtifactDirectory: Send + Sync { - type Reader: Read + Send + 'static; + type Reader<'a>: Read + Send + where + Self: 'a; - async fn get_or_none(&self, filename: &str) -> Result>; + async fn get_or_none(&self, filename: &str) -> Result>>; - async fn get(&self, filename: &str) -> Result { + async fn get(&self, filename: &str) -> Result> { self.get_or_none(filename) .await? .ok_or_else(|| eyre!("Could not find artifact '{}'", filename)) } async fn get_file_or_none(&self, filename: &str) -> Result> { - let reader = self.get_or_none(filename).await?; - Ok(if let Some(reader) = reader { - Some(async_save_to_tempfile(reader).await?) + let mut reader = self.get_or_none(filename).await?; + Ok(if let Some(reader) = &mut reader { + Some(AsyncFile::from_std(save_to_tempfile(reader)?)) } else { None }) } async fn get_file(&self, filename: &str) -> Result { - let reader = self.get(filename).await?; - async_save_to_tempfile(reader).await + self.get_file_or_none(filename) + .await? + .ok_or_else(|| eyre!("Could not find artifact '{}'", filename)) } async fn get_data_or_none(&self, filename: &str) -> Result>> { @@ -98,9 +101,9 @@ pub mod test_support { #[async_trait] impl ArtifactDirectory for MockArtifactDirectory { - type Reader = MockArtifactReader; + type Reader<'a> = MockArtifactReader; - async fn get_or_none(&self, filename: &str) -> Result> { + async fn get_or_none(&self, filename: &str) -> Result>> { Ok(self .artifacts .get(filename) diff --git a/src/handler.rs b/src/handler.rs index 85dc622..5f9a5fe 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -12,7 +12,7 @@ use camino::Utf8PathBuf; use clap::{Parser, Subcommand}; use color_eyre::eyre::{eyre, Context, Result}; use derivative::*; -use futures_util::{AsyncRead, StreamExt}; +use futures_util::{io::Cursor, AsyncRead, StreamExt}; use gitlab_runner::{ job::{Dependency, Job, Variable}, outputln, JobHandler, JobResult, Phase, UploadableFile, @@ -21,11 +21,8 @@ use open_build_service_api as obs; use serde::{Deserialize, Serialize}; use tempfile::NamedTempFile; use tokio::{fs::File as AsyncFile, io::AsyncSeekExt}; -use tokio_util::{ - compat::TokioAsyncReadCompatExt, - io::ReaderStream, -}; -use tracing::{debug, error, instrument}; +use tokio_util::{compat::TokioAsyncReadCompatExt, io::ReaderStream}; +use tracing::{debug, error, instrument, warn}; use crate::{ artifacts::{save_to_tempfile, ArtifactDirectory}, @@ -182,69 +179,64 @@ struct ObsBuildInfo { } #[derive(Clone, Debug)] -pub struct StringFile { +pub struct ObsArtifact { path: String, - content: String, -} - -// To avoid duplicate files for HashSet of artifacts match and hash paths only -impl PartialEq for StringFile { - fn eq(&self, other: &Self) -> bool { - self.path == other.path - } + inner: ObsArtifactInner, } -impl Eq for StringFile {} -impl Hash for StringFile { - fn hash(&self, state: &mut H) { - self.path.hash(state); - } +#[derive(Clone, Debug)] +enum ObsArtifactInner { + File(PathBuf), + String(String), } -#[async_trait] -impl UploadableFile for StringFile { - type Data<'a> = &'a [u8]; - - fn get_path(&self) -> Cow<'_, str> { - self.path.clone().into() +impl ObsArtifact { + fn new_file(path: String, real_path: PathBuf) -> Self { + Self { + path, + inner: ObsArtifactInner::File(real_path), + } } - async fn get_data(&self) -> Result, ()> { - Ok(self.content.as_bytes()) + fn new_string(path: String, string: String) -> Self { + Self { + path, + inner: ObsArtifactInner::String(string), + } } } -#[derive(Debug, Clone)] -pub struct PathArtifact { - pub real_path: PathBuf, - pub path: String, -} - -impl PartialEq for PathArtifact { +// To avoid duplicate files for HashSet of artifacts match and hash paths only +impl PartialEq for ObsArtifact { fn eq(&self, other: &Self) -> bool { self.path == other.path } } +impl Eq for ObsArtifact {} -impl Eq for PathArtifact {} - -impl Hash for PathArtifact { +impl Hash for ObsArtifact { fn hash(&self, state: &mut H) { self.path.hash(state); } } #[async_trait] -impl UploadableFile for PathArtifact { +impl UploadableFile for ObsArtifact { type Data<'a> = Box; fn get_path(&self) -> Cow<'_, str> { - self.path.clone().into() + (&self.path).into() } async fn get_data(&self) -> Result, ()> { - let file = AsyncFile::open(&self.real_path).await.map_err(|_| {})?; - Ok(Box::new(file.compat())) + use ObsArtifactInner::*; + match &self.inner { + File(path) => { + let file = AsyncFile::open(path).await.map_err(|_| {})?; + Ok(Box::new(file.compat())) + } + String(data) => Ok(Box::new(Cursor::new(data.to_owned()))), + } } } @@ -295,7 +287,7 @@ pub struct ObsJobHandler { options: HandlerOptions, script_failed: bool, - artifacts: HashSet, + artifacts: HashSet, } impl ObsJobHandler { @@ -383,10 +375,10 @@ impl ObsJobHandler { let build_info_2 = build_info.clone(); let build_info_path = tokio::task::spawn_blocking(move || build_info_2.save()).await??; - self.artifacts.replace(PathArtifact { - path: args.build_info_out.clone(), - real_path: build_info_path, - }); + self.artifacts.replace(ObsArtifact::new_file( + args.build_info_out.clone(), + build_info_path, + )); let initial_build_meta = BuildMeta::get_if_package_exists( self.client.clone(), @@ -463,10 +455,8 @@ impl ObsJobHandler { debug!("Saving complete build info: {:?}", build_info); let build_info_path = tokio::task::spawn_blocking(move || build_info.save()).await??; - self.artifacts.replace(PathArtifact { - path: args.build_info_out.clone(), - real_path: build_info_path, - }); + self.artifacts + .replace(ObsArtifact::new_file(args.build_info_out, build_info_path)); Ok(()) } @@ -477,7 +467,7 @@ impl ObsJobHandler { let build_info: ObsBuildInfo = serde_yaml::from_slice(&build_info_data[..]) .wrap_err("Failed to parse provided build info file")?; - let path = generate_monitor_pipeline( + let job_yaml = generate_monitor_pipeline( &build_info.project, &build_info.package, &build_info @@ -505,10 +495,9 @@ impl ObsJobHandler { build_log_out: args.build_log_out.to_string(), }, )?; - self.artifacts.replace(PathArtifact { - path: args.pipeline_out.clone(), - real_path: path, - }); + + self.artifacts + .replace(ObsArtifact::new_string(args.pipeline_out.clone(), job_yaml)); outputln!("Wrote pipeline file '{}'.", args.pipeline_out); @@ -536,10 +525,10 @@ impl ObsJobHandler { debug!("Completed with: {:?}", completion); let log_file = monitor.download_build_log().await?; - self.artifacts.replace(PathArtifact { - path: args.build_log_out.clone(), - real_path: log_file.path.clone(), - }); + self.artifacts.replace(ObsArtifact::new_file( + args.build_log_out.clone(), + log_file.path.clone(), + )); match completion { PackageCompletion::Succeeded => { @@ -595,9 +584,11 @@ impl ObsJobHandler { let binary_count = binaries.len(); self.artifacts - .extend(binaries.into_iter().map(|(path, real_path)| PathArtifact { - path: args.build_results_dir.join(path).to_string(), - real_path, + .extend(binaries.into_iter().map(|(path, real_path)| { + ObsArtifact::new_file( + args.build_results_dir.join(path).to_string(), + real_path.clone(), + ) })); outputln!("Downloaded {} artifact(s).", binary_count); @@ -683,7 +674,7 @@ impl ObsJobHandler { } #[async_trait] -impl JobHandler for ObsJobHandler { +impl JobHandler for ObsJobHandler { async fn step(&mut self, script: &[String], _phase: Phase) -> JobResult { for command in script { if let Err(err) = self.command(command).await { @@ -703,7 +694,7 @@ impl JobHandler for ObsJobHandler { async fn get_uploadable_files( &mut self, - ) -> Result + Send>, ()> { + ) -> Result + Send>, ()> { Ok(Box::new(self.artifacts.clone().into_iter())) } } @@ -733,30 +724,47 @@ async fn check_for_artifact(dep: Dependency<'_>, filename: &str) -> Result = Box; #[instrument(skip(self))] - async fn get_file_or_none(&self, filename: &str) -> Result> { - if let Some(artifact) = self.artifacts.iter().find(|a| a.path == filename) { - let file = AsyncFile::open(&artifact.real_path).await?; - return Ok(Some(file)); + async fn get_or_none(&self, filename: &str) -> Result>> { + if let Some(artifact) = self.artifacts.iter().find(|&a| a.path == filename) { + match &artifact.inner { + ObsArtifactInner::File(path) => return Ok(Some(Box::new(File::open(path)?))), + ObsArtifactInner::String(data) => { + return Ok(Some(Box::new(std::io::Cursor::new(data.as_bytes())))); + } + } } for dep in self.job.dependencies() { if let Some(file) = check_for_artifact(dep, filename).await? { - return Ok(Some(file)); + return Ok(Some(Box::new(file.try_into_std().unwrap()))); } } Ok(None) } - #[instrument(skip(self))] - async fn get_or_none(&self, filename: &str) -> Result> { - Ok(self - .get_file_or_none(filename) - .await? - .map(|f| f.try_into_std().unwrap())) + async fn get_file_or_none(&self, filename: &str) -> Result> { + if let Some(artifact) = self.artifacts.iter().find(|&a| a.path == filename) { + match &artifact.inner { + ObsArtifactInner::File(path) => return Ok(Some(AsyncFile::open(path).await?)), + ObsArtifactInner::String(data) => { + return Ok(Some(AsyncFile::from_std(save_to_tempfile( + &mut data.as_bytes(), + )?))); + } + } + } + + for dep in self.job.dependencies() { + if let Some(file) = check_for_artifact(dep, filename).await? { + return Ok(Some(file)); + } + } + + Ok(None) } } @@ -1016,10 +1024,10 @@ mod tests { let test1_file = "test1"; let test1_contents = b"123"; let test1_md5 = compute_md5(test1_contents); - let test1 = StringFile { - path: test1_file.to_owned(), - content: String::from_utf8(test1_contents.into()).unwrap(), - }; + let test1 = ObsArtifact::new_string( + test1_file.to_owned(), + std::str::from_utf8(test1_contents).unwrap().to_owned(), + ); let dsc1_file = "test1.dsc"; let dsc1_contents = format!( @@ -1030,18 +1038,12 @@ mod tests { test1_file ); let dsc1_md5 = compute_md5(dsc1_contents.as_bytes()); - let dsc1 = StringFile { - path: dsc1_file.to_owned(), - content: dsc1_contents.clone(), - }; + let dsc1 = ObsArtifact::new_string(dsc1_file.to_owned(), dsc1_contents.clone()); let dsc1_bad_file = "test1-bad.dsc"; let dsc1_bad_contents = dsc1_contents.replace(test1_file, &(test1_file.to_owned() + ".missing")); - let dsc1_bad = StringFile { - path: dsc1_bad_file.to_owned(), - content: dsc1_bad_contents, - }; + let dsc1_bad = ObsArtifact::new_string(dsc1_bad_file.to_owned(), dsc1_bad_contents); context.obs_mock.add_project(TEST_PROJECT.to_owned()); @@ -1916,10 +1918,10 @@ mod tests { let build_info = put_artifacts( &mut context, - [StringFile { - path: DEFAULT_BUILD_INFO.to_owned(), - content: serde_yaml::to_string(&build_info).unwrap(), - }] + [ObsArtifact::new_string( + DEFAULT_BUILD_INFO.to_owned(), + serde_yaml::to_string(&build_info).unwrap(), + )] .into(), ) .await; diff --git a/src/pipeline.rs b/src/pipeline.rs index 1929ac5..913e151 100644 --- a/src/pipeline.rs +++ b/src/pipeline.rs @@ -1,8 +1,7 @@ -use std::{collections::HashMap, path::PathBuf}; +use std::collections::HashMap; use color_eyre::eyre::{Context, Result}; use serde::Serialize; -use tempfile::NamedTempFile; use tracing::instrument; use crate::build_meta::{CommitBuildInfo, RepoArch}; @@ -62,7 +61,7 @@ pub fn generate_monitor_pipeline( srcmd5: &str, enabled_repos: &HashMap, options: GeneratePipelineOptions, -) -> Result { +) -> Result { let rules: Option = options .rules .as_deref() @@ -129,12 +128,7 @@ pub fn generate_monitor_pipeline( ); } - // TODO: check this blocking file write & any others - // TODO: Should this just be a StringFile?, it's yaml, how big can it be? - // We can't do that because the Job struct specifies TempFileArtifact - let mut temp_file = NamedTempFile::new().wrap_err("Failed to create temp file")?; - serde_yaml::to_writer(temp_file.as_file_mut(), &jobs).wrap_err("Failed to serialize jobs")?; - let (_file, path) = temp_file.keep()?; + let string = serde_yaml::to_string(&jobs).wrap_err("Failed to serialize jobs")?; - Ok(path) + Ok(string) } From 671a29b4d3e38254ffcdb079d46949ca8f007318 Mon Sep 17 00:00:00 2001 From: Colin Kinloch Date: Thu, 27 Feb 2025 19:35:17 +0000 Subject: [PATCH 06/10] Update gitlab-runner-rs to 0.0.9 Requires async `UploadableFile::get_data` --- Cargo.lock | 1313 ++++++++++++++++++++++++------------------------ Cargo.toml | 4 +- src/handler.rs | 26 +- src/main.rs | 8 +- 4 files changed, 671 insertions(+), 680 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a6c8f2d..c10304e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -92,20 +92,11 @@ dependencies = [ "memchr", ] -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "anyhow" -version = "1.0.53" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" +checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" [[package]] name = "arrayvec" @@ -113,12 +104,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" -[[package]] -name = "ascii" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97be891acc47ca214468e09425d02cef3af2c94d0d82081cd02061f996802f14" - [[package]] name = "assert-json-diff" version = "2.0.1" @@ -179,12 +164,12 @@ dependencies = [ "concurrent-queue", "futures-lite", "libc", - "log 0.4.14", + "log", "once_cell", "parking", "polling", "slab", - "socket2", + "socket2 0.4.4", "waker-fn", "winapi", ] @@ -224,7 +209,7 @@ dependencies = [ "futures-lite", "gloo-timers", "kv-log-macro", - "log 0.4.14", + "log", "memchr", "num_cpus", "once_cell", @@ -268,12 +253,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "autocfg" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" - [[package]] name = "autocfg" version = "1.0.1" @@ -323,19 +302,15 @@ checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" [[package]] name = "base64" -version = "0.9.3" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" -dependencies = [ - "byteorder", - "safemem", -] +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "base64" -version = "0.13.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" @@ -387,16 +362,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "buf_redux" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" -dependencies = [ - "memchr", - "safemem", -] - [[package]] name = "bumpalo" version = "3.16.0" @@ -411,9 +376,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.1.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "bzip2" @@ -477,12 +442,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "chunked_transfer" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498d20a7aaf62625b9bf26e637cf7736417cde1d0c99f1d04d1170229a85cf87" - [[package]] name = "cipher" version = "0.2.5" @@ -507,7 +466,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f81099d6bb72e1df6d50bb2347224b666a670912bb7f06dbe867a4a070ab3ce8" dependencies = [ - "autocfg 1.0.1", + "autocfg", ] [[package]] @@ -519,7 +478,7 @@ dependencies = [ "atty", "bitflags 1.2.1", "clap_derive", - "indexmap", + "indexmap 1.8.0", "lazy_static", "os_str_bytes", "strsim", @@ -540,15 +499,6 @@ dependencies = [ "syn 1.0.86", ] -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -dependencies = [ - "bitflags 1.2.1", -] - [[package]] name = "color-eyre" version = "0.6.0" @@ -618,11 +568,11 @@ dependencies = [ "base64 0.13.0", "hkdf", "hmac 0.10.1", - "percent-encoding 2.1.0", + "percent-encoding", "rand 0.8.5", "sha2 0.9.9", "time 0.2.27", - "version_check 0.9.4", + "version_check", ] [[package]] @@ -705,16 +655,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ctor" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" -dependencies = [ - "quote", - "syn 1.0.86", -] - [[package]] name = "ctr" version = "0.6.0" @@ -738,6 +678,33 @@ dependencies = [ "tokio", ] +[[package]] +name = "deadpool" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490" +dependencies = [ + "async-trait", + "deadpool-runtime", + "num_cpus", + "tokio", +] + +[[package]] +name = "deadpool-runtime" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "derivative" version = "2.2.0" @@ -760,9 +727,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.3" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.2", "crypto-common", @@ -811,6 +778,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + [[package]] name = "event-listener" version = "2.5.2" @@ -882,15 +855,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" dependencies = [ "matches", - "percent-encoding 2.1.0", + "percent-encoding", ] -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - [[package]] name = "futures" version = "0.3.21" @@ -908,9 +875,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -918,9 +885,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" @@ -935,9 +902,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -956,26 +923,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 1.0.86", + "syn 2.0.98", ] [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -985,9 +952,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1008,7 +975,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" dependencies = [ "typenum", - "version_check 0.9.4", + "version_check", ] [[package]] @@ -1051,7 +1018,7 @@ checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "gitlab-runner" -version = "0.0.8" +version = "0.0.9" dependencies = [ "async-trait", "bytes", @@ -1059,32 +1026,37 @@ dependencies = [ "flate2", "futures", "glob", + "hmac 0.12.1", "parking_lot", "pin-project", - "reqwest", + "rand 0.8.5", + "reqwest 0.12.4", "serde", "serde_json", + "sha2 0.10.8", "tempfile", "thiserror", "tokio", - "tokio-util 0.7.0", + "tokio-util 0.7.13", "tracing", "tracing-subscriber", - "url 2.2.2", + "url", + "vergen", "zip 0.6.2", ] [[package]] name = "gitlab-runner-mock" -version = "0.0.8" +version = "0.0.9" dependencies = [ - "http-types", - "multipart", + "futures", + "http 1.2.0", + "multer", "serde", "serde_json", "thiserror", - "url 2.2.2", - "wiremock", + "url", + "wiremock 0.6.2", ] [[package]] @@ -1105,12 +1077,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "groupable" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32619942b8be646939eaf3db0602b39f5229b74575b67efc897811ded1db4e57" - [[package]] name = "h2" version = "0.3.11" @@ -1122,20 +1088,51 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", - "indexmap", + "http 0.2.6", + "indexmap 1.8.0", "slab", "tokio", "tokio-util 0.6.9", "tracing", ] +[[package]] +name = "h2" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.2.0", + "indexmap 2.7.1", + "slab", + "tokio", + "tokio-util 0.7.13", + "tracing", +] + [[package]] name = "hashbrown" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + [[package]] name = "heck" version = "0.3.3" @@ -1186,7 +1183,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.3", + "digest 0.10.7", ] [[package]] @@ -1200,6 +1197,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.4" @@ -1207,7 +1215,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" dependencies = [ "bytes", - "http", + "http 0.2.6", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.2.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", "pin-project-lite", ] @@ -1223,7 +1254,7 @@ dependencies = [ "base64 0.13.0", "cookie", "futures-lite", - "http", + "http 0.2.6", "infer", "pin-project-lite", "rand 0.7.3", @@ -1231,14 +1262,14 @@ dependencies = [ "serde_json", "serde_qs", "serde_urlencoded", - "url 2.2.2", + "url", ] [[package]] name = "httparse" -version = "1.6.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "httpdate" @@ -1248,44 +1279,46 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.10.16" +version = "0.14.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273" +checksum = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd" dependencies = [ - "base64 0.9.3", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.11", + "http 0.2.6", + "http-body 0.4.4", "httparse", - "language-tags", - "log 0.3.9", - "mime 0.2.6", - "num_cpus", - "time 0.1.43", - "traitobject", - "typeable", - "unicase 1.4.2", - "url 1.7.2", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.4", + "tokio", + "tower-service", + "tracing", + "want", ] [[package]] name = "hyper" -version = "0.14.17" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.4.8", + "http 1.2.0", + "http-body 1.0.1", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] @@ -1303,14 +1336,38 @@ dependencies = [ ] [[package]] -name = "idna" -version = "0.1.5" +name = "hyper-tls" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", + "bytes", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "hyper 1.6.0", + "pin-project-lite", + "socket2 0.5.8", + "tokio", + "tower-service", + "tracing", ] [[package]] @@ -1336,8 +1393,18 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" dependencies = [ - "autocfg 1.0.1", - "hashbrown", + "autocfg", + "hashbrown 0.11.2", +] + +[[package]] +name = "indexmap" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", ] [[package]] @@ -1361,22 +1428,6 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" -[[package]] -name = "iron" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6d308ca2d884650a8bf9ed2ff4cb13fbb2207b71f64cda11dc9b892067295e8" -dependencies = [ - "hyper 0.10.16", - "log 0.3.9", - "mime_guess 1.8.8", - "modifier", - "num_cpus", - "plugin", - "typemap", - "url 1.7.2", -] - [[package]] name = "itoa" version = "1.0.1" @@ -1394,10 +1445,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.56" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1407,15 +1459,9 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" dependencies = [ - "log 0.4.14", + "log", ] -[[package]] -name = "language-tags" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" - [[package]] name = "lazy_static" version = "1.4.0" @@ -1437,9 +1483,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.159" +version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" +checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "linked-hash-map" @@ -1458,20 +1504,10 @@ dependencies = [ [[package]] name = "log" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -dependencies = [ - "log 0.4.14", -] - -[[package]] -name = "log" -version = "0.4.14" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" dependencies = [ - "cfg-if", "value-bag", ] @@ -1487,7 +1523,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6a38fc55c8bbc10058782919516f88826e70320db6d206aebc49611d24216ae" dependencies = [ - "digest 0.10.3", + "digest 0.10.7", ] [[package]] @@ -1496,41 +1532,20 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" -[[package]] -name = "mime" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" -dependencies = [ - "log 0.3.9", -] - [[package]] name = "mime" version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" -[[package]] -name = "mime_guess" -version = "1.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216929a5ee4dd316b1702eedf5e74548c123d370f47841ceaac38ca154690ca3" -dependencies = [ - "mime 0.2.6", - "phf", - "phf_codegen", - "unicase 1.4.2", -] - [[package]] name = "mime_guess" version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" dependencies = [ - "mime 0.3.16", - "unicase 2.6.0", + "mime", + "unicase", ] [[package]] @@ -1540,68 +1555,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" dependencies = [ "adler", - "autocfg 1.0.1", + "autocfg", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "log 0.4.14", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] -name = "modifier" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f5c9112cb662acd3b204077e0de5bc66305fa8df65c8019d5adb10e9ab6e58" - -[[package]] -name = "multipart" -version = "0.18.0" +name = "multer" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" dependencies = [ - "buf_redux", + "bytes", + "encoding_rs", + "futures-util", + "http 1.2.0", "httparse", - "hyper 0.10.16", - "iron", - "log 0.4.14", - "mime 0.3.16", - "mime_guess 2.0.3", - "nickel", - "quick-error", - "rand 0.8.5", - "safemem", - "tempfile", - "tiny_http", - "twoway", -] - -[[package]] -name = "mustache" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51956ef1c5d20a1384524d91e616fb44dfc7d8f249bf696d49c97dd3289ecab5" -dependencies = [ - "log 0.3.9", - "serde", + "memchr", + "mime", + "spin", + "version_check", ] [[package]] name = "native-tls" -version = "0.2.8" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ - "lazy_static", "libc", - "log 0.4.14", + "log", "openssl", "openssl-probe", "openssl-sys", @@ -1612,44 +1604,39 @@ dependencies = [ ] [[package]] -name = "nickel" -version = "0.11.0" +name = "nom" +version = "5.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5061a832728db2dacb61cefe0ce303b58f85764ec680e71d9138229640a46d9" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" dependencies = [ - "groupable", - "hyper 0.10.16", - "lazy_static", - "log 0.3.9", - "modifier", - "mustache", - "plugin", - "regex", - "serde", - "serde_json", - "time 0.1.43", - "typemap", - "url 1.7.2", + "lexical-core", + "memchr", + "version_check", ] [[package]] -name = "nom" -version = "5.1.2" +name = "nu-ansi-term" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ - "lexical-core", - "memchr", - "version_check 0.9.4", + "overload", + "winapi", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" dependencies = [ - "autocfg 1.0.1", + "autocfg", "num-traits", ] @@ -1659,7 +1646,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ - "autocfg 1.0.1", + "autocfg", ] [[package]] @@ -1709,7 +1696,7 @@ dependencies = [ "md-5", "open-build-service-api", "open-build-service-mock", - "reqwest", + "reqwest 0.11.9", "rfc822-like", "rstest", "serde", @@ -1719,20 +1706,20 @@ dependencies = [ "strum 0.24.0", "tempfile", "tokio", - "tokio-util 0.7.0", + "tokio-util 0.7.13", "tracing", "tracing-error", "tracing-subscriber", - "url 2.2.2", - "wiremock", + "url", + "wiremock 0.5.10", "zip 0.5.13", ] [[package]] name = "once_cell" -version = "1.9.0" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "opaque-debug" @@ -1751,11 +1738,11 @@ dependencies = [ "futures", "md-5", "quick-xml", - "reqwest", + "reqwest 0.11.9", "serde", "strum_macros 0.23.1", "thiserror", - "url 2.2.2", + "url", ] [[package]] @@ -1771,15 +1758,15 @@ dependencies = [ "serde", "strum 0.23.0", "strum_macros 0.23.1", - "wiremock", + "wiremock 0.5.10", "xml-builder", ] [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -1792,13 +1779,13 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.86", + "syn 2.0.98", ] [[package]] @@ -1809,9 +1796,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" dependencies = [ "cc", "libc", @@ -1828,6 +1815,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "owo-colors" version = "3.2.0" @@ -1880,63 +1873,18 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" dependencies = [ - "digest 0.10.3", + "digest 0.10.7", "hmac 0.12.1", "password-hash", - "sha2 0.10.2", + "sha2 0.10.8", ] -[[package]] -name = "percent-encoding" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" - [[package]] name = "percent-encoding" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" -[[package]] -name = "phf" -version = "0.7.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" -dependencies = [ - "phf_shared", -] - -[[package]] -name = "phf_codegen" -version = "0.7.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" -dependencies = [ - "phf_generator", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.7.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" -dependencies = [ - "phf_shared", - "rand 0.6.5", -] - -[[package]] -name = "phf_shared" -version = "0.7.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" -dependencies = [ - "siphasher", - "unicase 1.4.2", -] - [[package]] name = "pin-project" version = "1.0.10" @@ -1959,9 +1907,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1975,15 +1923,6 @@ version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" -[[package]] -name = "plugin" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a6a0dc3910bc8db877ffed8e457763b317cf880df4ae19109b9f77d277cf6e0" -dependencies = [ - "typemap", -] - [[package]] name = "polling" version = "2.2.0" @@ -1992,7 +1931,7 @@ checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" dependencies = [ "cfg-if", "libc", - "log 0.4.14", + "log", "wepoll-ffi", "winapi", ] @@ -2008,6 +1947,12 @@ dependencies = [ "universal-hash", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.16" @@ -2024,7 +1969,7 @@ dependencies = [ "proc-macro2", "quote", "syn 1.0.86", - "version_check 0.9.4", + "version_check", ] [[package]] @@ -2035,7 +1980,7 @@ checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2", "quote", - "version_check 0.9.4", + "version_check", ] [[package]] @@ -2053,12 +1998,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - [[package]] name = "quick-xml" version = "0.22.0" @@ -2078,25 +2017,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.7", - "libc", - "rand_chacha 0.1.1", - "rand_core 0.4.2", - "rand_hc 0.1.0", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift", - "winapi", -] - [[package]] name = "rand" version = "0.7.3" @@ -2107,7 +2027,7 @@ dependencies = [ "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", - "rand_hc 0.2.0", + "rand_hc", ] [[package]] @@ -2121,16 +2041,6 @@ dependencies = [ "rand_core 0.6.3", ] -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.3.1", -] - [[package]] name = "rand_chacha" version = "0.2.2" @@ -2151,21 +2061,6 @@ dependencies = [ "rand_core 0.6.3", ] -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - [[package]] name = "rand_core" version = "0.5.1" @@ -2184,15 +2079,6 @@ dependencies = [ "getrandom 0.2.4", ] -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "rand_hc" version = "0.2.0" @@ -2202,68 +2088,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.4.2", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "redox_syscall" version = "0.2.10" @@ -2320,19 +2144,18 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.3.11", + "http 0.2.6", + "http-body 0.4.4", "hyper 0.14.17", - "hyper-tls", + "hyper-tls 0.5.0", "ipnet", "js-sys", "lazy_static", - "log 0.4.14", - "mime 0.3.16", - "mime_guess 2.0.3", + "log", + "mime", "native-tls", - "percent-encoding 2.1.0", + "percent-encoding", "pin-project-lite", "serde", "serde_json", @@ -2340,11 +2163,56 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-util 0.6.9", - "url 2.2.2", + "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg", + "winreg 0.7.0", +] + +[[package]] +name = "reqwest" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.8", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-util 0.7.13", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg 0.52.0", ] [[package]] @@ -2396,11 +2264,26 @@ dependencies = [ "semver 1.0.6", ] +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" + [[package]] name = "rustversion" -version = "1.0.6" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" @@ -2408,12 +2291,6 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - [[package]] name = "schannel" version = "0.1.19" @@ -2476,31 +2353,32 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.136" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.86", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -2511,7 +2389,7 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" dependencies = [ - "percent-encoding 2.1.0", + "percent-encoding", "serde", "thiserror", ] @@ -2534,7 +2412,7 @@ version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0" dependencies = [ - "indexmap", + "indexmap 1.8.0", "ryu", "serde", "yaml-rust", @@ -2557,7 +2435,7 @@ checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.3", + "digest 0.10.7", ] [[package]] @@ -2581,13 +2459,13 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.2" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.3", + "digest 0.10.7", ] [[package]] @@ -2623,12 +2501,6 @@ dependencies = [ "libc", ] -[[package]] -name = "siphasher" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" - [[package]] name = "slab" version = "0.4.5" @@ -2637,9 +2509,9 @@ checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" [[package]] name = "smallvec" -version = "1.8.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "socket2" @@ -2651,13 +2523,29 @@ dependencies = [ "winapi", ] +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "standback" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" dependencies = [ - "version_check 0.9.4", + "version_check", ] [[package]] @@ -2790,6 +2678,33 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.2.1", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tempfile" version = "3.3.0" @@ -2869,22 +2784,33 @@ dependencies = [ "standback", "stdweb", "time-macros 0.1.1", - "version_check 0.9.4", + "version_check", "winapi", ] [[package]] name = "time" -version = "0.3.9" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ + "deranged", "itoa", "libc", + "num-conv", "num_threads", - "time-macros 0.2.4", + "powerfmt", + "serde", + "time-core", + "time-macros 0.2.19", ] +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + [[package]] name = "time-macros" version = "0.1.1" @@ -2897,9 +2823,13 @@ dependencies = [ [[package]] name = "time-macros" -version = "0.2.4" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +dependencies = [ + "num-conv", + "time-core", +] [[package]] name = "time-macros-impl" @@ -2914,19 +2844,6 @@ dependencies = [ "syn 1.0.86", ] -[[package]] -name = "tiny_http" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e22cb179b63e5fc2d0b5be237dc107da072e2407809ac70a8ce85b93fe8f562" -dependencies = [ - "ascii", - "chrono", - "chunked_transfer", - "log 0.4.14", - "url 1.7.2", -] - [[package]] name = "tinyvec" version = "1.5.1" @@ -2944,32 +2861,31 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.18.5" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e050c618355082ae5a89ec63bbf897225d5ffe84c7c4e036874e4d185a5044e" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ + "backtrace", "bytes", "libc", - "memchr", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.8", "tokio-macros", - "winapi", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "1.7.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.86", + "syn 2.0.98", ] [[package]] @@ -2991,23 +2907,23 @@ dependencies = [ "bytes", "futures-core", "futures-sink", - "log 0.4.14", + "log", "pin-project-lite", "tokio", ] [[package]] name = "tokio-util" -version = "0.7.0" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64910e1b9c1901aaf5375561e35b9c057d95ff41a44ede043a03e09279eabaf1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", "futures-util", - "log 0.4.14", + "hashbrown 0.14.5", "pin-project-lite", "slab", "tokio", @@ -3021,11 +2937,10 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.30" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d8d93354fe2a8e50d5953f5ae2e47a3fc2ef03292e7ea46e3cc38f549525fb9" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -3033,22 +2948,22 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.19" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.86", + "syn 2.0.98", ] [[package]] name = "tracing-core" -version = "0.1.22" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ - "lazy_static", + "once_cell", "valuable", ] @@ -3064,20 +2979,20 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "lazy_static", - "log 0.4.14", + "log", + "once_cell", "tracing-core", ] [[package]] name = "tracing-serde" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" dependencies = [ "serde", "tracing-core", @@ -3085,11 +3000,11 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.8" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74786ce43333fcf51efe947aed9718fbe46d5c7328ec3f1029e818083966d9aa" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ - "ansi_term", + "nu-ansi-term", "serde", "serde_json", "sharded-slab", @@ -3100,64 +3015,25 @@ dependencies = [ "tracing-serde", ] -[[package]] -name = "traitobject" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" - [[package]] name = "try-lock" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" -[[package]] -name = "twoway" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" -dependencies = [ - "memchr", -] - -[[package]] -name = "typeable" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" - -[[package]] -name = "typemap" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6" -dependencies = [ - "unsafe-any", -] - [[package]] name = "typenum" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" -[[package]] -name = "unicase" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" -dependencies = [ - "version_check 0.1.5", -] - [[package]] name = "unicase" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ - "version_check 0.9.4", + "version_check", ] [[package]] @@ -3203,26 +3079,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "unsafe-any" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f" -dependencies = [ - "traitobject", -] - -[[package]] -name = "url" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -dependencies = [ - "idna 0.1.5", - "matches", - "percent-encoding 1.0.1", -] - [[package]] name = "url" version = "2.2.2" @@ -3230,9 +3086,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" dependencies = [ "form_urlencoded", - "idna 0.2.3", + "idna", "matches", - "percent-encoding 2.1.0", + "percent-encoding", "serde", ] @@ -3244,13 +3100,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "value-bag" -version = "1.0.0-alpha.8" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79923f7731dc61ebfba3633098bf3ac533bbd35ccd8c57e7088d9a5eebe0263f" -dependencies = [ - "ctor", - "version_check 0.9.4", -] +checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" [[package]] name = "vcpkg" @@ -3259,10 +3111,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] -name = "version_check" -version = "0.1.5" +name = "vergen" +version = "8.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" +checksum = "2990d9ea5967266ea0ccf413a4aa5c42a93dbcfda9cb49a97de6931726b12566" +dependencies = [ + "anyhow", + "cfg-if", + "rustversion", + "time 0.3.37", +] [[package]] name = "version_check" @@ -3282,7 +3140,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ - "log 0.4.14", + "log", "try-lock", ] @@ -3306,46 +3164,48 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.79" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.79" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", - "lazy_static", - "log 0.4.14", + "log", "proc-macro2", "quote", - "syn 1.0.86", + "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.29" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.79" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3353,28 +3213,44 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.79" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 1.0.86", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.79" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] [[package]] name = "web-sys" -version = "0.3.56" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -3439,7 +3315,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -3448,21 +3333,43 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", + "windows_aarch64_gnullvm 0.48.5", "windows_aarch64_msvc 0.48.5", "windows_i686_gnu 0.48.5", "windows_i686_msvc 0.48.5", "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm", + "windows_x86_64_gnullvm 0.48.5", "windows_x86_64_msvc 0.48.5", ] +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + [[package]] name = "windows_aarch64_msvc" version = "0.32.0" @@ -3475,6 +3382,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + [[package]] name = "windows_i686_gnu" version = "0.32.0" @@ -3487,6 +3400,18 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + [[package]] name = "windows_i686_msvc" version = "0.32.0" @@ -3499,6 +3424,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + [[package]] name = "windows_x86_64_gnu" version = "0.32.0" @@ -3511,12 +3442,24 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + [[package]] name = "windows_x86_64_msvc" version = "0.32.0" @@ -3529,6 +3472,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "winreg" version = "0.7.0" @@ -3538,6 +3487,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "wiremock" version = "0.5.10" @@ -3546,17 +3505,41 @@ checksum = "70f7b70ff8dc8f85e456feb581ee05720f87a5bd4f868c018191d997994cabed" dependencies = [ "assert-json-diff", "async-trait", - "deadpool", + "deadpool 0.7.0", "futures", "futures-timer", "http-types", "hyper 0.14.17", - "log 0.4.14", + "log", + "once_cell", + "regex", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "wiremock" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fff469918e7ca034884c7fd8f93fe27bacb7fcb599fd879df6c7b429a29b646" +dependencies = [ + "assert-json-diff", + "async-trait", + "base64 0.22.1", + "deadpool 0.10.0", + "futures", + "http 1.2.0", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "log", "once_cell", "regex", "serde", "serde_json", "tokio", + "url", ] [[package]] @@ -3604,7 +3587,7 @@ dependencies = [ "hmac 0.12.1", "pbkdf2", "sha1 0.10.1", - "time 0.3.9", + "time 0.3.37", "zstd", ] diff --git a/Cargo.toml b/Cargo.toml index 147f5dd..6afd181 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ tracing-error = "0.2" tracing-subscriber = { version = "0.3", features = ["default", "json"] } url = "2.2" -gitlab-runner = "0.0.8" +gitlab-runner = "0.0.9" # gitlab-runner = { path = "../gitlab-runner-rs/gitlab-runner" } open-build-service-api = { git = "https://github.com/collabora/open-build-service-rs" } # open-build-service-api = { path = "../open-build-service-rs/open-build-service-api" } @@ -43,7 +43,7 @@ rstest = "0.12" wiremock = "0.5" zip = "0.5" -gitlab-runner-mock = "0.0.8" +gitlab-runner-mock = "0.0.9" # gitlab-runner-mock = { path = "../gitlab-runner-rs/gitlab-runner-mock" } open-build-service-mock = { git = "https://github.com/collabora/open-build-service-rs" } # open-build-service-mock = { path = "../open-build-service-rs/open-build-service-mock" } diff --git a/src/handler.rs b/src/handler.rs index 5f9a5fe..8de6448 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -229,13 +229,13 @@ impl UploadableFile for ObsArtifact { } async fn get_data(&self) -> Result, ()> { - use ObsArtifactInner::*; + use ObsArtifactInner as Inner; match &self.inner { - File(path) => { + Inner::File(path) => { let file = AsyncFile::open(path).await.map_err(|_| {})?; Ok(Box::new(file.compat())) } - String(data) => Ok(Box::new(Cursor::new(data.to_owned()))), + Inner::String(data) => Ok(Box::new(Cursor::new(data.to_owned()))), } } } @@ -729,9 +729,10 @@ impl ArtifactDirectory for ObsJobHandler { #[instrument(skip(self))] async fn get_or_none(&self, filename: &str) -> Result>> { if let Some(artifact) = self.artifacts.iter().find(|&a| a.path == filename) { + use ObsArtifactInner as Inner; match &artifact.inner { - ObsArtifactInner::File(path) => return Ok(Some(Box::new(File::open(path)?))), - ObsArtifactInner::String(data) => { + Inner::File(path) => return Ok(Some(Box::new(File::open(path)?))), + Inner::String(data) => { return Ok(Some(Box::new(std::io::Cursor::new(data.as_bytes())))); } } @@ -748,9 +749,10 @@ impl ArtifactDirectory for ObsJobHandler { async fn get_file_or_none(&self, filename: &str) -> Result> { if let Some(artifact) = self.artifacts.iter().find(|&a| a.path == filename) { + use ObsArtifactInner as Inner; match &artifact.inner { - ObsArtifactInner::File(path) => return Ok(Some(AsyncFile::open(path).await?)), - ObsArtifactInner::String(data) => { + Inner::File(path) => return Ok(Some(AsyncFile::open(path).await?)), + Inner::String(data) => { return Ok(Some(AsyncFile::from_std(save_to_tempfile( &mut data.as_bytes(), )?))); @@ -779,7 +781,7 @@ mod tests { use camino::Utf8Path; use claim::*; - use gitlab_runner::Runner; + use gitlab_runner::{GitlabLayer, Runner, RunnerBuilder}; use gitlab_runner_mock::*; use open_build_service_mock::*; use rstest::rstest; @@ -828,11 +830,15 @@ mod tests { let runner_dir = tempfile::tempdir().unwrap(); let gitlab_mock = GitlabRunnerMock::start().await; - let (runner, layer) = Runner::new_with_layer( + let (layer, jobs) = GitlabLayer::new(); + let runner = RunnerBuilder::new( gitlab_mock.uri(), gitlab_mock.runner_token().to_owned(), runner_dir.path().to_owned(), - ); + jobs, + ) + .build() + .await; let obs_mock = create_default_mock().await; let obs_client = create_default_client(&obs_mock); diff --git a/src/main.rs b/src/main.rs index b25d981..d70d0c4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ use std::{fmt, str::FromStr, sync::Arc}; use clap::Parser; use color_eyre::eyre::Result; -use gitlab_runner::Runner; +use gitlab_runner::{GitlabLayer, RunnerBuilder}; use strum::{Display, EnumString}; use tracing::{error, info, Subscriber}; use tracing_subscriber::{ @@ -106,8 +106,10 @@ where async fn main() { let args = Args::parse(); let temp = tempfile::tempdir().expect("Failed to create temporary directory"); - let (mut runner, layer) = - Runner::new_with_layer(args.server, args.token, temp.path().to_owned()); + let (layer, jobs) = GitlabLayer::new(); + let mut runner = RunnerBuilder::new(args.server, args.token, temp.path().to_owned(), jobs) + .build() + .await; let registry = tracing_subscriber::registry() .with(tracing_error::ErrorLayer::default()) From cfbab5221f8d434a477aff60ae96fd2e8abb7204 Mon Sep 17 00:00:00 2001 From: Colin Kinloch Date: Thu, 27 Feb 2025 19:41:40 +0000 Subject: [PATCH 07/10] Update Cargo.lock for gitlab-runner-rs main branch Update zip to 2.2.3 --- Cargo.lock | 731 ++++++++++++++++++++++++++++++++++++++++++----------- Cargo.toml | 6 +- 2 files changed, 589 insertions(+), 148 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c10304e..74df248 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "aead" version = "0.3.2" @@ -39,14 +45,13 @@ dependencies = [ [[package]] name = "aes" -version = "0.7.5" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", - "cipher 0.3.0", + "cipher 0.4.3", "cpufeatures", - "opaque-debug", ] [[package]] @@ -98,6 +103,15 @@ version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" +[[package]] +name = "arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +dependencies = [ + "derive_arbitrary", +] + [[package]] name = "arrayvec" version = "0.5.2" @@ -133,7 +147,7 @@ checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" dependencies = [ "async-task", "concurrent-queue", - "fastrand", + "fastrand 1.7.0", "futures-lite", "once_cell", "slab", @@ -283,7 +297,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.4.4", "object", "rustc-demangle", ] @@ -312,12 +326,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "base64ct" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a32fd6af2b5827bce66c29053ba0e7c42b9dcab01835835058558c10851a46b" - [[package]] name = "bitflags" version = "1.2.1" @@ -357,7 +365,7 @@ dependencies = [ "async-channel", "async-task", "atomic-waker", - "fastrand", + "fastrand 1.7.0", "futures-lite", "once_cell", ] @@ -382,19 +390,18 @@ checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "bzip2" -version = "0.4.3" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" +checksum = "75b89e7c29231c673a61a46e722602bcd138298f6b9e81e71119693534585f5c" dependencies = [ "bzip2-sys", - "libc", ] [[package]] name = "bzip2-sys" -version = "0.1.11+1.0.8" +version = "0.1.12+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +checksum = "72ebc2f1a417f01e1da30ef264ee86ae31d2dcd2d603ea283d3c244a883ca2a9" dependencies = [ "cc", "libc", @@ -453,11 +460,12 @@ dependencies = [ [[package]] name = "cipher" -version = "0.3.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" dependencies = [ - "generic-array", + "crypto-common", + "inout", ] [[package]] @@ -554,9 +562,9 @@ checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" [[package]] name = "constant_time_eq" -version = "0.1.5" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "cookie" @@ -606,11 +614,26 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] @@ -627,13 +650,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" -dependencies = [ - "cfg-if", - "lazy_static", -] +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-common" @@ -696,6 +715,12 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +[[package]] +name = "deflate64" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" + [[package]] name = "deranged" version = "0.3.11" @@ -716,6 +741,17 @@ dependencies = [ "syn 1.0.86", ] +[[package]] +name = "derive_arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "digest" version = "0.9.0" @@ -763,6 +799,17 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "doc-comment" version = "0.3.3" @@ -784,6 +831,16 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "errno" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "event-listener" version = "2.5.2" @@ -809,16 +866,20 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + [[package]] name = "flate2" -version = "1.0.22" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" +checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" dependencies = [ - "cfg-if", "crc32fast", - "libc", - "miniz_oxide", + "miniz_oxide 0.8.5", ] [[package]] @@ -850,11 +911,10 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "matches", "percent-encoding", ] @@ -912,7 +972,7 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" dependencies = [ - "fastrand", + "fastrand 1.7.0", "futures-core", "futures-io", "memchr", @@ -1000,6 +1060,18 @@ dependencies = [ "wasi 0.10.2+wasi-snapshot-preview1", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + [[package]] name = "ghash" version = "0.3.1" @@ -1018,7 +1090,7 @@ checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "gitlab-runner" -version = "0.0.9" +version = "0.1.0" dependencies = [ "async-trait", "bytes", @@ -1029,32 +1101,32 @@ dependencies = [ "hmac 0.12.1", "parking_lot", "pin-project", - "rand 0.8.5", + "rand 0.9.0", "reqwest 0.12.4", "serde", "serde_json", "sha2 0.10.8", "tempfile", - "thiserror", + "thiserror 2.0.11", "tokio", "tokio-util 0.7.13", "tracing", "tracing-subscriber", "url", "vergen", - "zip 0.6.2", + "zip", ] [[package]] name = "gitlab-runner-mock" -version = "0.0.9" +version = "0.1.0" dependencies = [ "futures", "http 1.2.0", "multer", "serde", "serde_json", - "thiserror", + "thiserror 2.0.11", "url", "wiremock 0.6.2", ] @@ -1370,15 +1442,143 @@ dependencies = [ "tracing", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "idna" -version = "0.2.3" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1413,6 +1613,15 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + [[package]] name = "instant" version = "0.1.12" @@ -1493,6 +1702,18 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" + [[package]] name = "lock_api" version = "0.4.6" @@ -1502,6 +1723,12 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "lockfree-object-pool" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" + [[package]] name = "log" version = "0.4.26" @@ -1512,10 +1739,14 @@ dependencies = [ ] [[package]] -name = "matches" -version = "0.1.9" +name = "lzma-rs" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" +checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e" +dependencies = [ + "byteorder", + "crc", +] [[package]] name = "md-5" @@ -1528,9 +1759,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.4.1" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1558,6 +1789,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "miniz_oxide" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +dependencies = [ + "adler2", +] + [[package]] name = "mio" version = "1.0.3" @@ -1712,7 +1952,7 @@ dependencies = [ "tracing-subscriber", "url", "wiremock 0.5.10", - "zip 0.5.13", + "zip", ] [[package]] @@ -1741,7 +1981,7 @@ dependencies = [ "reqwest 0.11.9", "serde", "strum_macros 0.23.1", - "thiserror", + "thiserror 1.0.30", "url", ] @@ -1856,34 +2096,21 @@ dependencies = [ "windows-sys 0.32.0", ] -[[package]] -name = "password-hash" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d791538a6dcc1e7cb7fe6f6b58aca40e7f79403c45b2bc274008b5e647af1d8" -dependencies = [ - "base64ct", - "rand_core 0.6.3", - "subtle", -] - [[package]] name = "pbkdf2" -version = "0.10.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", "hmac 0.12.1", - "password-hash", - "sha2 0.10.8", ] [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" @@ -1919,9 +2146,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.24" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "polling" @@ -2041,6 +2268,17 @@ dependencies = [ "rand_core 0.6.3", ] +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.2", + "zerocopy", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -2061,6 +2299,16 @@ dependencies = [ "rand_core 0.6.3", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.2", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -2079,6 +2327,16 @@ dependencies = [ "getrandom 0.2.4", ] +[[package]] +name = "rand_core" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c" +dependencies = [ + "getrandom 0.3.1", + "zerocopy", +] + [[package]] name = "rand_hc" version = "0.2.0" @@ -2124,15 +2382,6 @@ version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - [[package]] name = "reqwest" version = "0.11.9" @@ -2223,7 +2472,7 @@ checksum = "2573545992daa7840cbed3e22e0abf0ac2c4c8692ba1a7f58e435c110769dc88" dependencies = [ "fmt2io", "serde", - "thiserror", + "thiserror 1.0.30", "unicode-segmentation", ] @@ -2264,6 +2513,19 @@ dependencies = [ "semver 1.0.6", ] +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + [[package]] name = "rustls-pemfile" version = "2.2.0" @@ -2391,7 +2653,7 @@ checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" dependencies = [ "percent-encoding", "serde", - "thiserror", + "thiserror 1.0.30", ] [[package]] @@ -2501,6 +2763,12 @@ dependencies = [ "libc", ] +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "slab" version = "0.4.5" @@ -2539,6 +2807,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "standback" version = "0.2.17" @@ -2684,6 +2958,17 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -2707,16 +2992,16 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.3.0" +version = "3.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" dependencies = [ "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "fastrand 2.3.0", + "getrandom 0.3.1", + "once_cell", + "rustix", + "windows-sys 0.52.0", ] [[package]] @@ -2740,7 +3025,16 @@ version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.30", +] + +[[package]] +name = "thiserror" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", ] [[package]] @@ -2754,6 +3048,17 @@ dependencies = [ "syn 1.0.86", ] +[[package]] +name = "thiserror-impl" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "thread_local" version = "1.1.4" @@ -2845,20 +3150,15 @@ dependencies = [ ] [[package]] -name = "tinyvec" -version = "1.5.1" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "tinyvec_macros", + "displaydoc", + "zerovec", ] -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - [[package]] name = "tokio" version = "1.43.0" @@ -3036,27 +3336,12 @@ dependencies = [ "version_check", ] -[[package]] -name = "unicode-bidi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" - [[package]] name = "unicode-ident" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" -[[package]] -name = "unicode-normalization" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" -dependencies = [ - "tinyvec", -] - [[package]] name = "unicode-segmentation" version = "1.9.0" @@ -3081,17 +3366,28 @@ dependencies = [ [[package]] name = "url" -version = "2.2.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", "serde", ] +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "valuable" version = "0.1.0" @@ -3162,6 +3458,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" version = "0.2.100" @@ -3542,6 +3847,27 @@ dependencies = [ "url", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "xml-builder" version = "0.5.0" @@ -3558,64 +3884,179 @@ dependencies = [ ] [[package]] -name = "zip" -version = "0.5.13" +name = "yoke" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ - "byteorder", - "bzip2", - "crc32fast", - "flate2", - "thiserror", - "time 0.1.43", + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] name = "zip" -version = "0.6.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf225bcf73bb52cbb496e70475c7bd7a3f769df699c0020f6c7bd9a96dcf0b8d" +checksum = "b280484c454e74e5fff658bbf7df8fdbe7a07c6b2de4a53def232c15ef138f3a" dependencies = [ - "aes 0.7.5", - "byteorder", + "aes 0.8.4", + "arbitrary", "bzip2", "constant_time_eq", "crc32fast", "crossbeam-utils", + "deflate64", + "displaydoc", "flate2", "hmac 0.12.1", + "indexmap 2.7.1", + "lzma-rs", + "memchr", "pbkdf2", + "rand 0.8.5", "sha1 0.10.1", + "thiserror 2.0.11", "time 0.3.37", + "zeroize", + "zopfli", "zstd", ] +[[package]] +name = "zopfli" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +dependencies = [ + "bumpalo", + "crc32fast", + "lockfree-object-pool", + "log", + "once_cell", + "simd-adler32", +] + [[package]] name = "zstd" -version = "0.10.2+zstd.1.5.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4a6bd64f22b5e3e94b4e238669ff9f10815c27a5180108b849d24174a83847" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "4.1.6+zstd.1.5.2" +version = "7.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b61c51bb270702d6167b8ce67340d2754b088d0c091b06e593aa772c3ee9bb" +checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" dependencies = [ - "libc", "zstd-sys", ] [[package]] name = "zstd-sys" -version = "1.6.3+zstd.1.5.2" +version = "2.0.14+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8" +checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" dependencies = [ "cc", - "libc", + "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 6afd181..a35d0f2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ tracing-error = "0.2" tracing-subscriber = { version = "0.3", features = ["default", "json"] } url = "2.2" -gitlab-runner = "0.0.9" +gitlab-runner = "0.1.0" # gitlab-runner = { path = "../gitlab-runner-rs/gitlab-runner" } open-build-service-api = { git = "https://github.com/collabora/open-build-service-rs" } # open-build-service-api = { path = "../open-build-service-rs/open-build-service-api" } @@ -41,9 +41,9 @@ open-build-service-api = { git = "https://github.com/collabora/open-build-servic claim = "0.5" rstest = "0.12" wiremock = "0.5" -zip = "0.5" +zip = "2.2.3" -gitlab-runner-mock = "0.0.9" +gitlab-runner-mock = "0.1.0" # gitlab-runner-mock = { path = "../gitlab-runner-rs/gitlab-runner-mock" } open-build-service-mock = { git = "https://github.com/collabora/open-build-service-rs" } # open-build-service-mock = { path = "../open-build-service-rs/open-build-service-mock" } From d0fdb1734f94e2190b602735c930d40e0fba9348 Mon Sep 17 00:00:00 2001 From: Colin Kinloch Date: Wed, 12 Mar 2025 17:55:54 +0000 Subject: [PATCH 08/10] Store artifact files in the jobs build directory This will delete them once the job is completed. --- src/binaries.rs | 28 ++++++++++++++++++++++++---- src/handler.rs | 25 +++++++++++++++++-------- src/monitor.rs | 21 +++++++++++++++------ 3 files changed, 56 insertions(+), 18 deletions(-) diff --git a/src/binaries.rs b/src/binaries.rs index 25b377b..7d6e4fe 100644 --- a/src/binaries.rs +++ b/src/binaries.rs @@ -1,9 +1,12 @@ -use std::{collections::HashMap, io, path::PathBuf}; +use std::{ + collections::HashMap, + io, + path::{Path, PathBuf}, +}; use color_eyre::eyre::{Report, Result, WrapErr}; use futures_util::TryStreamExt; use open_build_service_api as obs; -use tempfile::NamedTempFile; use tokio::fs::File as AsyncFile; use tokio_util::compat::FuturesAsyncReadCompatExt; use tracing::{info_span, instrument, Instrument}; @@ -13,6 +16,7 @@ use crate::retry::retry_request; #[instrument(skip(client))] pub async fn download_binaries( client: obs::Client, + build_dir: &Path, project: &str, package: &str, repository: &str, @@ -33,7 +37,11 @@ pub async fn download_binaries( let binary = binary.clone(); let client = client.clone(); async move { - let (file, path) = NamedTempFile::new()?.keep()?; + let (file, path) = tempfile::Builder::new() + .prefix("obs-glr-") + .suffix(".bin") + .tempfile_in(build_dir)? + .keep()?; let stream = client .project(project.to_owned()) @@ -77,6 +85,10 @@ mod tests { #[tokio::test] async fn test_build_results() { + let build_dir = tempfile::Builder::new() + .prefix("obs-glr-test-bin-") + .tempdir() + .unwrap(); let test_file = "test.bin"; let test_contents = "123980238"; @@ -113,7 +125,15 @@ mod tests { let client = create_default_client(&mock); let mut binaries = assert_ok!( - download_binaries(client, TEST_PROJECT, TEST_PACKAGE_1, TEST_REPO, TEST_ARCH_1).await + download_binaries( + client, + build_dir.path(), + TEST_PROJECT, + TEST_PACKAGE_1, + TEST_REPO, + TEST_ARCH_1 + ) + .await ); assert_eq!(binaries.len(), 1); diff --git a/src/handler.rs b/src/handler.rs index 8de6448..55d7e7e 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -4,7 +4,7 @@ use std::{ fs::File, hash::{Hash, Hasher}, io::SeekFrom, - path::PathBuf, + path::{Path, PathBuf}, }; use async_trait::async_trait; @@ -19,7 +19,6 @@ use gitlab_runner::{ }; use open_build_service_api as obs; use serde::{Deserialize, Serialize}; -use tempfile::NamedTempFile; use tokio::{fs::File as AsyncFile, io::AsyncSeekExt}; use tokio_util::{compat::TokioAsyncReadCompatExt, io::ReaderStream}; use tracing::{debug, error, instrument, warn}; @@ -242,9 +241,12 @@ impl UploadableFile for ObsArtifact { impl ObsBuildInfo { #[instrument] - fn save(&self) -> Result { - let mut temp_file = - NamedTempFile::new().wrap_err("Failed to create file for build info")?; + fn save(&self, dir: &Path) -> Result { + let mut temp_file = tempfile::Builder::new() + .prefix("obs-glr-build-info-") + .suffix(".yml") + .tempfile_in(dir) + .wrap_err("Failed to create file for build info")?; serde_yaml::to_writer(temp_file.as_file_mut(), self) .wrap_err("Failed to write build yaml to file")?; let (_file, path) = temp_file @@ -373,7 +375,10 @@ impl ObsJobHandler { debug!("Saving initial build info: {:?}", build_info); let build_info_2 = build_info.clone(); - let build_info_path = tokio::task::spawn_blocking(move || build_info_2.save()).await??; + let build_info_path = { + let build_dir = self.job.build_dir().to_owned(); + tokio::task::spawn_blocking(move || build_info_2.save(&build_dir)).await?? + }; self.artifacts.replace(ObsArtifact::new_file( args.build_info_out.clone(), @@ -454,7 +459,10 @@ impl ObsJobHandler { }; debug!("Saving complete build info: {:?}", build_info); - let build_info_path = tokio::task::spawn_blocking(move || build_info.save()).await??; + let build_info_path = { + let build_dir = self.job.build_dir().to_owned(); + tokio::task::spawn_blocking(move || build_info.save(&build_dir)).await?? + }; self.artifacts .replace(ObsArtifact::new_file(args.build_info_out, build_info_path)); @@ -524,7 +532,7 @@ impl ObsJobHandler { .await?; debug!("Completed with: {:?}", completion); - let log_file = monitor.download_build_log().await?; + let log_file = monitor.download_build_log(self.job.build_dir()).await?; self.artifacts.replace(ObsArtifact::new_file( args.build_log_out.clone(), log_file.path.clone(), @@ -575,6 +583,7 @@ impl ObsJobHandler { async fn run_download_binaries(&mut self, args: DownloadBinariesAction) -> Result<()> { let binaries = download_binaries( self.client.clone(), + self.job.build_dir(), &args.project, &args.package, &args.repository, diff --git a/src/monitor.rs b/src/monitor.rs index d75abe7..2144627 100644 --- a/src/monitor.rs +++ b/src/monitor.rs @@ -1,11 +1,13 @@ -use std::{path::PathBuf, time::Duration}; +use std::{ + path::{Path, PathBuf}, + time::Duration, +}; use color_eyre::eyre::{ensure, eyre, Context, Report, Result}; use derivative::*; use futures_util::stream::StreamExt; use gitlab_runner::outputln; use open_build_service_api as obs; -use tempfile::NamedTempFile; use tokio::{ fs::File as AsyncFile, io::{AsyncReadExt, AsyncSeekExt, AsyncWriteExt}, @@ -243,11 +245,14 @@ impl ObsMonitor { } #[instrument] - pub async fn download_build_log(&self) -> Result { + pub async fn download_build_log(&self, dir: &Path) -> Result { const LOG_LEN_TO_CHECK_FOR_MD5: u64 = 2500; let (mut file, path) = retry_request(|| async { - let temp_file = NamedTempFile::new()?; + let temp_file = tempfile::Builder::new() + .prefix("obs-glr-build-log-") + .suffix(".txt") + .tempfile_in(dir)?; let (file, path) = temp_file.keep()?; let mut file = AsyncFile::from_std(file); let mut stream = self @@ -371,6 +376,10 @@ mod tests { #[tokio::test] async fn test_download_log() { + let build_dir = tempfile::Builder::new() + .prefix("obs-glr-test-mon-") + .tempdir() + .unwrap(); let srcmd5 = random_md5(); let log_content = format!( "srcmd5 '{}'\n @@ -428,7 +437,7 @@ mod tests { }, ); - let log_file = assert_ok!(monitor.download_build_log().await); + let log_file = assert_ok!(monitor.download_build_log(build_dir.path()).await); assert_eq!(log_file.len, log_content.len() as u64); let mut log = "".to_owned(); @@ -450,7 +459,7 @@ mod tests { true, ); - let err = assert_err!(monitor.download_build_log().await); + let err = assert_err!(monitor.download_build_log(build_dir.path()).await); assert!(err.to_string().contains("unavailable")); } From ac4fc12ee873e987463829163bfc9781d882632f Mon Sep 17 00:00:00 2001 From: Colin Kinloch Date: Fri, 14 Mar 2025 14:35:14 +0000 Subject: [PATCH 09/10] Update clap to 4.5 --- Cargo.lock | 846 ++++++++++--------------------------------------- Cargo.toml | 2 +- src/handler.rs | 14 +- src/main.rs | 5 +- 4 files changed, 184 insertions(+), 683 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 74df248..e191d4e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,77 +24,73 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] -name = "aead" -version = "0.3.2" +name = "aes" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ - "generic-array", + "cfg-if", + "cipher", + "cpufeatures", ] [[package]] -name = "aes" -version = "0.6.0" +name = "aho-corasick" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ - "aes-soft", - "aesni", - "cipher 0.2.5", + "memchr", ] [[package]] -name = "aes" -version = "0.8.4" +name = "anstream" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ - "cfg-if", - "cipher 0.4.3", - "cpufeatures", + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", ] [[package]] -name = "aes-gcm" -version = "0.8.0" +name = "anstyle" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" -dependencies = [ - "aead", - "aes 0.6.0", - "cipher 0.2.5", - "ctr", - "ghash", - "subtle", -] +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] -name = "aes-soft" -version = "0.6.4" +name = "anstyle-parse" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ - "cipher 0.2.5", - "opaque-debug", + "utf8parse", ] [[package]] -name = "aesni" -version = "0.10.0" +name = "anstyle-query" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "cipher 0.2.5", - "opaque-debug", + "windows-sys 0.59.0", ] [[package]] -name = "aho-corasick" -version = "0.7.18" +name = "anstyle-wincon" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ - "memchr", + "anstyle", + "once_cell", + "windows-sys 0.59.0", ] [[package]] @@ -139,106 +135,6 @@ dependencies = [ "futures-core", ] -[[package]] -name = "async-executor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand 1.7.0", - "futures-lite", - "once_cell", - "slab", -] - -[[package]] -name = "async-global-executor" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6" -dependencies = [ - "async-channel", - "async-executor", - "async-io", - "async-mutex", - "blocking", - "futures-lite", - "num_cpus", - "once_cell", -] - -[[package]] -name = "async-io" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b" -dependencies = [ - "concurrent-queue", - "futures-lite", - "libc", - "log", - "once_cell", - "parking", - "polling", - "slab", - "socket2 0.4.4", - "waker-fn", - "winapi", -] - -[[package]] -name = "async-lock" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-mutex" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-std" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8056f1455169ab86dd47b47391e4ab0cbd25410a70e9fe675544f49bafaf952" -dependencies = [ - "async-channel", - "async-global-executor", - "async-io", - "async-lock", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "num_cpus", - "once_cell", - "pin-project-lite", - "pin-utils", - "slab", - "wasm-bindgen-futures", -] - -[[package]] -name = "async-task" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d306121baf53310a3fd342d88dc0824f6bbeace68347593658525565abee8" - [[package]] name = "async-trait" version = "0.1.86" @@ -256,17 +152,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - [[package]] name = "autocfg" version = "1.0.1" @@ -302,12 +187,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base-x" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" - [[package]] name = "base16ct" version = "0.1.1" @@ -320,12 +199,24 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8faa168b8c4ffca39c2699e772943af41ec2b75fb1683dda07b28a6d285c53dc" + [[package]] name = "bitflags" version = "1.2.1" @@ -338,15 +229,6 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - [[package]] name = "block-buffer" version = "0.10.2" @@ -356,20 +238,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "blocking" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046e47d4b2d391b1f6f8b407b1deb8dee56c1852ccd868becf2710f601b5f427" -dependencies = [ - "async-channel", - "async-task", - "atomic-waker", - "fastrand 1.7.0", - "futures-lite", - "once_cell", -] - [[package]] name = "bumpalo" version = "3.16.0" @@ -449,15 +317,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array", -] - [[package]] name = "cipher" version = "0.4.3" @@ -479,34 +338,44 @@ dependencies = [ [[package]] name = "clap" -version = "3.1.0" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f1fea81f183005ced9e59cdb01737ef2423956dac5a6d731b06b2ecfaa3467" +checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" dependencies = [ - "atty", - "bitflags 1.2.1", + "clap_builder", "clap_derive", - "indexmap 1.8.0", - "lazy_static", - "os_str_bytes", +] + +[[package]] +name = "clap_builder" +version = "4.5.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", "strsim", - "termcolor", - "textwrap", ] [[package]] name = "clap_derive" -version = "3.1.0" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd1122e63869df2cb309f449da1ad54a7c6dfeb7c7e6ccd8e0825d9eb93bb72" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ - "heck 0.4.0", - "proc-macro-error", + "heck 0.5.0", "proc-macro2", "quote", - "syn 1.0.86", + "syn 2.0.98", ] +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + [[package]] name = "color-eyre" version = "0.6.0" @@ -534,6 +403,12 @@ dependencies = [ "tracing-error", ] +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + [[package]] name = "concurrent-queue" version = "1.2.2" @@ -554,35 +429,12 @@ dependencies = [ "serde", ] -[[package]] -name = "const_fn" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" - [[package]] name = "constant_time_eq" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" -[[package]] -name = "cookie" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" -dependencies = [ - "aes-gcm", - "base64 0.13.0", - "hkdf", - "hmac 0.10.1", - "percent-encoding", - "rand 0.8.5", - "sha2 0.9.9", - "time 0.2.27", - "version_check", -] - [[package]] name = "core-foundation" version = "0.9.3" @@ -608,12 +460,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cpuid-bool" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" - [[package]] name = "crc" version = "3.2.1" @@ -664,25 +510,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "ctr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" -dependencies = [ - "cipher 0.2.5", -] - [[package]] name = "deadpool" version = "0.7.0" @@ -752,22 +579,13 @@ dependencies = [ "syn 2.0.98", ] -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.2", + "block-buffer", "crypto-common", "subtle", ] @@ -793,12 +611,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "discard" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" - [[package]] name = "displaydoc" version = "0.2.5" @@ -1072,16 +884,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "ghash" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" -dependencies = [ - "opaque-debug", - "polyval", -] - [[package]] name = "gimli" version = "0.26.1" @@ -1098,18 +900,18 @@ dependencies = [ "flate2", "futures", "glob", - "hmac 0.12.1", + "hmac", "parking_lot", "pin-project", "rand 0.9.0", "reqwest 0.12.4", "serde", "serde_json", - "sha2 0.10.8", + "sha2", "tempfile", "thiserror 2.0.11", "tokio", - "tokio-util 0.7.13", + "tokio-util", "tracing", "tracing-subscriber", "url", @@ -1137,23 +939,11 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" -[[package]] -name = "gloo-timers" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d12a7f4e95cfe710f1d624fb1210b7d961a5fb05c4fd942f4feab06e61f590e" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - [[package]] name = "h2" -version = "0.3.11" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", @@ -1161,10 +951,10 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.6", - "indexmap 1.8.0", + "indexmap 2.7.1", "slab", "tokio", - "tokio-util 0.6.9", + "tokio-util", "tracing", ] @@ -1183,7 +973,7 @@ dependencies = [ "indexmap 2.7.1", "slab", "tokio", - "tokio-util 0.7.13", + "tokio-util", "tracing", ] @@ -1220,6 +1010,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -1229,33 +1025,13 @@ dependencies = [ "libc", ] -[[package]] -name = "hkdf" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" -dependencies = [ - "digest 0.9.0", - "hmac 0.10.1", -] - -[[package]] -name = "hmac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" -dependencies = [ - "crypto-mac", - "digest 0.9.0", -] - [[package]] name = "hmac" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -1322,9 +1098,7 @@ checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" dependencies = [ "anyhow", "async-channel", - "async-std", "base64 0.13.0", - "cookie", "futures-lite", "http 0.2.6", "infer", @@ -1351,22 +1125,22 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.17" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", - "h2 0.3.11", + "h2 0.3.26", "http 0.2.6", "http-body 0.4.4", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.4", + "socket2", "tokio", "tower-service", "tracing", @@ -1401,7 +1175,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.17", + "hyper 0.14.32", "native-tls", "tokio", "tokio-native-tls", @@ -1436,7 +1210,7 @@ dependencies = [ "http-body 1.0.1", "hyper 1.6.0", "pin-project-lite", - "socket2 0.5.8", + "socket2", "tokio", "tower-service", "tracing", @@ -1637,6 +1411,12 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itoa" version = "1.0.1" @@ -1662,15 +1442,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -1734,9 +1505,6 @@ name = "log" version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" -dependencies = [ - "value-bag", -] [[package]] name = "lzma-rs" @@ -1754,7 +1522,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6a38fc55c8bbc10058782919516f88826e70320db6d206aebc49611d24216ae" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -1936,7 +1704,7 @@ dependencies = [ "md-5", "open-build-service-api", "open-build-service-mock", - "reqwest 0.11.9", + "reqwest 0.11.27", "rfc822-like", "rstest", "serde", @@ -1946,7 +1714,7 @@ dependencies = [ "strum 0.24.0", "tempfile", "tokio", - "tokio-util 0.7.13", + "tokio-util", "tracing", "tracing-error", "tracing-subscriber", @@ -1961,16 +1729,9 @@ version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - [[package]] name = "open-build-service-api" version = "0.1.0" -source = "git+https://github.com/collabora/open-build-service-rs#1bb9a29e289aea1c8e5c6609a4f24cf5f43651ab" dependencies = [ "base16ct", "bytes", @@ -1978,7 +1739,7 @@ dependencies = [ "futures", "md-5", "quick-xml", - "reqwest 0.11.9", + "reqwest 0.11.27", "serde", "strum_macros 0.23.1", "thiserror 1.0.30", @@ -1988,18 +1749,17 @@ dependencies = [ [[package]] name = "open-build-service-mock" version = "0.1.0" -source = "git+https://github.com/collabora/open-build-service-rs#1bb9a29e289aea1c8e5c6609a4f24cf5f43651ab" dependencies = [ "base16ct", - "http-types", + "base64ct", + "http 1.2.0", "md-5", "quick-xml", "rand 0.8.5", "serde", "strum 0.23.0", "strum_macros 0.23.1", - "wiremock 0.5.10", - "xml-builder", + "wiremock 0.6.2", ] [[package]] @@ -2046,15 +1806,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "os_str_bytes" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" -dependencies = [ - "memchr", -] - [[package]] name = "overload" version = "0.1.1" @@ -2102,8 +1853,8 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest 0.10.7", - "hmac 0.12.1", + "digest", + "hmac", ] [[package]] @@ -2150,30 +1901,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" -[[package]] -name = "polling" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" -dependencies = [ - "cfg-if", - "libc", - "log", - "wepoll-ffi", - "winapi", -] - -[[package]] -name = "polyval" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" -dependencies = [ - "cpuid-bool", - "opaque-debug", - "universal-hash", -] - [[package]] name = "powerfmt" version = "0.2.0" @@ -2186,36 +1913,6 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.86", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - [[package]] name = "proc-macro2" version = "1.0.93" @@ -2227,9 +1924,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.22.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8533f14c8382aaad0d592c812ac3b826162128b65662331e1127b45c3d18536b" +checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" dependencies = [ "memchr", "serde", @@ -2384,39 +2081,44 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "reqwest" -version = "0.11.9" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "base64 0.13.0", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.3.11", + "h2 0.3.26", "http 0.2.6", "http-body 0.4.4", - "hyper 0.14.17", + "hyper 0.14.32", "hyper-tls 0.5.0", "ipnet", "js-sys", - "lazy_static", "log", "mime", "native-tls", + "once_cell", "percent-encoding", "pin-project-lite", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", + "system-configuration", "tokio", "tokio-native-tls", - "tokio-util 0.6.9", + "tokio-util", + "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", - "winreg 0.7.0", + "winreg 0.50.0", ] [[package]] @@ -2446,7 +2148,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile", + "rustls-pemfile 2.2.0", "serde", "serde_json", "serde_urlencoded", @@ -2454,7 +2156,7 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", - "tokio-util 0.7.13", + "tokio-util", "tower-service", "url", "wasm-bindgen", @@ -2485,7 +2187,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "rustc_version 0.4.0", + "rustc_version", "syn 1.0.86", ] @@ -2495,22 +2197,13 @@ version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - [[package]] name = "rustc_version" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.6", + "semver", ] [[package]] @@ -2526,6 +2219,15 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + [[package]] name = "rustls-pemfile" version = "2.2.0" @@ -2592,27 +2294,12 @@ dependencies = [ "libc", ] -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - [[package]] name = "semver" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d" -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "serde" version = "1.0.218" @@ -2680,15 +2367,6 @@ dependencies = [ "yaml-rust", ] -[[package]] -name = "sha1" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" -dependencies = [ - "sha1_smol", -] - [[package]] name = "sha1" version = "0.10.1" @@ -2697,26 +2375,7 @@ checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha1_smol" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", + "digest", ] [[package]] @@ -2727,7 +2386,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -2781,16 +2440,6 @@ version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" -[[package]] -name = "socket2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "socket2" version = "0.5.8" @@ -2813,75 +2462,17 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "standback" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" -dependencies = [ - "version_check", -] - [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "stdweb" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -dependencies = [ - "discard", - "rustc_version 0.2.3", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", - "wasm-bindgen", -] - -[[package]] -name = "stdweb-derive" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_derive", - "syn 1.0.86", -] - -[[package]] -name = "stdweb-internal-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" -dependencies = [ - "base-x", - "proc-macro2", - "quote", - "serde", - "serde_derive", - "serde_json", - "sha1 0.6.1", - "syn 1.0.86", -] - -[[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" - [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" @@ -3004,21 +2595,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "termcolor" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "textwrap" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" - [[package]] name = "thiserror" version = "1.0.30" @@ -3078,21 +2654,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "time" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" -dependencies = [ - "const_fn", - "libc", - "standback", - "stdweb", - "time-macros 0.1.1", - "version_check", - "winapi", -] - [[package]] name = "time" version = "0.3.37" @@ -3107,7 +2668,7 @@ dependencies = [ "powerfmt", "serde", "time-core", - "time-macros 0.2.19", + "time-macros", ] [[package]] @@ -3116,16 +2677,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" -[[package]] -name = "time-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" -dependencies = [ - "proc-macro-hack", - "time-macros-impl", -] - [[package]] name = "time-macros" version = "0.2.19" @@ -3136,19 +2687,6 @@ dependencies = [ "time-core", ] -[[package]] -name = "time-macros-impl" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "standback", - "syn 1.0.86", -] - [[package]] name = "tinystr" version = "0.7.6" @@ -3172,7 +2710,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.8", + "socket2", "tokio-macros", "windows-sys 0.52.0", ] @@ -3198,20 +2736,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-util" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-util" version = "0.7.13" @@ -3354,16 +2878,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "url" version = "2.5.4" @@ -3389,16 +2903,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] -name = "valuable" -version = "0.1.0" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] -name = "value-bag" -version = "1.10.0" +name = "valuable" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "vcpkg" @@ -3561,15 +3075,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - [[package]] name = "winapi" version = "0.3.9" @@ -3586,15 +3091,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -3632,6 +3128,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -3785,11 +3290,12 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winreg" -version = "0.7.0" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] @@ -3814,7 +3320,7 @@ dependencies = [ "futures", "futures-timer", "http-types", - "hyper 0.14.17", + "hyper 0.14.32", "log", "once_cell", "regex", @@ -3868,12 +3374,6 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" -[[package]] -name = "xml-builder" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aff3eebeb8c12d38dd6dcbd07082929a55764d13ad695632c35132ff7cf61ec" - [[package]] name = "yaml-rust" version = "0.4.5" @@ -3996,7 +3496,7 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b280484c454e74e5fff658bbf7df8fdbe7a07c6b2de4a53def232c15ef138f3a" dependencies = [ - "aes 0.8.4", + "aes", "arbitrary", "bzip2", "constant_time_eq", @@ -4005,13 +3505,13 @@ dependencies = [ "deflate64", "displaydoc", "flate2", - "hmac 0.12.1", + "hmac", "indexmap 2.7.1", "lzma-rs", "memchr", "pbkdf2", "rand 0.8.5", - "sha1 0.10.1", + "sha1", "thiserror 2.0.11", "time 0.3.37", "zeroize", diff --git a/Cargo.toml b/Cargo.toml index a35d0f2..a715ea5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ backoff = { version = "0.4", features = ["tokio"] } base16ct = { version = "0.1", features = ["std"] } bytes = "1.1" camino = "1.0" -clap = { version = "3.1", features = ["default", "derive", "env"] } +clap = { version = "4.5", features = ["default", "derive", "env"] } color-eyre = "0.6" derivative = "2.2" futures-util = "0.3" diff --git a/src/handler.rs b/src/handler.rs index 55d7e7e..678d859 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -49,9 +49,9 @@ trait FlagSupportingExplicitValue { fn flag_supporting_explicit_value(self) -> Self; } -impl FlagSupportingExplicitValue for clap::Arg<'_> { +impl FlagSupportingExplicitValue for clap::Arg { fn flag_supporting_explicit_value(self) -> Self { - self.min_values(0) + self.num_args(0..=1) .require_equals(true) .required(false) .default_value("false") @@ -67,7 +67,7 @@ struct DputAction { branch_to: String, #[clap(long, default_value_t = DEFAULT_BUILD_INFO.to_owned())] build_info_out: String, - #[clap(long, parse(try_from_str), flag_supporting_explicit_value())] + #[clap(long, flag_supporting_explicit_value())] rebuild_if_unchanged: bool, } @@ -130,9 +130,9 @@ struct DownloadBinariesAction { struct PruneAction { #[clap(long, default_value_t = DEFAULT_BUILD_INFO.to_owned())] build_info: String, - #[clap(long, parse(try_from_str), flag_supporting_explicit_value())] + #[clap(long, flag_supporting_explicit_value())] ignore_missing_build_info: bool, - #[clap(long, parse(try_from_str), flag_supporting_explicit_value())] + #[clap(long, flag_supporting_explicit_value())] only_if_job_unsuccessful: bool, } @@ -140,9 +140,9 @@ struct PruneAction { #[derive(Parser, Debug)] struct EchoAction { args: Vec, - #[clap(long, parse(try_from_str), flag_supporting_explicit_value())] + #[clap(long, flag_supporting_explicit_value())] fail: bool, - #[clap(long, parse(try_from_str), flag_supporting_explicit_value())] + #[clap(long, flag_supporting_explicit_value())] uppercase: bool, #[clap(long, default_value = " ")] sep: String, diff --git a/src/main.rs b/src/main.rs index d70d0c4..0269bd2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,6 +31,7 @@ mod upload; #[cfg(test)] mod test_support; +#[derive(Clone)] struct TargetsArg { targets: Targets, parsed_from: String, @@ -59,7 +60,7 @@ impl fmt::Display for TargetsArg { } } -#[derive(Display, EnumString)] +#[derive(Display, EnumString, Clone)] #[strum(serialize_all = "lowercase")] enum LogFormat { Pretty, @@ -86,7 +87,7 @@ struct Args { log: TargetsArg, #[clap(long, env = "OBS_RUNNER_LOG_FORMAT", default_value_t = LogFormat::Pretty)] log_format: LogFormat, - #[clap(long, env = "OBS_RUNNER_MAX_JOBS", default_value_t = 64, parse(try_from_str=parse_max_jobs))] + #[clap(long, env = "OBS_RUNNER_MAX_JOBS", default_value_t = 64, value_parser = parse_max_jobs)] max_jobs: usize, #[clap(long, env = "OBS_RUNNER_DEFAULT_MONITOR_JOB_TIMEOUT")] default_monitor_job_timeout: Option, From a5b197f68bef8ac66c733f62e0c559a569138072 Mon Sep 17 00:00:00 2001 From: Colin Kinloch Date: Thu, 20 Mar 2025 12:04:45 +0000 Subject: [PATCH 10/10] Add xml_dom to non destructively modify project/package meta --- Cargo.lock | 30 +++++++++++++------ Cargo.toml | 16 +++++------ README.md | 11 +++++++ src/build_meta.rs | 73 +++++++++++++++++++++++++++++++++++++++++------ src/handler.rs | 15 ++++++++-- src/monitor.rs | 2 +- src/upload.rs | 45 +++++++++++++++++++++++++---- 7 files changed, 158 insertions(+), 34 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e191d4e..71a7f09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,9 +36,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.18" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -650,7 +650,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2064,9 +2064,21 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -2075,9 +2087,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" @@ -2216,7 +2228,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2592,7 +2604,7 @@ dependencies = [ "getrandom 0.3.1", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a715ea5..54e03ab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,10 +32,10 @@ tracing-error = "0.2" tracing-subscriber = { version = "0.3", features = ["default", "json"] } url = "2.2" -gitlab-runner = "0.1.0" -# gitlab-runner = { path = "../gitlab-runner-rs/gitlab-runner" } -open-build-service-api = { git = "https://github.com/collabora/open-build-service-rs" } -# open-build-service-api = { path = "../open-build-service-rs/open-build-service-api" } +# gitlab-runner = "0.1.0" +gitlab-runner = { path = "../gitlab-runner-rs/gitlab-runner" } +# open-build-service-api = { git = "https://github.com/collabora/open-build-service-rs" } +open-build-service-api = { path = "../open-build-service-rs/open-build-service-api" } [dev-dependencies] claim = "0.5" @@ -43,7 +43,7 @@ rstest = "0.12" wiremock = "0.5" zip = "2.2.3" -gitlab-runner-mock = "0.1.0" -# gitlab-runner-mock = { path = "../gitlab-runner-rs/gitlab-runner-mock" } -open-build-service-mock = { git = "https://github.com/collabora/open-build-service-rs" } -# open-build-service-mock = { path = "../open-build-service-rs/open-build-service-mock" } +# gitlab-runner-mock = "0.1.0" +gitlab-runner-mock = { path = "../gitlab-runner-rs/gitlab-runner-mock" } +# open-build-service-mock = { git = "https://github.com/collabora/open-build-service-rs" } +open-build-service-mock = { path = "../open-build-service-rs/open-build-service-mock" } diff --git a/README.md b/README.md index 6ff07e5..b34a1e6 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ dput PROJECT DSC_FILE [--branch-to BRANCHED_PROJECT] [--build-info-out BUILD_INFO_FILE=build-info.yml] [--rebuild-if-unchanged] + [--repositories REPO[,REPO...]] ``` This will upload the given .dsc file, as well as any files referenced by it, to @@ -124,6 +125,16 @@ Note that, if `--branch-to` was specified, this will, in practice, never be triggered: due to the way metadata files are handled, right after a branching operation, there will *always* be a change to upload. +##### `--repositories REPO[,REPO,...]` + +A comma separated list of one or more repositories. If set the .dsc file will be +uploaded for only specified repositories that are part of the target project, +otherwise it will be uploaded for all the target projects repositories. +``` +// TODO: Should this work as a filter or specify repositories to build against +``` + + #### `generate-monitor` ```bash diff --git a/src/build_meta.rs b/src/build_meta.rs index 5201940..9388afd 100644 --- a/src/build_meta.rs +++ b/src/build_meta.rs @@ -1,8 +1,8 @@ use std::{collections::HashMap, time::Duration}; -use color_eyre::eyre::{Result, WrapErr}; +use color_eyre::eyre::{eyre, Result, WrapErr}; use gitlab_runner::outputln; -use open_build_service_api as obs; +use open_build_service_api::{self as obs}; use serde::{Deserialize, Serialize}; use tracing::{debug, info_span, instrument, Instrument}; @@ -56,6 +56,7 @@ pub enum DisabledRepos { pub struct BuildMetaOptions { pub history_retrieval: BuildHistoryRetrieval, pub disabled_repos: DisabledRepos, + pub enabled_repos: Option>, } #[instrument(skip(client))] @@ -158,15 +159,44 @@ impl BuildMeta { let mut repos = HashMap::new(); - for repo_meta in project_meta.repositories { - for arch in repo_meta.arches { + // Verify that all enabled repos exist for project + if let Some(enabled_repos) = &options.enabled_repos { + /* + for repo_name in enabled_repos.iter() { + if !project_meta + .repositories + .iter() + .any(|repo| &repo.name == repo_name) + { + return Err(eyre!("Project {:?} doesn't contain repo {:?}", project, repo_name)); + } + } + */ + } + //for repo_name in options.enabled_repos.iter().flatten() { + // project_meta.repositories.iter().all(f) + //} + + // TODO: Okay, too vague. We should alert if repository is missing from target project + // The Command line flag should be called --enabled-repositories + // TODO: Should we / are we blocking builds for repo or just monitoring? + // TODO: Should "repositories" be a filter or have the ability to add fields to the repositories list + // TODO: In a given project meta are the rebuild and block values used? () + // In the case they are, can I use block to stop a build? + for repo_meta in project_meta.repositories.iter().filter(|r| { + true || options + .enabled_repos + .as_ref() + .map_or(true, |a| a.contains(&r.name)) + }) { + for arch in &repo_meta.arches { if let DisabledRepos::Skip { wait_options } = &options.disabled_repos { let status = get_status_when_ready( &client, &project, &package, &repo_meta.name, - &arch, + arch, wait_options, ) .await?; @@ -186,7 +216,7 @@ impl BuildMeta { .project(project.to_owned()) .jobhistory( &repo_meta.name, - &arch, + arch, &obs::JobHistoryFilters::only_package(package.to_owned()), ) .instrument( @@ -202,7 +232,7 @@ impl BuildMeta { repos.insert( RepoArch { repo: repo_meta.name.clone(), - arch, + arch: arch.to_owned(), }, jobhist, ); @@ -224,6 +254,7 @@ impl BuildMeta { } pub async fn remove_disabled_repos(&mut self, options: &BuildMetaWaitOptions) -> Result<()> { + println!("durrrrr : {:?}", self.repos.keys()); for repo_arch in self.repos.keys().cloned().collect::>() { let status = get_status_when_ready( &self.client, @@ -360,6 +391,7 @@ mod tests { disabled_repos: DisabledRepos::Skip { wait_options: Default::default() }, + enabled_repos: None, } ) .await @@ -386,6 +418,7 @@ mod tests { disabled_repos: DisabledRepos::Skip { wait_options: Default::default() }, + enabled_repos: None, } ) .await @@ -433,6 +466,7 @@ mod tests { disabled_repos: DisabledRepos::Skip { wait_options: Default::default() }, + enabled_repos: None, } ) .await @@ -467,6 +501,7 @@ mod tests { disabled_repos: DisabledRepos::Skip { wait_options: Default::default() }, + enabled_repos: None, } ) .await @@ -502,10 +537,29 @@ mod tests { disabled_repos: DisabledRepos::Skip { wait_options: Default::default() }, + enabled_repos: None, + } + ) + .await + ); + assert_eq!(meta.repos.len(), 0); + + let mut meta = assert_ok!( + BuildMeta::get( + client.clone(), + TEST_PROJECT.to_owned(), + TEST_PACKAGE_1.to_owned(), + &BuildMetaOptions { + history_retrieval: BuildHistoryRetrieval::Full, + disabled_repos: DisabledRepos::Keep, + enabled_repos: None, } ) .await ); + assert_eq!(meta.repos.len(), 2); + + assert_ok!(meta.remove_disabled_repos(&Default::default()).await); assert_eq!(meta.repos.len(), 0); let mut meta = assert_ok!( @@ -516,6 +570,7 @@ mod tests { &BuildMetaOptions { history_retrieval: BuildHistoryRetrieval::Full, disabled_repos: DisabledRepos::Keep, + enabled_repos: None, } ) .await @@ -573,7 +628,8 @@ mod tests { history_retrieval: BuildHistoryRetrieval::Full, disabled_repos: DisabledRepos::Skip { wait_options: Default::default() - } + }, + enabled_repos: None, } ) .await @@ -628,6 +684,7 @@ mod tests { } else { DisabledRepos::Keep }, + enabled_repos: None, } ) .await diff --git a/src/handler.rs b/src/handler.rs index 678d859..8b35a3b 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -21,7 +21,7 @@ use open_build_service_api as obs; use serde::{Deserialize, Serialize}; use tokio::{fs::File as AsyncFile, io::AsyncSeekExt}; use tokio_util::{compat::TokioAsyncReadCompatExt, io::ReaderStream}; -use tracing::{debug, error, instrument, warn}; +use tracing::{debug, error, info, instrument, warn}; use crate::{ artifacts::{save_to_tempfile, ArtifactDirectory}, @@ -61,6 +61,7 @@ impl FlagSupportingExplicitValue for clap::Arg { #[derive(Parser, Debug)] struct DputAction { + /// Project project: String, dsc: String, #[clap(long, default_value = "")] @@ -69,6 +70,9 @@ struct DputAction { build_info_out: String, #[clap(long, flag_supporting_explicit_value())] rebuild_if_unchanged: bool, + /// Comma separated list of repositories to trigger build for + #[clap(long, value_delimiter = ',')] + repositories: Option>, } #[derive(Parser, Debug)] @@ -148,7 +152,7 @@ struct EchoAction { sep: String, } -#[derive(Subcommand)] +#[derive(Subcommand, Debug)] enum Action { Dput(DputAction), GenerateMonitor(GenerateMonitorAction), @@ -361,6 +365,7 @@ impl ObsJobHandler { branch_to, args.dsc.as_str().into(), self, + &args.repositories, ) .await?; @@ -394,6 +399,7 @@ impl ObsJobHandler { // Getting disabled repos has to happen *after* the upload, // since the new version can change the supported architectures. disabled_repos: DisabledRepos::Keep, + enabled_repos: None, //args.repositories.clone(), }, ) .await?; @@ -420,6 +426,7 @@ impl ObsJobHandler { disabled_repos: DisabledRepos::Skip { wait_options: Default::default(), }, + enabled_repos: None, // args.repositories.clone(), }, ) .await? @@ -658,6 +665,7 @@ impl ObsJobHandler { let args = shell_words::split(&cmdline).wrap_err("Invalid command line")?; let command = Command::try_parse_from(args)?; + info!(?command.action); match command.action { Action::Dput(args) => self.run_dput(args).await?, Action::GenerateMonitor(args) => self.run_generate_monitor(args).await?, @@ -875,6 +883,9 @@ mod tests { .with_targets([ ("obs_gitlab_runner", Level::TRACE), ("gitlab_runner", Level::DEBUG), + ("gitlab_runner_mock", Level::DEBUG), + ("open_build_service_api", Level::DEBUG), + ("open_build_service_mock", Level::DEBUG), ]) .with_default(Level::WARN), ), diff --git a/src/monitor.rs b/src/monitor.rs index 2144627..d32f750 100644 --- a/src/monitor.rs +++ b/src/monitor.rs @@ -111,7 +111,7 @@ impl ObsMonitor { let result = all_results .results .into_iter() - .find(|r| r.arch == self.package.arch) + .find(|r| r.arch == self.package.arch && r.repository == self.package.repository) .ok_or_else(|| { eyre!( "Failed to find results for architecture {}", diff --git a/src/upload.rs b/src/upload.rs index 4d59470..52d2fa8 100644 --- a/src/upload.rs +++ b/src/upload.rs @@ -7,7 +7,7 @@ use derivative::*; use futures_util::{FutureExt, Stream, TryStreamExt}; use gitlab_runner::outputln; use md5::{Digest, Md5}; -use open_build_service_api as obs; +use open_build_service_api::{self as obs, BuildTarget, PackageModifier}; use tracing::{debug, info_span, instrument, trace, warn, Instrument}; use crate::{artifacts::ArtifactDirectory, dsc::Dsc, retry::retry_request}; @@ -78,6 +78,7 @@ impl ObsDscUploader { branch_to: Option, dsc_path: Utf8PathBuf, artifacts: &impl ArtifactDirectory, + enabled_repos: &Option>, ) -> Result { let dsc_contents = artifacts .get_data(dsc_path.as_str()) @@ -106,9 +107,12 @@ impl ObsDscUploader { ..Default::default() }; + let client_project = client.project(project.clone()); let client_package = client.project(project.clone()).package(package.clone()); + outputln!("starting branch"); let result = retry_request(|| async { client_package.branch(&options).await }).await; + outputln!("done {:?}", result); if let Err(err) = result { match err.downcast_ref::() { Some(obs::Error::ApiError(e)) if e.code == "not_missing" => { @@ -121,7 +125,27 @@ impl ObsDscUploader { } } + let original_project_meta = client_project.meta().await?; + let original_package_meta = client_package.meta().await?; + + outputln!("pkg: {:?}", original_package_meta); + outputln!("proj: {:?}", original_project_meta); project = branch_to; + + let mut package_mod = PackageModifier::new(); + if let Some(enabled_repos) = enabled_repos { + let disabled_repos = original_project_meta + .repositories + .iter() + .map(|repo| &repo.name) + .filter(|name| !enabled_repos.contains(name)) + .cloned() + .map(|name| BuildTarget::repo(name)) + .collect::>(); + package_mod = package_mod.with_build_disabled(disabled_repos); + } + + package_mod.commit(&client.project(project.clone())).await?; } Ok(ObsDscUploader { @@ -318,6 +342,7 @@ impl ObsDscUploader { .file_name() .ok_or_else(|| eyre!("Invalid dsc path: {}", self.dsc_path))?; + // TODO: filter by enabled_repos? outputln!( "Uploading {} to {}/{}...", dsc_filename, @@ -450,6 +475,7 @@ mod tests { None, STUB_DSC.to_owned().into(), &artifacts, + &None, ) .await ); @@ -466,6 +492,7 @@ mod tests { None, STUB_DSC.to_owned().into(), &artifacts, + &None, ) .await ); @@ -514,6 +541,7 @@ mod tests { None, STUB_DSC.to_owned().into(), &artifacts, + &None, ) .await ); @@ -691,7 +719,8 @@ mod tests { TEST_PROJECT.to_owned(), None, dsc1_file.to_owned(), - &artifacts + &artifacts, + &None, ) .await ); @@ -744,7 +773,8 @@ mod tests { TEST_PROJECT.to_owned(), None, dsc2_file.to_owned(), - &artifacts + &artifacts, + &None, ) .await ); @@ -781,7 +811,8 @@ mod tests { TEST_PROJECT.to_owned(), None, dsc3_file.to_owned(), - &artifacts + &artifacts, + &None, ) .await ); @@ -813,7 +844,8 @@ mod tests { TEST_PROJECT.to_owned(), None, dsc4_file.to_owned(), - &artifacts + &artifacts, + &None, ) .await ); @@ -850,7 +882,8 @@ mod tests { TEST_PROJECT.to_owned(), Some(branched_project.clone()), dsc4_file.to_owned(), - &artifacts + &artifacts, + &None, ) .await );