Skip to content

Commit 5261b6a

Browse files
Merge #1032
1032: Allow disabling buildkit for engines lacking support. r=Emilgardis a=Alexhuszagh Co-authored-by: Alex Huszagh <[email protected]>
2 parents 8a41895 + 7dbb514 commit 5261b6a

File tree

5 files changed

+24
-4
lines changed

5 files changed

+24
-4
lines changed

.changes/1032.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"description": "allow disabling buildkit for container engines lacking buildkit support.",
3+
"type": "added"
4+
}

src/config.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@ fn split_to_cloned_by_ws(string: &str) -> Vec<String> {
186186
string.split_whitespace().map(String::from).collect()
187187
}
188188

189+
/// this takes the value of the environment variable,
190+
/// so you should call `bool_from_envvar(env::var("FOO"))`
189191
pub fn bool_from_envvar(envvar: &str) -> bool {
190192
if let Ok(value) = bool::from_str(envvar) {
191193
value

src/docker/custom.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,11 @@ impl<'a> Dockerfile<'a> {
7171
msg_info: &mut MessageInfo,
7272
) -> Result<String> {
7373
let uses_zig = options.cargo_variant.uses_zig();
74-
let mut docker_build = docker::subcommand(&options.engine, "buildx");
75-
docker_build.arg("build");
74+
let mut docker_build = docker::command(&options.engine);
75+
match docker::Engine::has_buildkit() {
76+
true => docker_build.args(["buildx", "build"]),
77+
false => docker_build.arg("build"),
78+
};
7679
docker_build.env("DOCKER_SCAN_SUGGEST", "false");
7780
self.runs_with()
7881
.specify_platform(&options.engine, &mut docker_build);

src/docker/engine.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,13 @@ impl Engine {
108108
.map(|s| bool_from_envvar(&s))
109109
.unwrap_or_default()
110110
}
111+
112+
#[must_use]
113+
pub fn has_buildkit() -> bool {
114+
!env::var("CROSS_CONTAINER_ENGINE_NO_BUILDKIT")
115+
.map(|x| bool_from_envvar(&x))
116+
.unwrap_or_default()
117+
}
111118
}
112119

113120
// determine if the container engine is docker. this fixes issues with

xtask/src/build_docker_image.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,11 @@ pub fn build_docker_image(
176176
msg_info.note(format_args!("Build {target} for {}", platform.target))?;
177177
}
178178
let mut docker_build = docker::command(engine);
179-
docker_build.args(["buildx", "build"]);
179+
let has_buildkit = docker::Engine::has_buildkit();
180+
match has_buildkit {
181+
true => docker_build.args(["buildx", "build"]),
182+
false => docker_build.arg("build"),
183+
};
180184
docker_build.current_dir(&docker_root);
181185

182186
docker_build.args(["--platform", &platform.docker_platform()]);
@@ -185,7 +189,7 @@ pub fn build_docker_image(
185189
docker_build.arg("--push");
186190
} else if engine.kind.is_docker() && no_output {
187191
docker_build.args(["--output", "type=tar,dest=/dev/null"]);
188-
} else {
192+
} else if has_buildkit {
189193
docker_build.arg("--load");
190194
}
191195

0 commit comments

Comments
 (0)