rad:zwTxygwuz5LDGBq255RA2CbNGrz8
radicle-ci-brokercf395350eade13c1c739e96375111d2957bf921e
Request message
.radicle/native.yaml
git clone /home/_rad/.radicle/storage/zwTxygwuz5LDGBq255RA2CbNGrz8 /srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src
git config advice.detachedHead false
git checkout cf395350eade13c1c739e96375111d2957bf921e
git show cf395350eade13c1c739e96375111d2957bf921e
timeout 600 bash -c set -xeuo pipefail
cargo --version
rustc --version
cargo fmt --check
cargo clippy --all-targets --workspace -- -Dwarnings
cargo build --all-targets --workspace
cargo doc --workspace
cargo test --workspace --no-fail-fast
subplot docgen ci-broker.subplot -o doc/ci-broker.html
subplot docgen doc/userguide.subplot -o doc/userguide.html
make -C doc publish
Request message
{ "request": "trigger", "version": 1, "event_type": "push", "repository": { "id": "rad:zwTxygwuz5LDGBq255RA2CbNGrz8", "name": "radicle-ci-broker", "description": "Radicle CI broker", "private": false, "default_branch": "main", "delegates": [ "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV", "did:key:z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT" ] }, "pusher": { "id": "did:key:z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV", "alias": "liw" }, "before": "cf395350eade13c1c739e96375111d2957bf921e", "after": "cf395350eade13c1c739e96375111d2957bf921e", "branch": "main", "commits": [ "cf395350eade13c1c739e96375111d2957bf921e" ] }
.radicle/native.yaml
shell: | cargo --version rustc --version cargo fmt --check cargo clippy --all-targets --workspace -- -Dwarnings cargo build --all-targets --workspace cargo doc --workspace cargo test --workspace --no-fail-fast subplot docgen ci-broker.subplot -o doc/ci-broker.html subplot docgen doc/userguide.subplot -o doc/userguide.html make -C doc publish
git clone /home/_rad/.radicle/storage/zwTxygwuz5LDGBq255RA2CbNGrz8 /srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src
Command arguments:
"git"
"clone"
"/home/_rad/.radicle/storage/zwTxygwuz5LDGBq255RA2CbNGrz8"
"/srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src"
In directory: /
Exit code: 0
Output (stdout and stderr):
Cloning into '/srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src'... done.
git config advice.detachedHead false
Command arguments:
"git"
"config"
"advice.detachedHead"
"false"
In directory: /srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src
Exit code: 0
git checkout cf395350eade13c1c739e96375111d2957bf921e
Command arguments:
"git"
"checkout"
"cf395350eade13c1c739e96375111d2957bf921e"
In directory: /srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src
Exit code: 0
Output (stdout and stderr):
HEAD is now at cf39535 feat: use the tracing crate for structured logging
git show cf395350eade13c1c739e96375111d2957bf921e
Command arguments:
"git"
"show"
"cf395350eade13c1c739e96375111d2957bf921e"
In directory: /srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src
Exit code: 0
Output (stdout and stderr):
commit cf395350eade13c1c739e96375111d2957bf921e Author: Lars Wirzenius <liw@liw.fi> Date: Tue Nov 26 16:27:27 2024 +0200 feat: use the tracing crate for structured logging Switch from the "slog" family of crates for structured logging to the "tracing" family. There should be no significant changes to the log messages, so I don't consider this to be a breaking change. The benefit of this change is that it opens up the possibility to add extra fields to the log messages as JSON values, instead of strings that contain the values as JSON. With slog we currently have this message:: {"msg":"broker database: /home/_rad/ci-broker.db"} With slog or tracing we can change this to: {"msg":"open database", "filename": "/home/_rad/ci-broker.db"} With tracing we can have this: {"msg":"open database","db":{"type":"sqlite","filename":"/home/_rad/ci-broker.db","size":12765}} which would be, formatted prettily { "msg": "open database", "db": { "type": "sqlite", "filename": "/home/_rad/ci-broker.db", "size": 12765 } } Such extra fields can then be easily queried or otherwise processed with programs, much more easily than having such programs parse text fields as JSON before they can be processed. Doing this with slog is supposed to be possible, but I have failed to get it to work. The slog and tracing families of libraries seem otherwise similar for our purposes. Signed-off-by: Lars Wirzenius <liw@liw.fi> diff --git a/Cargo.lock b/Cargo.lock index 33b27e7..57f1468 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -178,12 +178,6 @@ version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - [[package]] name = "arraydeque" version = "0.5.1" @@ -2019,9 +2013,6 @@ dependencies = [ "serde", "serde_json", "serde_yml", - "slog", - "slog-json", - "slog-scope", "sqlite", "sqlite3-sys", "subplot-build", @@ -2029,7 +2020,10 @@ dependencies = [ "tempfile", "thiserror", "time", + "tracing", + "tracing-subscriber", "uuid", + "valuable", ] [[package]] @@ -2476,35 +2470,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" -[[package]] -name = "slog" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06" - -[[package]] -name = "slog-json" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e1e53f61af1e3c8b852eef0a9dee29008f55d6dd63794f3f12cef786cf0f219" -dependencies = [ - "serde", - "serde_json", - "slog", - "time", -] - -[[package]] -name = "slog-scope" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f95a4b4c3274cd2869549da82b57ccc930859bdbf5bcea0424bc5f140b3c786" -dependencies = [ - "arc-swap", - "lazy_static", - "slog", -] - [[package]] name = "slug" version = "0.1.6" @@ -2976,6 +2941,18 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", + "valuable", + "valuable-serde", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" @@ -2986,12 +2963,17 @@ dependencies = [ "nu-ansi-term", "once_cell", "regex", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", + "tracing-serde", + "valuable", + "valuable-serde", ] [[package]] @@ -3155,6 +3137,30 @@ name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +dependencies = [ + "valuable-derive", +] + +[[package]] +name = "valuable-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d44690c645190cfce32f91a1582281654b2338c6073fa250b0949fd25c55b32" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "valuable-serde" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5285cfff30cdabe26626736a54d989687dd9cab84f51f4048b61d6d0ae8b0907" +dependencies = [ + "serde", + "valuable", +] [[package]] name = "vcpkg" diff --git a/Cargo.toml b/Cargo.toml index c33af58..eb23c63 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,16 +22,16 @@ rss = "2.0.9" serde = { version = "1.0.204", features = ["derive"] } serde_json = "1.0.121" serde_yml = "0.0.11" -slog = { version = "2.7.0", features = ["release_max_level_trace"] } -slog-json = "2.6.1" -slog-scope = "4.4.0" sqlite = "0.32.0" sqlite3-sys = "0.15.0" subplotlib = "0.11.0" tempfile = { version = "3.10.1" } thiserror = "1.0.63" time = { version = "0.3.36", features = ["formatting", "macros"] } +tracing = { version = "0.1.40", features = ["max_level_trace", "release_max_level_trace", "valuable"] } +tracing-subscriber = { version = "0.3.18", features = ["env-filter", "fmt", "json", "valuable"] } uuid = { version = "1.10.0", features = ["v4"] } +valuable = { version = "0.1.0", features = ["derive"] } [dependencies.radicle] version = "0.13.0" diff --git a/src/bin/cib.rs b/src/bin/cib.rs index e82dfee..eba6aff 100644 --- a/src/bin/cib.rs +++ b/src/bin/cib.rs @@ -25,9 +25,7 @@ use radicle_ci_broker::{ }; fn main() { - let logger = logger::open(); - - if let Err(e) = fallible_main(&logger) { + if let Err(e) = fallible_main() { logger::error("ERROR", &e); logger::end_cib_in_error(); exit(1); @@ -35,9 +33,9 @@ fn main() { logger::end_cib_successfully(); } -fn fallible_main(logger: &logger::Logger) -> Result<(), CibError> { +fn fallible_main() -> Result<(), CibError> { let args = Args::parse(); - logger.set_minimum_level(args.minimum_log_level()); + logger::open(args.minimum_log_level()); // We only log this after setting the minimum log level from the // command line. diff --git a/src/bin/cibtool.rs b/src/bin/cibtool.rs index 45f89a8..ad94c4e 100644 --- a/src/bin/cibtool.rs +++ b/src/bin/cibtool.rs @@ -43,7 +43,7 @@ use radicle_ci_broker::{ mod cibtoolcmd; fn main() { - let _logger = logger::open(); + let _logger = logger::open(logger::LogLevel::Info); if let Err(e) = fallible_main() { eprintln!("ERROR: {}", e); let mut e = e.source(); diff --git a/src/logger.rs b/src/logger.rs index 6707180..36422c4 100644 --- a/src/logger.rs +++ b/src/logger.rs @@ -3,7 +3,6 @@ #[cfg(test)] use std::sync::Once; use std::{ - fmt, io::Write, path::Path, process::ExitStatus, @@ -13,8 +12,9 @@ use std::{ use clap::ValueEnum; use radicle::{git::raw::Oid, identity::RepoId, node::Event}; -use slog::{debug, error, info, o, trace, warn, Drain}; -use slog_scope::GlobalLoggerGuard; +use tracing::{debug, error, info, trace, warn, Level}; +use tracing_subscriber::{fmt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter}; +//use valuable::Valuable; use crate::{ ci_event::CiEvent, @@ -35,24 +35,30 @@ pub enum LogLevel { Info, Warning, Error, - Critical, } -impl fmt::Display for LogLevel { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "<{:?}>", self) +impl std::fmt::Display for LogLevel { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let s = match self { + Self::Trace => "trace", + Self::Debug => "debug", + Self::Info => "info", + Self::Warning => "warn", + Self::Error => "error", + }; + + write!(f, "{s}") } } -impl From<LogLevel> for slog::Level { +impl From<LogLevel> for tracing::Level { fn from(log_level: LogLevel) -> Self { match log_level { - LogLevel::Trace => slog::Level::Trace, - LogLevel::Debug => slog::Level::Debug, - LogLevel::Info => slog::Level::Info, - LogLevel::Warning => slog::Level::Warning, - LogLevel::Error => slog::Level::Error, - LogLevel::Critical => slog::Level::Critical, + LogLevel::Trace => Level::TRACE, + LogLevel::Debug => Level::DEBUG, + LogLevel::Info => Level::INFO, + LogLevel::Warning => Level::WARN, + LogLevel::Error => Level::ERROR, } } } @@ -97,12 +103,7 @@ impl Write for LogWriter { } pub struct Logger { - minimum_log_level: Arc<Mutex<slog::Level>>, - - // We need to keep this for as long as need to log. But we don't - // refer to it directly. - #[allow(dead_code)] - guard: GlobalLoggerGuard, + minimum_log_level: Arc<Mutex<tracing::Level>>, } impl Logger { @@ -114,22 +115,27 @@ impl Logger { } } -pub fn open() -> Logger { - let underlying_logger = slog_json::Json::new(LogWriter::default()) - .add_default_keys() - .set_flush(true) - .set_newlines(true) - .build(); +#[allow(clippy::unwrap_used)] +pub fn open(level: LogLevel) -> Logger { + #[cfg(test)] + let writer = fmt::TestWriter::new(); + + #[cfg(not(test))] + let writer = std::io::stderr; + + let fmt_layer = fmt::layer().with_target(false).with_writer(writer).json(); + + let filter_layer = EnvFilter::try_new(level.to_string()).unwrap(); + + tracing_subscriber::registry() + .with(filter_layer) + .with(fmt_layer) + .init(); // Set the default log level. Trace is good for tests. let level = Arc::new(Mutex::new(LogLevel::Trace.into())); - let filter = LogLevelFilter::new(underlying_logger, level.clone()); - let log = slog::Logger::root(Mutex::new(filter).fuse(), o!()); - let guard = slog_scope::set_global_logger(log); - Logger { - guard, minimum_log_level: level, } } @@ -156,363 +162,239 @@ static INIT: Once = Once::new(); #[cfg(test)] static mut LOGGER: Option<Logger> = None; -struct LogLevelFilter<D> { - drain: D, - minimum_log_level: Arc<Mutex<slog::Level>>, -} - -impl<D> LogLevelFilter<D> { - pub fn new(drain: D, minimum_log_level: Arc<Mutex<slog::Level>>) -> Self { - Self { - drain, - minimum_log_level, - } - } -} - -impl<D> Drain for LogLevelFilter<D> -where - D: Drain, -{ - type Ok = Option<D::Ok>; - type Err = Option<D::Err>; - - fn log( - &self, - record: &slog::Record, - values: &slog::OwnedKVList, - ) -> Result<Self::Ok, Self::Err> { - #[allow(clippy::unwrap_used)] // We have no good way to report an error - let min = *self - .minimum_log_level - .lock() - .expect("lock log level filter minimum level"); - if record.level().is_at_least(min) { - self.drain.log(record, values).map(Some).map_err(Some) - } else { - Ok(None) - } - } -} - #[cfg(test)] #[ctor::ctor] fn open_for_tests() { INIT.call_once(|| unsafe { - LOGGER = Some(open()); + LOGGER = Some(open(LogLevel::Trace)); }); } pub fn start_cib() { - info!(slog_scope::logger(), "CI broker starts"; "version" => env!("GIT_HEAD")); + info!(version = env!("GIT_HEAD"), "CI broker starts"); } pub fn end_cib_successfully() { - info!(slog_scope::logger(), "CI broker ends successfully"); + info!("CI broker ends successfully"); } pub fn end_cib_in_error() { - error!( - slog_scope::logger(), - "CI broker ends in unrecoverable error" - ); + error!("CI broker ends in unrecoverable error"); } pub fn node_event_source_created(source: &NodeEventSource) { - debug!( - slog_scope::logger(), - "created node event source"; - "source" => format!("{source:#?}") - ); + debug!(source = format!("{source:#?}"), "created node event source"); } pub fn node_event_source_got_event(event: &Event) { debug!( - slog_scope::logger(), - "node event source received event"; - "node_event" => format!("{event:#?}") + node_event = ?event, + "node event source received event" ); } pub fn node_event_source_eof(source: &NodeEventSource) { debug!( - slog_scope::logger(), - "node event source end of file on control socket"; - "node_event_source" => format!("{source:#?}") + node_event_source = ?source, + "node event source end of file on control socket" ); } pub fn ci_event_source_created(source: &CiEventSource) { - debug!( - slog_scope::logger(), - "created CI event source"; - "source" => format!("{source:#?}") - ); + debug!(?source, "created CI event source"); } pub fn ci_event_source_got_events(events: &[CiEvent]) { - debug!( - slog_scope::logger(), - "CI event source received events"; - "ci_events" => format!("{events:#?}") - ); + debug!(?events, "CI event source received events"); } pub fn ci_event_source_disconnected() { - info!( - slog_scope::logger(), - "CI event source received disconnection" - ); + info!("CI event source received disconnection"); } pub fn ci_event_source_end() { - info!( - slog_scope::logger(), - "CI event source was notified end of events" - ); + info!("CI event source was notified end of events"); } pub fn ci_event_source_eof(source: &CiEventSource) { - info!( - slog_scope::logger(), - "CI event source end of file"; - "ci_event_source" => format!("{source:#?}") - ); + info!(?source, "CI event source end of file"); } pub fn loaded_config(config: &Config) { - debug!(slog_scope::logger(), "loaded configuration {config:#?}"); + debug!("loaded configuration {config:#?}"); } pub fn adapter_config(config: &Config) { - debug!(slog_scope::logger(), "adapter configuration {config:#?}"); + debug!("adapter configuration {config:#?}"); } pub fn queueproc_start() { - debug!( - slog_scope::logger(), - "start thread to process events until a shutdown event" - ); + debug!("start thread to process events until a shutdown event"); } pub fn queueproc_end() { - debug!(slog_scope::logger(), "thread to process events ends"); + debug!("thread to process events ends"); } pub fn queueproc_channel_disconnect() { - info!( - slog_scope::logger(), - "event notification channel disconnected" - ); + info!("event notification channel disconnected"); } pub fn queueproc_queue_length(len: usize) { - trace!( - slog_scope::logger(), - "event queue length"; "length" => len); + trace!(?len, "event queue length"); } pub fn queueproc_picked_event(id: &QueueId, event: &QueuedCiEvent) { - info!( - slog_scope::logger(), - "picked event from queue: {id}: {event:#?}" - ); + info!("picked event from queue: {id}: {event:#?}"); } pub fn queueproc_remove_event(id: &QueueId) { - info!(slog_scope::logger(), "remove event from queue: {id}"); + info!("remove event from queue: {id}"); } pub fn queueproc_action_run(rid: &RepoId, oid: &Oid) { - info!(slog_scope::logger(), "Action: run: {rid} {oid}"); + info!("Action: run: {rid} {oid}"); } pub fn queueproc_action_shutdown() { - info!(slog_scope::logger(), "Action: shutdown"); + info!("Action: shutdown"); } pub fn queueadd_start() { - debug!( - slog_scope::logger(), - "start thread to add events from node to event queue" - ); + debug!("start thread to add events from node to event queue"); } pub fn queueadd_control_socket_close() { - info!( - slog_scope::logger(), - "no more events from node control socket" - ); + info!("no more events from node control socket"); } pub fn queueadd_push_event(e: &CiEvent) { - debug!( - slog_scope::logger(), - "insert broker event into queue: {e:?}" - ); + debug!("insert broker event into queue: {e:?}"); } pub fn queueadd_end() { - debug!(slog_scope::logger(), "thread to process events ends"); + debug!("thread to process events ends"); } pub fn pages_directory_unset() { - warn!( - slog_scope::logger(), - "not writing HTML report pages as output directory has not been set" - ); + warn!("not writing HTML report pages as output directory has not been set"); } pub fn pages_interval(interval: Duration) { debug!( - slog_scope::logger(), "wait about {} seconds to update HTML report pages again", interval.as_secs() ); } pub fn pages_disconnected() { - info!( - slog_scope::logger(), - "page updater: run notification channel disconnected" - ); + info!("page updater: run notification channel disconnected"); } pub fn pages_start() { - debug!(slog_scope::logger(), "start page updater thread"); + debug!("start page updater thread"); } pub fn pages_end() { - debug!(slog_scope::logger(), "end page updater thread"); + debug!("end page updater thread"); } pub fn event_disconnected() { - info!( - slog_scope::logger(), - "connection to node control socket broke" - ); + info!("connection to node control socket broke"); } pub fn event_end() { - info!( - slog_scope::logger(), - "no more node events from control socket: iterator ended" - ); + info!("no more node events from control socket: iterator ended"); } pub fn broker_db(filename: &Path) { - info!( - slog_scope::logger(), - "broker database: {}", - filename.display() - ); + info!("broker database: {}", filename.display()); } pub fn broker_start_run(trigger: &Request) { - info!(slog_scope::logger(), "start CI run"); - debug!(slog_scope::logger(), "trigger event: {trigger:#?}"); + info!("start CI run"); + debug!("trigger event: {trigger:#?}"); } pub fn broker_end_run(run: &Run) { - info!(slog_scope::logger(), "Finish CI run"); - debug!(slog_scope::logger(), "finished CI run: {run:#?}"); + info!("Finish CI run"); + debug!("finished CI run: {run:#?}"); } pub fn adapter_no_first_response() { - error!(slog_scope::logger(), "no first response message"); + error!("no first response message"); } pub fn adapter_no_second_response() { - error!(slog_scope::logger(), "no second response message"); + error!("no second response message"); } pub fn adapter_too_many_responses() { - error!(slog_scope::logger(), "too many response messages"); + error!("too many response messages"); } pub fn adapter_stderr_line(line: &str) { - debug!(slog_scope::logger(), "adapter stderr"; "stderr" => line); + debug!(stderr_line = line, "adapter stderr"); } pub fn adapter_result(exit: i32) { - debug!(slog_scope::logger(), "adapter exit code"; "exit_code" => exit); + debug!(exit_code = exit, "adapter exit code"); } pub fn adapter_did_not_exit_voluntarily() { - warn!( - slog_scope::logger(), - "adapter did not exit voluntarily: terminated for taking too long" - ); + warn!("adapter did not exit voluntarily: terminated for taking too long"); } pub fn adapter_did_not_exit() { - warn!( - slog_scope::logger(), - "adapter did not exit: probably killed by signal" - ); + warn!("adapter did not exit: probably killed by signal"); } pub fn timeoutcmd_request_termination(result: Result<(), std::sync::mpsc::SendError<()>>) { - trace!( - slog_scope::logger(), - "request termination of child process: {result:?}" - ); + trace!("request termination of child process: {result:?}"); } pub fn timeoutcmd_wait_word_from_nanny() { - trace!(slog_scope::logger(), "wait: wait for word from nanny"); + trace!("wait: wait for word from nanny"); } pub fn timeoutcmd_wait_got_word_from_nanny() { - trace!(slog_scope::logger(), "got word from nanny"); + trace!("got word from nanny"); } pub fn timeoutcmd_wait_on_nanny_to_end() { - trace!(slog_scope::logger(), "wait: wait on nanny thread to end"); + trace!("wait: wait on nanny thread to end"); } pub fn timeoutcmd_wait_on_stdin_writer_to_end() { - trace!( - slog_scope::logger(), - "wait: wait for stdin writer to terminate" - ); + trace!("wait: wait for stdin writer to terminate"); } pub fn timeoutcmd_wait_on_stdout_reader_to_end() { - trace!( - slog_scope::logger(), - "wait: wait for stdout reader to terminate" - ); + trace!("wait: wait for stdout reader to terminate"); } pub fn timeoutcmd_wait_on_stderr_reader_to_end() { - trace!( - slog_scope::logger(), - "wait: wait for stderr reader to terminate" - ); + trace!("wait: wait for stderr reader to terminate"); } pub fn timeoutcmd_wait_on_child_to_end() { - trace!(slog_scope::logger(), "wait: wait for child to terminate"); + trace!("wait: wait for child to terminate"); } pub fn timeoutcmd_wait_status(status: ExitStatus) { - trace!(slog_scope::logger(), "wait: wait status: {status:?}"); + trace!("wait: wait status: {status:?}"); } pub fn timeoutcmd_ok() { - trace!(slog_scope::logger(), "wait: return Ok result"); + trace!("wait: return Ok result"); } pub fn timeoutcmd_nanny_start() { - trace!(slog_scope::logger(), "nanny: start monitoring child"); + trace!("nanny: start monitoring child"); } pub fn timeoutcmd_nanny_terminated_as_requested(result: Result<(), std::io::Error>) { - trace!( - slog_scope::logger(), - "nanny: terminated child by request: {result:?}" - ); + trace!("nanny: terminated child by request: {result:?}"); } pub fn timeoutcmd_nanny_too_long( @@ -522,7 +404,6 @@ pub fn timeoutcmd_nanny_too_long( result: Result<(), std::io::Error>, ) { trace!( - slog_scope::logger(), "nanny: child {} has run for too long ({} ms > {} ms); terminated it: {:?}", id, elapsed.as_millis(), @@ -532,63 +413,42 @@ pub fn timeoutcmd_nanny_too_long( } pub fn timeoutcmd_nanny_child_died() { - trace!(slog_scope::logger(), "nanny: child has terminated"); + trace!("nanny: child has terminated"); } pub fn timeoutcmd_nanny_time_to_end() { - trace!( - slog_scope::logger(), - "nanny: tell other threads it's time to end" - ); + trace!("nanny: tell other threads it's time to end"); } pub fn timeoutcmd_nanny_ends() { - trace!(slog_scope::logger(), "nanny: ends"); + trace!("nanny: ends"); } pub fn timeoutcmd_line_reader_try_byte(name: &'static str) { - trace!( - slog_scope::logger(), - "line receiver {}: try to receive next byte", - name - ); + trace!("line receiver {}: try to receive next byte", name); } pub fn timeoutcmd_line_reader_tried_byte( name: &'static str, result: Result<u8, std::sync::mpsc::TryRecvError>, ) { - trace!( - slog_scope::logger(), - "line receiver {}: tried to read line: {:?}", - name, - result - ); + trace!("line receiver {}: tried to read line: {:?}", name, result); } pub fn timeoutcmd_line_reader_got_line(name: &'static str, line: &str) { - trace!( - slog_scope::logger(), - "line-receiver {}: received line={line:?}", - name, - ); + trace!("line-receiver {}: received line={line:?}", name,); } pub fn timeoutcmd_line_reader_got_disconnected(name: &'static str) { - trace!(slog_scope::logger(), "line-receiver {}: disconnected", name); + trace!("line-receiver {}: disconnected", name); } pub fn timeoutcmd_line_reader_did_child_die(name: &'static str) { - trace!( - slog_scope::logger(), - "line-receiver {}: has child terminated?", - name - ); + trace!("line-receiver {}: has child terminated?", name); } pub fn timeoutcmd_line_reader_child_died(name: &'static str) { trace!( - slog_scope::logger(), "line receiver {}: OK: child has terminated, not returning line", name ); @@ -596,7 +456,6 @@ pub fn timeoutcmd_line_reader_child_died(name: &'static str) { pub fn timeoutcmd_line_reader_child_channel_disconnected(name: &'static str) { trace!( - slog_scope::logger(), "line receiver {}: Disconnected: child has terminated, not returning line", name ); @@ -604,7 +463,6 @@ pub fn timeoutcmd_line_reader_child_channel_disconnected(name: &'static str) { pub fn timeoutcmd_nonblocking_try_byte(name: &'static str, count: usize) { trace!( - slog_scope::logger(), "read_to_end {}: try to receive next byte ({} so far)", name, count @@ -617,7 +475,6 @@ pub fn timeoutcmd_nonblocking_tried_byte( byte: &[u8], ) { trace!( - slog_scope::logger(), "read_to_end {}: tried to receive byte: result={:?} byte={:?}", name, result, @@ -626,11 +483,7 @@ pub fn timeoutcmd_nonblocking_tried_byte( } pub fn timeoutcmd_nonblocking_eof(name: &'static str) { - trace!( - slog_scope::logger(), - "read_to_end {}: got end of file", - name, - ); + trace!("read_to_end {}: got end of file", name,); } pub fn timeoutcmd_nonblocking_got_too_much( @@ -639,7 +492,6 @@ pub fn timeoutcmd_nonblocking_got_too_much( byte: &[u8], ) { trace!( - slog_scope::logger(), "read_to_end {}: received too much: result={:?} byte={:?}", name, result, @@ -648,31 +500,26 @@ pub fn timeoutcmd_nonblocking_got_too_much( } pub fn timeoutcmd_nonblocking_read_error(name: &'static str, err: &std::io::Error) { - trace!( - slog_scope::logger(), - "read_to_end {}: read error: {}", - name, - err - ); + trace!("read_to_end {}: read error: {}", name, err); } pub fn timeoutcmd_nonblocking_ends(name: &'static str) { - trace!(slog_scope::logger(), "read_to_end {}: ends", name,); + trace!("read_to_end {}: ends", name,); } pub fn debug(msg: &str) { - debug!(slog_scope::logger(), "{msg}"); + debug!("{msg}"); } pub fn debug2(msg: String) { - debug!(slog_scope::logger(), "{msg}"); + debug!("{msg}"); } pub fn error(msg: &str, e: &impl std::error::Error) { - error!(slog_scope::logger(), "{msg}: {e}"); + error!("{msg}: {e}"); let mut e = e.source(); while let Some(source) = e { - error!(slog_scope::logger(), "caused by: {}", source); + error!("caused by: {}", source); e = source.source(); } }
timeout 600 bash -c set -xeuo pipefail
cargo --version
rustc --version
cargo fmt --check
cargo clippy --all-targets --workspace -- -Dwarnings
cargo build --all-targets --workspace
cargo doc --workspace
cargo test --workspace --no-fail-fast
subplot docgen ci-broker.subplot -o doc/ci-broker.html
subplot docgen doc/userguide.subplot -o doc/userguide.html
make -C doc publish
Command arguments:
"timeout"
"600"
"bash"
"-c"
"set -xeuo pipefail\ncargo --version\nrustc --version\n\ncargo fmt --check\ncargo clippy --all-targets --workspace -- -Dwarnings\ncargo build --all-targets --workspace\ncargo doc --workspace\ncargo test --workspace --no-fail-fast\n\nsubplot docgen ci-broker.subplot -o doc/ci-broker.html\nsubplot docgen doc/userguide.subplot -o doc/userguide.html\nmake -C doc publish\n"
In directory: /srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src
Exit code: 0
Output (stdout and stderr):
+ cargo --version cargo 1.80.1 (376290515 2024-07-16) + rustc --version rustc 1.80.1 (3f5fd8dd4 2024-08-06) + cargo fmt --check + cargo clippy --all-targets --workspace -- -Dwarnings Updating crates.io index Downloading crates ... Downloaded tracing-serde v0.1.3 Downloaded matchers v0.1.0 Downloaded valuable-derive v0.1.0 Downloaded valuable v0.1.0 Downloaded tracing-log v0.2.0 Downloaded regex-syntax v0.6.29 Downloaded regex-automata v0.1.10 Compiling proc-macro2 v1.0.89 Compiling unicode-ident v1.0.13 Compiling version_check v0.9.5 Compiling libc v0.2.162 Checking cfg-if v1.0.0 Compiling typenum v1.17.0 Compiling serde v1.0.214 Compiling shlex v1.3.0 Compiling thiserror v1.0.68 Compiling memchr v2.7.4 Compiling syn v1.0.109 Compiling once_cell v1.20.2 Compiling byteorder v1.5.0 Compiling bitflags v2.6.0 Checking subtle v2.6.1 Checking stable_deref_trait v1.2.0 Compiling strsim v0.11.1 Compiling pkg-config v0.3.31 Compiling rustix v0.38.39 Compiling crossbeam-utils v0.8.20 Compiling generic-array v0.14.7 Compiling linux-raw-sys v0.4.14 Compiling anyhow v1.0.93 Compiling ahash v0.8.11 Compiling log v0.4.22 Compiling itoa v1.0.11 Compiling regex-syntax v0.8.5 Checking writeable v0.5.5 Checking cpufeatures v0.2.14 Checking litemap v0.7.3 Compiling utf8parse v0.2.2 Compiling num-conv v0.1.0 Compiling same-file v1.0.6 Compiling time-core v0.1.2 Compiling allocator-api2 v0.2.18 Compiling anstyle-parse v0.2.6 Compiling walkdir v2.5.0 Compiling aho-corasick v1.1.3 Compiling time-macros v0.2.18 Compiling ucd-trie v0.1.7 Checking icu_locid_transform_data v1.5.0 Compiling is_terminal_polyfill v1.70.1 Compiling quote v1.0.37 Compiling anstyle v1.0.10 Compiling anstyle-query v1.1.2 Compiling colorchoice v1.0.3 Compiling bstr v1.10.0 Compiling libm v0.2.11 Compiling syn v2.0.87 Compiling jobserver v0.1.32 Compiling getrandom v0.2.15 Compiling crossbeam-epoch v0.9.18 Compiling anstream v0.6.18 Compiling rand_core v0.6.4 Compiling unic-common v0.9.0 Compiling unicode-width v0.1.14 Compiling cc v1.1.36 Checking icu_properties_data v1.5.0 Compiling unic-char-range v0.9.0 Compiling heck v0.5.0 Compiling powerfmt v0.2.0 Checking smallvec v1.13.2 Compiling vcpkg v0.2.15 Compiling doc-comment v0.3.3 Compiling unic-char-property v0.9.0 Compiling crossbeam-deque v0.8.5 Compiling deranged v0.3.11 Compiling unic-ucd-version v0.9.0 Compiling proc-macro-error-attr v1.0.4 Compiling encoding_rs v0.8.35 Compiling serde_json v1.0.132 Compiling arraydeque v0.5.1 Checking crypto-common v0.1.6 Checking block-padding v0.3.3 Checking block-buffer v0.10.4 Checking utf16_iter v1.0.5 Checking utf8_iter v1.0.4 Checking inout v0.1.3 Checking write16 v1.0.0 Compiling clap_lex v0.7.2 Checking digest v0.10.7 Compiling fastrand v2.2.0 Checking cipher v0.4.4 Checking icu_normalizer_data v1.5.0 Compiling clap_builder v4.5.20 Checking universal-hash v0.5.1 Compiling unic-ucd-segment v0.9.0 Compiling proc-macro-error v1.0.4 Checking signature v1.6.4 Compiling deunicode v1.6.0 Compiling regex-automata v0.4.8 Compiling tempfile v3.14.0 Compiling time v0.3.36 Compiling smawk v0.3.2 Compiling autocfg v1.4.0 Compiling unicode-linebreak v0.1.5 Compiling pulldown-cmark v0.12.2 Checking opaque-debug v0.3.1 Compiling ryu v1.0.18 Compiling textwrap v0.16.1 Compiling humansize v2.1.3 Compiling amplify_syn v2.0.1 Compiling unic-segment v0.9.0 Compiling slug v0.1.6 Checking ed25519 v1.5.3 Compiling num-traits v0.2.19 Compiling getopts v0.2.21 Compiling subplot v0.11.0 Checking ascii v1.1.0 Compiling libz-sys v1.1.20 Compiling pikchr v0.1.3 Compiling libgit2-sys v0.17.0+1.8.1 Compiling ident_case v1.0.1 Checking ct-codecs v1.1.2 Compiling percent-encoding v2.3.1 Checking amplify_num v0.5.3 Compiling pulldown-cmark-escape v0.11.0 Compiling unicase v2.8.0 Compiling lazy_static v1.5.0 Compiling fnv v1.0.7 Compiling humantime v2.1.0 Compiling utf8-width v0.1.7 Compiling html-escape v0.2.13 Checking form_urlencoded v1.2.1 Checking ec25519 v0.1.0 Compiling sqlite3-src v0.5.1 Checking polyval v0.6.2 Checking sha2 v0.10.8 Compiling tracing-core v0.1.32 Checking base64ct v1.6.0 Compiling pin-project-lite v0.2.15 Compiling file_diff v1.0.0 Checking keccak v0.1.5 Compiling line-col v0.2.1 Compiling amplify_derive v4.0.1 Compiling base64 v0.22.1 Checking pem-rfc7468 v0.7.0 Checking sha3 v0.10.8 Checking ghash v0.5.1 Checking aes v0.8.4 Checking ctr v0.9.2 Compiling regex v1.11.1 Compiling globset v0.4.15 Checking aead v0.5.2 Checking base32 v0.4.0 Checking equivalent v1.0.1 Compiling cfg_aliases v0.2.1 Checking hashbrown v0.15.1 Compiling data-encoding v2.6.0 Compiling synstructure v0.13.1 Compiling env_filter v0.1.2 Compiling darling_core v0.20.10 Compiling ignore v0.4.23 Checking aes-gcm v0.10.3 Compiling env_logger v0.11.5 Checking indexmap v2.6.0 Compiling nix v0.29.0 Checking blowfish v0.9.1 Checking ssh-encoding v0.2.0 Checking poly1305 v0.8.0 Checking cbc v0.1.2 Checking chacha20 v0.9.1 Checking pbkdf2 v0.12.2 Compiling globwalk v0.9.1 Compiling data-encoding-macro-internal v0.1.13 Checking zeroize v1.8.1 Checking radicle-std-ext v0.1.0 Compiling adler2 v2.0.0 Checking ssh-cipher v0.2.0 Checking bcrypt-pbkdf v0.10.0 Compiling miniz_oxide v0.8.0 Checking chrono v0.4.38 Checking rand v0.8.5 Compiling xattr v1.3.1 Compiling filetime v0.2.25 Compiling crc32fast v1.4.2 Checking signature v2.2.0 Checking base-x v0.2.11 Checking data-encoding-macro v0.1.15 Compiling flate2 v1.0.34 Checking ssh-key v0.6.7 Checking multibase v0.9.1 Checking qcheck v1.0.0 Compiling tar v0.4.43 Checking cvt v0.1.2 Checking regex-syntax v0.6.29 Compiling rust_decimal v1.36.0 Compiling glob v0.3.1 Checking tinyvec_macros v0.1.1 Checking amplify v4.8.0 Checking tinyvec v1.8.0 Checking diligent-date-parser v0.1.4 Checking terminal_size v0.4.0 Checking radicle-dag v0.9.0 Checking overload v0.1.1 Checking base64 v0.21.7 Checking cyphergraphy v0.3.0 Compiling serde_yml v0.0.11 Checking fs_at v0.2.1 Compiling radicle-surf v0.22.1 Checking arrayvec v0.7.6 Checking cypheraddr v0.4.0 Compiling serde_derive v1.0.214 Compiling thiserror-impl v1.0.68 Compiling zerocopy-derive v0.7.35 Compiling zerofrom-derive v0.1.4 Compiling yoke-derive v0.7.4 Compiling zerovec-derive v0.10.3 Compiling displaydoc v0.2.5 Compiling icu_provider_macros v1.5.0 Compiling clap_derive v4.5.18 Compiling tracing-attributes v0.1.27 Compiling git-testament-derive v0.2.0 Compiling darling_macro v0.20.10 Checking socks5-client v0.4.1 Compiling culpa-macros v1.0.2 Checking cyphernet v0.5.2 Checking regex-automata v0.1.10 Compiling zerocopy v0.7.35 Checking quick-xml v0.36.2 Compiling darling v0.20.10 Compiling derive_builder_core v0.20.2 Compiling git-testament v0.2.5 Checking never v0.1.0 Checking normpath v1.3.0 Compiling valuable v0.1.0 Checking matchers v0.1.0 Compiling pest v2.7.14 Compiling git-ref-format-core v0.3.1 Checking radicle-ssh v0.9.0 Checking remove_dir_all v0.8.4 Checking unicode-normalization v0.1.24 Compiling ppv-lite86 v0.2.20 Checking zerofrom v0.1.4 Compiling hashbrown v0.14.5 Checking yoke v0.7.4 Compiling git-ref-format-macro v0.3.1 Compiling tracing v0.1.40 Compiling rand_chacha v0.3.1 Checking crossbeam-channel v0.5.13 Checking zerovec v0.10.4 Checking nu-ansi-term v0.46.0 Compiling culpa v1.0.2 Compiling derive_builder_macro v0.20.2 Compiling subplotlib-derive v0.11.0 Compiling hashlink v0.8.4 Compiling hashlink v0.9.1 Checking sharded-slab v0.1.7 Checking tracing-log v0.2.0 Compiling clap v4.5.20 Compiling valuable-derive v0.1.0 Compiling yaml-rust2 v0.8.1 Checking fs2 v0.4.3 Compiling pest_meta v2.7.14 Checking thread_local v1.1.8 Checking libyml v0.0.4 Checking shell-words v1.1.0 Compiling tempfile-fast v0.3.4 Checking tinystr v0.7.6 Checking icu_collections v1.5.0 Checking siphasher v1.0.1 Checking state v0.5.3 Checking derive_builder v0.20.2 Checking unescape v0.1.0 Checking winnow v0.6.20 Checking icu_locid v1.5.0 Checking html-page v0.4.0 Checking atom_syndication v0.12.4 Checking uuid v1.11.0 Compiling ctor v0.2.8 Compiling pest_generator v2.7.14 Checking rss v2.0.9 Checking icu_provider v1.5.0 Checking icu_locid_transform v1.5.0 Compiling pest_derive v2.7.14 Checking icu_properties v1.5.1 Checking icu_normalizer v1.5.0 Checking nonempty v0.9.0 Checking tracing-serde v0.1.3 Checking localtime v1.3.1 Checking duration-str v0.11.2 Checking idna_adapter v1.2.0 Checking git-ref-format v0.3.1 Checking idna v1.0.3 Compiling serde_path_to_error v0.1.16 Checking url v2.5.3 Compiling marked-yaml v0.7.1 Checking tracing-subscriber v0.3.18 Compiling tera v1.20.0 Compiling roadmap v0.6.1 Checking git2 v0.19.0 Compiling subplot-build v0.11.0 Checking radicle-git-ext v0.8.1 Compiling subplotlib v0.11.0 Compiling radicle-ci-broker v0.9.0 (/srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src) Checking sqlite3-sys v0.15.2 Checking sqlite v0.32.0 Checking radicle-crypto v0.11.0 Checking radicle-cob v0.12.0 Checking radicle v0.13.0 Finished `dev` profile [unoptimized + debuginfo] target(s) in 24.28s + cargo build --all-targets --workspace Compiling cfg-if v1.0.0 Compiling memchr v2.7.4 Compiling bitflags v2.6.0 Compiling once_cell v1.20.2 Compiling log v0.4.22 Compiling itoa v1.0.11 Compiling strsim v0.11.1 Compiling typenum v1.17.0 Compiling libc v0.2.162 Compiling subtle v2.6.1 Compiling stable_deref_trait v1.2.0 Compiling regex-syntax v0.8.5 Compiling serde v1.0.214 Compiling thiserror v1.0.68 Compiling zerofrom v0.1.4 Compiling fastrand v2.2.0 Compiling percent-encoding v2.3.1 Compiling utf8parse v0.2.2 Compiling crossbeam-utils v0.8.20 Compiling anstyle-query v1.1.2 Compiling yoke v0.7.4 Compiling rustix v0.38.39 Compiling anstyle-parse v0.2.6 Compiling litemap v0.7.3 Compiling writeable v0.5.5 Compiling colorchoice v1.0.3 Compiling ryu v1.0.18 Compiling cpufeatures v0.2.14 Compiling zerovec v0.10.4 Compiling anstyle v1.0.10 Compiling is_terminal_polyfill v1.70.1 Compiling ahash v0.8.11 Compiling anyhow v1.0.93 Compiling encoding_rs v0.8.35 Compiling powerfmt v0.2.0 Compiling time-core v0.1.2 Compiling anstream v0.6.18 Compiling num-conv v0.1.0 Compiling aho-corasick v1.1.3 Compiling hashbrown v0.14.5 Compiling deranged v0.3.11 Compiling getrandom v0.2.15 Compiling time-macros v0.2.18 Compiling generic-array v0.14.7 Compiling clap_lex v0.7.2 Compiling icu_locid_transform_data v1.5.0 Compiling pest v2.7.14 Compiling rand_core v0.6.4 Compiling crossbeam-epoch v0.9.18 Compiling bstr v1.10.0 Compiling icu_properties_data v1.5.0 Compiling smallvec v1.13.2 Compiling hashlink v0.8.4 Compiling crossbeam-deque v0.8.5 Compiling rand_chacha v0.3.1 Compiling crypto-common v0.1.6 Compiling tinystr v0.7.6 Compiling block-padding v0.3.3 Compiling block-buffer v0.10.4 Compiling inout v0.1.3 Compiling icu_locid v1.5.0 Compiling digest v0.10.7 Compiling icu_collections v1.5.0 Compiling write16 v1.0.0 Compiling cipher v0.4.4 Compiling icu_normalizer_data v1.5.0 Compiling utf8_iter v1.0.4 Compiling utf16_iter v1.0.5 Compiling lazy_static v1.5.0 Compiling rand v0.8.5 Compiling yaml-rust2 v0.8.1 Compiling universal-hash v0.5.1 Compiling hashlink v0.9.1 Compiling clap_builder v4.5.20 Compiling pin-project-lite v0.2.15 Compiling opaque-debug v0.3.1 Compiling signature v1.6.4 Compiling utf8-width v0.1.7 Compiling subplot v0.11.0 Compiling tempfile v3.14.0 Compiling ed25519 v1.5.3 Compiling html-escape v0.2.13 Compiling ascii v1.1.0 Compiling regex-automata v0.4.8 Compiling icu_provider v1.5.0 Compiling pest_meta v2.7.14 Compiling ct-codecs v1.1.2 Compiling amplify_num v0.5.3 Compiling time v0.3.36 Compiling linux-raw-sys v0.4.14 Compiling ec25519 v0.1.0 Compiling pulldown-cmark v0.12.2 Compiling icu_locid_transform v1.5.0 Compiling tempfile-fast v0.3.4 Compiling darling_core v0.20.10 Compiling polyval v0.6.2 Compiling libz-sys v1.1.20 Compiling serde_path_to_error v0.1.16 Compiling serde_json v1.0.132 Compiling pest_generator v2.7.14 Compiling sha2 v0.10.8 Compiling form_urlencoded v1.2.1 Compiling marked-yaml v0.7.1 Compiling tracing-core v0.1.32 Compiling icu_properties v1.5.1 Compiling git-ref-format-core v0.3.1 Compiling clap v4.5.20 Compiling roadmap v0.6.1 Compiling amplify v4.8.0 Compiling base64ct v1.6.0 Compiling byteorder v1.5.0 Compiling git-testament-derive v0.2.0 Compiling base64 v0.22.1 Compiling keccak v0.1.5 Compiling pem-rfc7468 v0.7.0 Compiling git-ref-format-macro v0.3.1 Compiling tracing v0.1.40 Compiling regex v1.11.1 Compiling globset v0.4.15 Compiling pest_derive v2.7.14 Compiling sha3 v0.10.8 Compiling cyphergraphy v0.3.0 Compiling ghash v0.5.1 Compiling libgit2-sys v0.17.0+1.8.1 Compiling num-traits v0.2.19 Compiling ignore v0.4.23 Compiling env_filter v0.1.2 Compiling aes v0.8.4 Compiling ctr v0.9.2 Compiling aead v0.5.2 Compiling git-testament v0.2.5 Compiling env_logger v0.11.5 Compiling equivalent v1.0.1 Compiling base32 v0.4.0 Compiling hashbrown v0.15.1 Compiling git-ref-format v0.3.1 Compiling ssh-encoding v0.2.0 Compiling sqlite3-src v0.5.1 Compiling icu_normalizer v1.5.0 Compiling cypheraddr v0.4.0 Compiling blowfish v0.9.1 Compiling poly1305 v0.8.0 Compiling cbc v0.1.2 Compiling aes-gcm v0.10.3 Compiling globwalk v0.9.1 Compiling chacha20 v0.9.1 Compiling pbkdf2 v0.12.2 Compiling zeroize v1.8.1 Compiling data-encoding v2.6.0 Compiling radicle-std-ext v0.1.0 Compiling tera v1.20.0 Compiling ssh-cipher v0.2.0 Compiling bcrypt-pbkdf v0.10.0 Compiling socks5-client v0.4.1 Compiling chrono v0.4.38 Compiling sqlite3-sys v0.15.2 Compiling idna_adapter v1.2.0 Compiling indexmap v2.6.0 Compiling xattr v1.3.1 Compiling idna v1.0.3 Compiling data-encoding-macro v0.1.15 Compiling darling_macro v0.20.10 Compiling crc32fast v1.4.2 Compiling filetime v0.2.25 Compiling signature v2.2.0 Compiling base-x v0.2.11 Compiling tar v0.4.43 Compiling url v2.5.3 Compiling multibase v0.9.1 Compiling qcheck v1.0.0 Compiling ssh-key v0.6.7 Compiling flate2 v1.0.34 Compiling cyphernet v0.5.2 Compiling sqlite v0.32.0 Compiling nix v0.29.0 Compiling radicle-ssh v0.9.0 Compiling darling v0.20.10 Compiling git2 v0.19.0 Compiling nonempty v0.9.0 Compiling derive_builder_core v0.20.2 Compiling cvt v0.1.2 Compiling regex-syntax v0.6.29 Compiling tinyvec_macros v0.1.1 Compiling tinyvec v1.8.0 Compiling culpa v1.0.2 Compiling diligent-date-parser v0.1.4 Compiling radicle-surf v0.22.1 Compiling terminal_size v0.4.0 Compiling quick-xml v0.36.2 Compiling radicle-dag v0.9.0 Compiling normpath v1.3.0 Compiling arrayvec v0.7.6 Compiling fs_at v0.2.1 Compiling never v0.1.0 Compiling base64 v0.21.7 Compiling overload v0.1.1 Compiling nu-ansi-term v0.46.0 Compiling unicode-normalization v0.1.24 Compiling derive_builder_macro v0.20.2 Compiling remove_dir_all v0.8.4 Compiling rust_decimal v1.36.0 Compiling subplotlib-derive v0.11.0 Compiling tracing-serde v0.1.3 Compiling tracing-log v0.2.0 Compiling localtime v1.3.1 Compiling sharded-slab v0.1.7 Compiling fs2 v0.4.3 Compiling crossbeam-channel v0.5.13 Compiling thread_local v1.1.8 Compiling derive_builder v0.20.2 Compiling regex-automata v0.1.10 Compiling atom_syndication v0.12.4 Compiling siphasher v1.0.1 Compiling subplot-build v0.11.0 Compiling shell-words v1.1.0 Compiling unescape v0.1.0 Compiling libyml v0.0.4 Compiling winnow v0.6.20 Compiling state v0.5.3 Compiling valuable v0.1.0 Compiling radicle-git-ext v0.8.1 Compiling matchers v0.1.0 Compiling tracing-subscriber v0.3.18 Compiling rss v2.0.9 Compiling radicle-crypto v0.11.0 Compiling serde_yml v0.0.11 Compiling radicle-cob v0.12.0 Compiling html-page v0.4.0 Compiling uuid v1.11.0 Compiling duration-str v0.11.2 Compiling radicle v0.13.0 Compiling subplotlib v0.11.0 Compiling radicle-ci-broker v0.9.0 (/srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src) Finished `dev` profile [unoptimized + debuginfo] target(s) in 21.82s + cargo doc --workspace Checking unicode-ident v1.0.13 Documenting unicode-ident v1.0.13 Documenting cfg-if v1.0.0 Documenting typenum v1.17.0 Documenting libc v0.2.162 Documenting subtle v2.6.1 Documenting stable_deref_trait v1.2.0 Documenting bitflags v2.6.0 Documenting litemap v0.7.3 Documenting cpufeatures v0.2.14 Documenting writeable v0.5.5 Documenting memchr v2.7.4 Documenting icu_locid_transform_data v1.5.0 Documenting smallvec v1.13.2 Documenting icu_properties_data v1.5.0 Documenting once_cell v1.20.2 Checking proc-macro2 v1.0.89 Documenting proc-macro2 v1.0.89 Checking ident_case v1.0.1 Checking fnv v1.0.7 Documenting log v0.4.22 Documenting utf16_iter v1.0.5 Documenting icu_normalizer_data v1.5.0 Documenting utf8_iter v1.0.4 Documenting write16 v1.0.0 Checking quote v1.0.37 Documenting opaque-debug v0.3.1 Documenting ed25519 v1.5.3 Documenting fnv v1.0.7 Documenting ascii v1.1.0 Documenting ident_case v1.0.1 Checking syn v2.0.87 Checking syn v1.0.109 Documenting percent-encoding v2.3.1 Documenting amplify_num v0.5.3 Documenting ct-codecs v1.1.2 Documenting linux-raw-sys v0.4.14 Documenting itoa v1.0.11 Checking git-ref-format-core v0.3.1 Documenting keccak v0.1.5 Documenting quote v1.0.37 Documenting fastrand v2.2.0 Documenting byteorder v1.5.0 Documenting base64ct v1.6.0 Documenting num-traits v0.2.19 Checking data-encoding v2.6.0 Documenting base32 v0.4.0 Checking amplify_syn v2.0.1 Checking proc-macro-error v1.0.4 Documenting equivalent v1.0.1 Checking synstructure v0.13.1 Checking darling_core v0.20.10 Checking darling v0.20.10 Documenting hashbrown v0.15.1 Documenting data-encoding-macro-internal v0.1.13 Documenting sqlite3-src v0.5.1 Documenting ryu v1.0.18 Documenting form_urlencoded v1.2.1 Documenting synstructure v0.13.1 Documenting zerovec-derive v0.10.3 Documenting serde_derive v1.0.214 Documenting displaydoc v0.2.5 Documenting generic-array v0.14.7 Documenting icu_provider_macros v1.5.0 Documenting thiserror-impl v1.0.68 Documenting amplify_syn v2.0.1 Documenting proc-macro-error-attr v1.0.4 Documenting rustix v0.38.39 Documenting darling_core v0.20.10 Documenting pem-rfc7468 v0.7.0 Documenting zeroize v1.8.1 Documenting indexmap v2.6.0 Documenting radicle-std-ext v0.1.0 Documenting getrandom v0.2.15 Documenting libz-sys v1.1.20 Documenting data-encoding v2.6.0 Documenting crypto-common v0.1.6 Documenting zerofrom-derive v0.1.4 Documenting yoke-derive v0.7.4 Documenting block-padding v0.3.3 Documenting block-buffer v0.10.4 Documenting proc-macro-error v1.0.4 Documenting ec25519 v0.1.0 Documenting rand_core v0.6.4 Documenting thiserror v1.0.68 Documenting amplify_derive v4.0.1 Documenting sqlite3-sys v0.15.2 Documenting inout v0.1.3 Documenting libgit2-sys v0.17.0+1.8.1 Documenting zerofrom v0.1.4 Documenting data-encoding-macro v0.1.15 Documenting chrono v0.4.38 Documenting serde v1.0.214 Documenting digest v0.10.7 Documenting universal-hash v0.5.1 Documenting aead v0.5.2 Documenting git-ref-format-macro v0.3.1 Documenting rand v0.8.5 Checking derive_builder_core v0.20.2 Documenting darling_macro v0.20.10 Documenting aho-corasick v1.1.3 Documenting tracing-core v0.1.32 Documenting cipher v0.4.4 Documenting yoke v0.7.4 Documenting amplify v4.8.0 Documenting regex-syntax v0.8.5 Documenting powerfmt v0.2.0 Documenting utf8parse v0.2.2 Documenting base-x v0.2.11 Documenting polyval v0.6.2 Documenting poly1305 v0.8.0 Documenting signature v2.2.0 Documenting darling v0.20.10 Documenting qcheck v1.0.0 Documenting tempfile v3.14.0 Documenting zerovec v0.10.4 Documenting anstyle-parse v0.2.6 Documenting sha2 v0.10.8 Documenting sha3 v0.10.8 Documenting pbkdf2 v0.12.2 Documenting aes v0.8.4 Documenting ctr v0.9.2 Documenting cyphergraphy v0.3.0 Documenting blowfish v0.9.1 Documenting ghash v0.5.1 Documenting cbc v0.1.2 Documenting chacha20 v0.9.1 Documenting regex-automata v0.4.8 Documenting multibase v0.9.1 Documenting deranged v0.3.11 Documenting git-ref-format-core v0.3.1 Documenting derive_builder_core v0.20.2 Documenting ssh-encoding v0.2.0 Documenting tinystr v0.7.6 Documenting icu_collections v1.5.0 Documenting serde_json v1.0.132 Documenting nonempty v0.9.0 Documenting sqlite v0.32.0 Documenting bcrypt-pbkdf v0.10.0 Documenting aes-gcm v0.10.3 Documenting radicle-ssh v0.9.0 Documenting cypheraddr v0.4.0 Documenting nix v0.29.0 Documenting time-macros v0.2.18 Documenting icu_locid v1.5.0 Documenting encoding_rs v0.8.35 Documenting cvt v0.1.2 Documenting git-ref-format v0.3.1 Documenting num-conv v0.1.0 Documenting tinyvec_macros v0.1.1 Documenting lazy_static v1.5.0 Documenting time-core v0.1.2 Documenting derive_builder_macro v0.20.2 Documenting anstyle v1.0.10 Documenting ssh-cipher v0.2.0 Documenting is_terminal_polyfill v1.70.1 Documenting socks5-client v0.4.1 Documenting anstyle-query v1.1.2 Documenting colorchoice v1.0.3 Documenting tinyvec v1.8.0 Documenting icu_provider v1.5.0 Documenting diligent-date-parser v0.1.4 Documenting time v0.3.36 Documenting terminal_size v0.4.0 Documenting radicle-dag v0.9.0 Documenting derive_builder v0.20.2 Documenting regex v1.11.1 Documenting tracing-attributes v0.1.27 Documenting fs_at v0.2.1 Documenting culpa-macros v1.0.2 Documenting quick-xml v0.36.2 Compiling radicle-ci-broker v0.9.0 (/srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src) Documenting ssh-key v0.6.7 Documenting anstream v0.6.18 Documenting cyphernet v0.5.2 Documenting crossbeam-utils v0.8.20 Documenting pin-project-lite v0.2.15 Documenting icu_locid_transform v1.5.0 Checking heck v0.5.0 Documenting arrayvec v0.7.6 Documenting strsim v0.11.1 Documenting clap_lex v0.7.2 Documenting heck v0.5.0 Documenting overload v0.1.1 Documenting never v0.1.0 Documenting utf8-width v0.1.7 Documenting normpath v1.3.0 Documenting tracing v0.1.40 Documenting culpa v1.0.2 Documenting rust_decimal v1.36.0 Documenting unicode-normalization v0.1.24 Documenting crossbeam-channel v0.5.13 Documenting sharded-slab v0.1.7 Documenting clap_derive v4.5.18 Documenting tracing-serde v0.1.3 Documenting clap_builder v4.5.20 Documenting nu-ansi-term v0.46.0 Documenting icu_properties v1.5.1 Documenting html-escape v0.2.13 Documenting localtime v1.3.1 Documenting tracing-log v0.2.0 Documenting atom_syndication v0.12.4 Documenting remove_dir_all v0.8.4 Documenting subplotlib-derive v0.11.0 Documenting filetime v0.2.25 Documenting fs2 v0.4.3 Documenting valuable-derive v0.1.0 Documenting matchers v0.1.0 Documenting thread_local v1.1.8 Documenting siphasher v1.0.1 Documenting state v0.5.3 Documenting unescape v0.1.0 Documenting libyml v0.0.4 Documenting winnow v0.6.20 Documenting base64 v0.22.1 Documenting shell-words v1.1.0 Documenting html-page v0.4.0 Documenting rss v2.0.9 Documenting uuid v1.11.0 Documenting anyhow v1.0.93 Documenting valuable v0.1.0 Documenting clap v4.5.20 Documenting tracing-subscriber v0.3.18 Documenting subplotlib v0.11.0 Documenting serde_yml v0.0.11 Documenting icu_normalizer v1.5.0 Documenting duration-str v0.11.2 Documenting idna_adapter v1.2.0 Documenting idna v1.0.3 Documenting url v2.5.3 Documenting git2 v0.19.0 Documenting radicle-git-ext v0.8.1 Documenting radicle-crypto v0.11.0 Documenting radicle-surf v0.22.1 Documenting radicle-cob v0.12.0 Documenting radicle v0.13.0 Documenting radicle-ci-broker v0.9.0 (/srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src) warning: unresolved link to `RunningProcess` --> src/adapter.rs:186:44 | 186 | /// Error from [`TimeoutCommand`] or [`RunningProcess`]. | ^^^^^^^^^^^^^^ no item named `RunningProcess` in scope | = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` = note: `#[warn(rustdoc::broken_intra_doc_links)]` on by default warning: `radicle-ci-broker` (lib doc) generated 1 warning Finished `dev` profile [unoptimized + debuginfo] target(s) in 40.26s Generated /srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src/target/doc/radicle_ci_broker/index.html and 3 other files + cargo test --workspace --no-fail-fast Finished `test` profile [unoptimized + debuginfo] target(s) in 0.14s Running unittests src/lib.rs (target/debug/deps/radicle_ci_broker-d82af7bb2419ce34) running 82 tests test broker::test::adds_adapter ... ok test broker::test::does_not_find_unknown_repo ... ok test adapter::test::adapter_does_not_exist ... ok test adapter::test::adapter_has_bad_interpreter ... ok test adapter::test::adapter_is_not_executable ... ok test broker::test::does_not_have_a_default_adapter_initially ... ok test ci_event::test::branch_created ... ok test ci_event::test::branch_deleted ... ok test ci_event::test::branch_updated ... ok test ci_event::test::nothing_updated ... ok test ci_event::test::patch_created ... ok test ci_event::test::patch_updated ... ok test ci_event::test::skipped ... ok test ci_event::test_namespaced_branch::empty ... ok test ci_event::test_namespaced_branch::has_namespace ... ok test ci_event::test_namespaced_branch::has_namespace_with_path ... ok test ci_event::test_namespaced_branch::lacks_namespace ... ok test ci_event::test_patch_id::empty ... ok test ci_event::test_patch_id::has_namespace ... ok test ci_event::test_patch_id::has_namespace_with_path ... ok test ci_event::test_patch_id::lacks_namespace ... ok test config::test::parse_config_yaml ... ok test config::test::parse_config_yaml_without_max_run_time ... ok test filter::test::allows_all_for_default_repository ... ok test filter::test::allows_all_for_main_branch ... ok test filter::test::allows_all_for_right_node ... ok test filter::test::allows_any_event ... ok test filter::test::allows_branch_creation ... ok test filter::test::allows_branch_deletion ... ok test filter::test::allows_branch_update ... ok test filter::test::allows_if_all_allow ... ok test filter::test::allows_if_any_allows ... ok test filter::test::allows_no_event ... ok test filter::test::allows_none_for_wrong_node ... ok test filter::test::allows_opposite ... ok test filter::test::allows_patch_creation ... ok test filter::test::allows_patch_update ... ok test filter::test::allows_shutdown ... ok test filter::test::allows_specific_patch ... ok test filter::test::doesnt_allow_any_for_other_branch ... ok test filter::test::doesnt_allow_any_for_other_repository ... ok test filter::test::doesnt_allows_other_patch ... ok test filter::test::only_allows_branch_creation ... ok test filter::test::only_allows_branch_deletion ... ok test filter::test::only_allows_branch_update ... ok test filter::test::only_allows_patch_creation ... ok test filter::test::only_allows_patch_update ... ok test broker::test::finds_default_adapter_for_unknown_repo ... ok test broker::test::has_no_adapters_initially ... ok test broker::test::sets_a_default_adapter_initially ... ok test msg::trigger_from_ci_event_tests::trigger_patch_from_patch_created ... ok test run::test::serialize_run_state ... ok test msg::trigger_from_ci_event_tests::trigger_patch_from_patch_updated ... ok test sensitive::test_sensitive::deser ... ok test sensitive::test_sensitive::debugged ... ok test sensitive::test_sensitive::displayed ... ok test sensitive::test_sensitive::ser ... ok test msg::trigger_from_ci_event_tests::trigger_push_from_branch_created ... ok test msg::trigger_from_ci_event_tests::trigger_push_from_branch_updated ... ok test adapter::test::adapter_outputs_too_many_messages ... ok test adapter::test::adapter_ends_ok_before_second_message ... ok test adapter::test::adapter_produces_as_bad_message ... ok test adapter::test::adapter_reports_success ... ok test adapter::test::adapter_first_message_isnt_triggered ... ok test adapter::test::adapter_reports_failure ... ok test adapter::test::adapter_is_killed_after_first_message ... ok test adapter::test::adapter_is_killed_before_any_messages ... ok test adapter::test::adapter_is_killed_after_second_message ... ok test broker::test::adapter_fails ... ok test adapter::test::adapter_exits_nonzero ... ok test timeoutcmd::tests::hello_world ... ok test timeoutcmd::tests::bin_false ... ok test timeoutcmd::tests::hello_world_to_stderr ... ok test timeoutcmd::tests::bin_true ... ok test broker::test::executes_adapter ... ok test timeoutcmd::tests::pipe_through_cat ... ok test timeoutcmd::tests::sleep_1 ... ok test timeoutcmd::tests::sleep_for_too_long ... ok test timeoutcmd::tests::yes_to_stdout ... ok test timeoutcmd::tests::yes_to_stderr ... ok test timeoutcmd::tests::kill ... ok test timeoutcmd::tests::kill_stderr ... ok test result: ok. 82 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.54s Running unittests src/bin/cib.rs (target/debug/deps/cib-8ef2c02f6f5e53da) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/bin/cibtool.rs (target/debug/deps/cibtool-c91430e59fa88d82) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/bin/synthetic-events.rs (target/debug/deps/synthetic_events-2cb886e333e058c5) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/subplot.rs (target/debug/deps/subplot-82a0b18025ed7789) running 38 tests test adapter_with_url_runs_successfully ... ok test dummy_adapter_runs_successfully ... ok test event_synthesizer_terminates_after_first_connection ... ok test can_add_shutdown_event_to_queue ... ok test allows_setting_minimum_log_level ... ok test don_t_insert_event_for_non_existent_repository ... ok test convert_recorded_node_events_into_ci_events ... ok test don_t_insert_events_into_queue_when_not_allowed_by_filter ... ok test add_information_about_run_that_s_finished_in_failure_to_database ... ok test can_trigger_a_ci_run ... ok test add_information_about_run_that_s_running_to_database ... ok test logs_termination_due_to_error ... ok test add_information_about_triggered_run_to_database ... ok test add_information_about_run_that_s_finished_successfully_to_database ... ok test adapter_can_provide_url_for_info_on_run ... ok test events_can_be_queued_and_removed_from_queue ... ok test filter_recorded_ci_events ... ok test shows_config_as_json ... ok test gives_helpful_error_message_if_it_doesn_t_understand_its_configuration_file ... ok test can_remove_all_queued_events ... ok test gives_helpful_error_message_if_node_socket_can_t_be_found ... ok test insert_events_into_queue ... ok test we_can_run_rad ... ok test reports_it_version ... ok test record_node_events ... ok test logs_start_and_successful_end ... ok test produces_a_json_status_file ... ok test produces_a_report_page_upon_request ... ok test shuts_down_when_requested ... ok test logs_adapter_stderr_output ... ok test stops_if_the_node_connection_breaks ... ok test process_queued_events ... ok test update_and_show_information_about_run_to_running ... ok test smoke_test__runs_adapter ... ok test acceptance_criteria_for_upgrades has been running for over 60 seconds test count_in_a_single_process has been running for over 60 seconds test count_in_concurrent_processes has been running for over 60 seconds test insert_many_events_into_queue has been running for over 60 seconds test count_in_a_single_process ... ok test insert_many_events_into_queue ... ok test count_in_concurrent_processes ... ok test acceptance_criteria_for_upgrades ... ok test result: ok. 38 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 97.67s Doc-tests radicle_ci_broker running 2 tests test src/msg.rs - msg::RunId (line 44) ... ok test src/timeoutcmd.rs - timeoutcmd (line 21) ... ok test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.88s + subplot docgen ci-broker.subplot -o doc/ci-broker.html INFO: Starting Subplot INFO: Subplot finished successfully + subplot docgen doc/userguide.subplot -o doc/userguide.html INFO: Starting Subplot INFO: Subplot finished successfully + make -C doc publish make: Entering directory '/srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src/doc' ./messages.sh > messages.md subplot docgen --date "Version: $(git describe --long --dirty)" architecture.subplot -o architecture.html fatal: No names found, cannot describe anything. INFO: Starting Subplot INFO: Subplot finished successfully bash publish.sh + '[' /srv/pages/ci-broker '!=' unset ']' + echo web root set, publishing arch doc there web root set, publishing arch doc there + install -d -m 0755 /srv/pages/ci-broker + install -m 0644 ./architecture.html ./ci-broker.html ./userguide.html /srv/pages/ci-broker make: Leaving directory '/srv/http/1f9e58eb-6050-464d-ad02-d861b263601c/src/doc'