fix: Create lock on docker setup to prevent race conditions
This commit is contained in:
parent
33f0ff1bfa
commit
a3c5b6f06b
1 changed files with 18 additions and 2 deletions
|
|
@ -1,11 +1,13 @@
|
|||
use std::{
|
||||
env,
|
||||
process::{Command, Stdio},
|
||||
sync::Mutex,
|
||||
};
|
||||
|
||||
use anyhow::{bail, Result};
|
||||
use anyhow::{anyhow, bail, Result};
|
||||
use blue_build_utils::constants::{BB_BUILDKIT_CACHE_GHA, CONTAINER_FILE, SKOPEO_IMAGE};
|
||||
use log::{info, trace, warn};
|
||||
use once_cell::sync::Lazy;
|
||||
use semver::Version;
|
||||
use serde::Deserialize;
|
||||
|
||||
|
|
@ -29,6 +31,8 @@ struct DockerVersionJson {
|
|||
pub client: DockerVerisonJsonClient,
|
||||
}
|
||||
|
||||
static DOCKER_SETUP: Lazy<Mutex<bool>> = Lazy::new(|| Mutex::new(false));
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct DockerDriver;
|
||||
|
||||
|
|
@ -36,6 +40,15 @@ impl DockerDriver {
|
|||
fn setup() -> Result<()> {
|
||||
trace!("DockerDriver::setup()");
|
||||
|
||||
let mut lock = DOCKER_SETUP
|
||||
.lock()
|
||||
.map_err(|e| anyhow!("Failed to lock DOCKER_SETUP: {e}"))?;
|
||||
|
||||
if *lock {
|
||||
drop(lock);
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
trace!("docker buildx ls --format={}", "{{.Name}}");
|
||||
let ls_out = Command::new("docker")
|
||||
.arg("buildx")
|
||||
|
|
@ -61,10 +74,13 @@ impl DockerDriver {
|
|||
.arg("--name=bluebuild")
|
||||
.output()?;
|
||||
|
||||
if !create_out.status.success() {
|
||||
if create_out.status.success() {
|
||||
*lock = true;
|
||||
} else {
|
||||
bail!("{}", String::from_utf8_lossy(&create_out.stderr));
|
||||
}
|
||||
}
|
||||
drop(lock);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue