Skip to content

Commit 6678ea5

Browse files
committed
Fixes quarkus:dev for env without any docker/podman
1 parent 5c58a03 commit 6678ea5

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/AppCDSBuildStep.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import io.quarkus.deployment.pkg.builditem.OutputTargetBuildItem;
3030
import io.quarkus.deployment.steps.MainClassBuildStep;
3131
import io.quarkus.runtime.LaunchMode;
32+
import io.quarkus.runtime.util.ContainerRuntimeUtil;
3233
import io.quarkus.utilities.JavaBinFinder;
3334

3435
public class AppCDSBuildStep {
@@ -38,7 +39,7 @@ public class AppCDSBuildStep {
3839
public static final String CLASSES_LIST_FILE_NAME = "classes.lst";
3940
private static final String CONTAINER_IMAGE_BASE_BUILD_DIR = "/tmp/quarkus";
4041
private static final String CONTAINER_IMAGE_APPCDS_DIR = CONTAINER_IMAGE_BASE_BUILD_DIR + "/appcds";
41-
public static final String DOCKER_EXECUTABLE = detectContainerRuntime().getExecutableName();
42+
public static final ContainerRuntimeUtil.ContainerRuntime CONTAINER_RUNTIME = detectContainerRuntime(false);
4243

4344
@BuildStep(onlyIf = AppCDSRequired.class)
4445
public void requested(OutputTargetBuildItem outputTarget, BuildProducer<AppCDSRequestedBuildItem> producer)
@@ -203,8 +204,12 @@ private Path createClassesList(JarBuildItem jarResult,
203204
// generate the classes file on the host
204205
private List<String> dockerRunCommands(OutputTargetBuildItem outputTarget, String containerImage,
205206
String containerWorkingDir) {
207+
if (CONTAINER_RUNTIME == ContainerRuntimeUtil.ContainerRuntime.UNAVAILABLE) {
208+
throw new IllegalStateException("No container runtime was found. "
209+
+ "Make sure you have either Docker or Podman installed in your environment.");
210+
}
206211
List<String> command = new ArrayList<>(10);
207-
command.add(DOCKER_EXECUTABLE);
212+
command.add(CONTAINER_RUNTIME.getExecutableName());
208213
command.add("run");
209214
command.add("-v");
210215
command.add(outputTarget.getOutputDirectory().toAbsolutePath().toString() + ":" + CONTAINER_IMAGE_BASE_BUILD_DIR

core/deployment/src/test/java/io/quarkus/deployment/pkg/steps/NativeImageBuildContainerRunnerTest.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.quarkus.deployment.pkg.steps;
22

3-
import static io.quarkus.deployment.pkg.steps.AppCDSBuildStep.DOCKER_EXECUTABLE;
3+
import static io.quarkus.deployment.pkg.steps.AppCDSBuildStep.CONTAINER_RUNTIME;
44
import static org.assertj.core.api.Assertions.assertThat;
55

66
import java.nio.file.Path;
@@ -11,13 +11,18 @@
1111
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
1212

1313
import io.quarkus.deployment.pkg.NativeConfig;
14+
import io.quarkus.runtime.util.ContainerRuntimeUtil;
1415

1516
class NativeImageBuildContainerRunnerTest {
1617

1718
// This will default to false in the maven build and true in the IDE, so this will still run if invoked explicitly
1819
@DisabledIfSystemProperty(named = "avoid-containers", matches = "true")
1920
@Test
2021
void testBuilderImageBeingPickedUp() {
22+
if (CONTAINER_RUNTIME == ContainerRuntimeUtil.ContainerRuntime.UNAVAILABLE) {
23+
throw new IllegalStateException("No container runtime was found. "
24+
+ "Make sure you have either Docker or Podman installed in your environment.");
25+
}
2126
NativeConfig nativeConfig = new NativeConfig();
2227
nativeConfig.containerRuntime = Optional.empty();
2328
boolean found;
@@ -26,7 +31,8 @@ void testBuilderImageBeingPickedUp() {
2631

2732
nativeConfig.builderImage = "graalvm";
2833
localRunner = new NativeImageBuildLocalContainerRunner(nativeConfig, Path.of("/tmp"));
29-
command = localRunner.buildCommand(DOCKER_EXECUTABLE, Collections.emptyList(), Collections.emptyList());
34+
command = localRunner.buildCommand(CONTAINER_RUNTIME.getExecutableName(), Collections.emptyList(),
35+
Collections.emptyList());
3036
found = false;
3137
for (String part : command) {
3238
if (part.contains("ubi-quarkus-graalvmce-builder-image")) {
@@ -38,7 +44,8 @@ void testBuilderImageBeingPickedUp() {
3844

3945
nativeConfig.builderImage = "mandrel";
4046
localRunner = new NativeImageBuildLocalContainerRunner(nativeConfig, Path.of("/tmp"));
41-
command = localRunner.buildCommand(DOCKER_EXECUTABLE, Collections.emptyList(), Collections.emptyList());
47+
command = localRunner.buildCommand(CONTAINER_RUNTIME.getExecutableName(), Collections.emptyList(),
48+
Collections.emptyList());
4249
found = false;
4350
for (String part : command) {
4451
if (part.contains("ubi-quarkus-mandrel-builder-image")) {
@@ -50,7 +57,8 @@ void testBuilderImageBeingPickedUp() {
5057

5158
nativeConfig.builderImage = "RandomString";
5259
localRunner = new NativeImageBuildLocalContainerRunner(nativeConfig, Path.of("/tmp"));
53-
command = localRunner.buildCommand(DOCKER_EXECUTABLE, Collections.emptyList(), Collections.emptyList());
60+
command = localRunner.buildCommand(CONTAINER_RUNTIME.getExecutableName(), Collections.emptyList(),
61+
Collections.emptyList());
5462
found = false;
5563
for (String part : command) {
5664
if (part.equals("RandomString")) {

0 commit comments

Comments
 (0)