Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docker-build fails to detect podman #41100

Merged
merged 1 commit into from
Jun 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.util.List;

import io.quarkus.deployment.util.ContainerRuntimeUtil;
import io.quarkus.deployment.util.ContainerRuntimeUtil.ContainerRuntime;

public class IsDockerWorking extends IsContainerRuntimeWorking {
public IsDockerWorking() {
Expand All @@ -19,7 +20,8 @@ public IsDockerWorking(boolean silent) {
private static class DockerBinaryStrategy implements Strategy {
@Override
public Result get() {
if (ContainerRuntimeUtil.detectContainerRuntime(false) != UNAVAILABLE) {
if (ContainerRuntimeUtil.detectContainerRuntime(false,
ContainerRuntime.DOCKER, ContainerRuntime.PODMAN) != UNAVAILABLE) {
return Result.AVAILABLE;
} else {
return Result.UNKNOWN;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.List;

import io.quarkus.deployment.util.ContainerRuntimeUtil;
import io.quarkus.deployment.util.ContainerRuntimeUtil.ContainerRuntime;

public class IsPodmanWorking extends IsContainerRuntimeWorking {
public IsPodmanWorking() {
Expand All @@ -21,7 +22,11 @@ public IsPodmanWorking(boolean silent) {
private static class PodmanBinaryStrategy implements Strategy {
@Override
public Result get() {
return (ContainerRuntimeUtil.detectContainerRuntime(false) != UNAVAILABLE) ? Result.AVAILABLE : Result.UNKNOWN;
if (ContainerRuntimeUtil.detectContainerRuntime(false, ContainerRuntime.PODMAN) != UNAVAILABLE) {
return Result.AVAILABLE;
} else {
return Result.UNKNOWN;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;
Expand Down Expand Up @@ -42,21 +43,20 @@ private ContainerRuntimeUtil() {
* @return a fully resolved {@link ContainerRuntime} indicating if Docker or Podman is available and in rootless mode or not
* @throws IllegalStateException if no container runtime was found to build the image
*/
public static ContainerRuntime detectContainerRuntime() {
return detectContainerRuntime(true);
}

public static ContainerRuntime detectContainerRuntime(List<ContainerRuntime> orderToCheckRuntimes) {
public static ContainerRuntime detectContainerRuntime(ContainerRuntime... orderToCheckRuntimes) {
Comment on lines -45 to +46
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Due to this change, all callers of detectContainerRuntime() will fail with NoSuchMethodException unless they are recompiled. Let me send a PR to get the method back.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yikes! Totally my bad @ppalaga . I can take care of it if you'd like

return detectContainerRuntime(true, orderToCheckRuntimes);
}

public static ContainerRuntime detectContainerRuntime(boolean required) {
return detectContainerRuntime(required, List.of(ContainerRuntime.DOCKER, ContainerRuntime.PODMAN));
public static ContainerRuntime detectContainerRuntime(boolean required, ContainerRuntime... orderToCheckRuntimes) {
return detectContainerRuntime(
required,
((orderToCheckRuntimes != null) && (orderToCheckRuntimes.length > 0)) ? Arrays.asList(orderToCheckRuntimes)
: List.of(ContainerRuntime.DOCKER, ContainerRuntime.PODMAN));
}

public static ContainerRuntime detectContainerRuntime(boolean required, List<ContainerRuntime> orderToCheckRuntimes) {
ContainerRuntime containerRuntime = loadContainerRuntimeFromSystemProperty();
if (containerRuntime != null) {
if ((containerRuntime != null) && orderToCheckRuntimes.contains(containerRuntime)) {
return containerRuntime;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ protected void buildFromJar(C config,
BuildProducer<ArtifactResultBuildItem> artifactResultProducer,
BuildProducer<ContainerImageBuilderBuildItem> containerImageBuilder,
PackageConfig packageConfig,
ContainerRuntime containerRuntime) {
ContainerRuntime... containerRuntimes) {

var buildContainerImage = buildContainerImageNeeded(containerImageConfig, buildRequest);
var pushContainerImage = pushContainerImageNeeded(containerImageConfig, pushRequest);
Expand Down Expand Up @@ -84,7 +84,7 @@ protected void buildFromJar(C config,
LOGGER.infof("Starting (local) container image build for jar using %s", getProcessorImplementation());
}

var executableName = getExecutableName(config, containerRuntime);
var executableName = getExecutableName(config, containerRuntimes);
var builtContainerImage = createContainerImage(containerImageConfig, config, containerImageInfo, out,
dockerfilePaths, buildContainerImage, pushContainerImage, packageConfig, executableName);

Expand Down Expand Up @@ -113,7 +113,7 @@ protected void buildFromNativeImage(C config,
BuildProducer<ContainerImageBuilderBuildItem> containerImageBuilder,
PackageConfig packageConfig,
NativeImageBuildItem nativeImage,
ContainerRuntime containerRuntime) {
ContainerRuntime... containerRuntimes) {

var buildContainerImage = buildContainerImageNeeded(containerImageConfig, buildRequest);
var pushContainerImage = pushContainerImageNeeded(containerImageConfig, pushRequest);
Expand All @@ -134,7 +134,7 @@ protected void buildFromNativeImage(C config,
LOGGER.infof("Starting (local) container image build for jar using %s", getProcessorImplementation());
}

var executableName = getExecutableName(config, containerRuntime);
var executableName = getExecutableName(config, containerRuntimes);
var dockerfilePaths = getDockerfilePaths(config, true, packageConfig, out);
var builtContainerImage = createContainerImage(containerImageConfig, config, containerImage, out, dockerfilePaths,
buildContainerImage, pushContainerImage, packageConfig, executableName);
Expand Down Expand Up @@ -257,9 +257,9 @@ protected RuntimeException containerRuntimeException(String executableName, Stri
getProcessorImplementation()));
}

private String getExecutableName(C config, ContainerRuntime containerRuntime) {
protected String getExecutableName(C config, ContainerRuntime... containerRuntimes) {
return config.executableName()
.orElseGet(() -> detectContainerRuntime(List.of(containerRuntime)).getExecutableName());
.orElseGet(() -> detectContainerRuntime(containerRuntimes).getExecutableName());
}

private DockerfilePaths getDockerfilePaths(C config,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public void dockerBuildFromJar(DockerConfig dockerConfig,

buildFromJar(dockerConfig, dockerStatusBuildItem, containerImageConfig, out, containerImageInfo,
buildRequest, pushRequest, artifactResultProducer, containerImageBuilder, packageConfig,
ContainerRuntime.DOCKER);
ContainerRuntime.DOCKER, ContainerRuntime.PODMAN);
}

@BuildStep(onlyIf = { IsNormalNotRemoteDev.class, NativeBuild.class, DockerBuild.class })
Expand All @@ -81,7 +81,7 @@ public void dockerBuildFromNativeImage(DockerConfig dockerConfig,

buildFromNativeImage(dockerConfig, dockerStatusBuildItem, containerImageConfig, containerImage,
buildRequest, pushRequest, out, artifactResultProducer, containerImageBuilder, packageConfig, nativeImage,
ContainerRuntime.DOCKER);
ContainerRuntime.DOCKER, ContainerRuntime.PODMAN);
}

@Override
Expand Down Expand Up @@ -147,6 +147,19 @@ protected String createContainerImage(ContainerImageConfig containerImageConfig,
return containerImageInfo.getImage();
}

@Override
protected String getExecutableName(DockerConfig config, ContainerRuntime... containerRuntimes) {
var executableName = super.getExecutableName(config, containerRuntimes);

if (!DOCKER.equals(executableName)) {
LOG.warnf(
"Using executable %s within the quarkus-container-image-%s extension. Maybe you should use the quarkus-container-image-%s extension instead?",
executableName, DOCKER, executableName);
}

return executableName;
}

private String[] getDockerBuildArgs(String image,
DockerfilePaths dockerfilePaths,
ContainerImageConfig containerImageConfig,
Expand Down
Loading