use std::collections::HashMap;
use std::sync::Arc;
pub type ActiveBuildEntry = (String, Vec<String>, std::time::Instant, String);
pub type ActiveBuildMap = Arc<std::sync::Mutex<HashMap<String, ActiveBuildEntry>>>;
pub(crate) fn next_run_id() -> String {
static COUNTER: std::sync::atomic::AtomicU64 = std::sync::atomic::AtomicU64::new(0);
let nanos = std::time::SystemTime::now()
.duration_since(std::time::SystemTime::UNIX_EPOCH)
.map(|d| d.as_nanos() as u64)
.unwrap_or(0);
let counter = COUNTER.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
format!("{:016x}{:04x}", nanos, counter & 0xffff)
}
pub(crate) struct ActiveBuildGuard {
pub(crate) active_builds: ActiveBuildMap,
pub(crate) run_id: String,
}
impl Drop for ActiveBuildGuard {
fn drop(&mut self) {
if let Ok(mut map) = self.active_builds.lock() {
map.remove(&self.run_id);
}
}
}