diff --git a/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-kubernetes/Dockerfile b/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-kubernetes/Dockerfile
new file mode 100644
index 0000000000..cc3f5db285
--- /dev/null
+++ b/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-kubernetes/Dockerfile
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2019 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at:
+#
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+FROM busybox:latest
+EXPOSE 9080
\ No newline at end of file
diff --git a/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-kubernetes/build.gradle b/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-kubernetes/build.gradle
new file mode 100644
index 0000000000..f7c967df5e
--- /dev/null
+++ b/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-kubernetes/build.gradle
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+plugins {
+ id 'org.eclipse.jkube.kubernetes' version "${jKubeVersion}"
+ id 'org.springframework.boot' version '2.7.17'
+ id 'io.spring.dependency-management' version '1.0.15.RELEASE'
+ id 'java'
+}
+
+group = 'org.eclipse.jkube.integration.tests.gradle'
+version = '0.0.1-SNAPSHOT'
+sourceCompatibility = '11'
+
+repositories {
+ mavenCentral()
+}
+
+def extensionConfig = {
+ offline = true
+}
+
+kubernetes(extensionConfig)
diff --git a/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-openshift/Dockerfile b/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-openshift/Dockerfile
new file mode 100644
index 0000000000..cc3f5db285
--- /dev/null
+++ b/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-openshift/Dockerfile
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2019 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at:
+#
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+FROM busybox:latest
+EXPOSE 9080
\ No newline at end of file
diff --git a/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-openshift/build.gradle b/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-openshift/build.gradle
new file mode 100644
index 0000000000..4ffbcf0cbf
--- /dev/null
+++ b/gradle-plugin/it/src/it/dockerfile-simple-generator-precedence-openshift/build.gradle
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+plugins {
+ id 'org.eclipse.jkube.openshift' version "${jKubeVersion}"
+ id 'org.springframework.boot' version '2.7.17'
+ id 'io.spring.dependency-management' version '1.0.15.RELEASE'
+ id 'java'
+}
+
+group = 'org.eclipse.jkube.integration.tests.gradle'
+version = '0.0.1-SNAPSHOT'
+sourceCompatibility = '11'
+
+repositories {
+ mavenCentral()
+}
+
+def extensionConfig = {
+ offline = true
+}
+
+openshift(extensionConfig)
diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DockerfileSimpleExtensionPrecedenceIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DockerfileSimpleExtensionPrecedenceIT.java
new file mode 100644
index 0000000000..b8b7661295
--- /dev/null
+++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DockerfileSimpleExtensionPrecedenceIT.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.jkube.gradle.plugin.tests;
+
+import org.gradle.testkit.runner.BuildResult;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import java.io.File;
+import java.util.stream.Collectors;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+class DockerfileSimpleExtensionPrecedenceIT {
+
+
+ @RegisterExtension
+ private final ITGradleRunnerExtension gradleRunner = new ITGradleRunnerExtension();
+
+ @Test
+ void k8sResource_whenRun_generatesK8sManifests() {
+ // Remove kubernetes-gradle-plugin from classpath to avoid using its profiles-default.yml
+ gradleRunner.withPluginClassPath(gradleRunner.pluginClassPath().stream()
+ .filter(f -> !f.getAbsolutePath().contains("gradle-plugin" + File.separator + "openshift"))
+ .collect(Collectors.toList())
+ );
+ // When
+ final BuildResult result = gradleRunner
+ .withITProject("dockerfile-simple-generator-precedence-kubernetes")
+ .withArguments("k8sResource", "--stacktrace")
+ .build();
+ // Then
+ assertThat(result).extracting(BuildResult::getOutput).asString()
+ .contains("Running generator dockerfile-simple");
+ }
+
+ @Test
+ void ocResource_whenRun_generatesOpenShiftManifests() {
+ // When
+ final BuildResult result = gradleRunner
+ .withITProject("dockerfile-simple-generator-precedence-openshift")
+ .withArguments("ocResource")
+ .build();
+ // Then
+ assertThat(result).extracting(BuildResult::getOutput).asString()
+ .contains("Running generator dockerfile-simple");
+ }
+}
diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ITGradleRunnerExtension.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ITGradleRunnerExtension.java
index 83b0a034bb..de0a25720f 100644
--- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ITGradleRunnerExtension.java
+++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ITGradleRunnerExtension.java
@@ -23,6 +23,7 @@
import java.net.URI;
import java.nio.file.Path;
import java.util.Arrays;
+import java.util.List;
import java.util.stream.Collectors;
public class ITGradleRunnerExtension implements BeforeEachCallback, AfterEachCallback {
@@ -58,6 +59,15 @@ public ITGradleRunnerExtension withArguments(String... originalArguments) {
return this;
}
+ public List extends File> pluginClassPath() {
+ return gradleRunner.getPluginClasspath();
+ }
+
+ public ITGradleRunnerExtension withPluginClassPath(Iterable extends File> pluginClassPath) {
+ gradleRunner = gradleRunner.withPluginClasspath(pluginClassPath);
+ return this;
+ }
+
public File resolveFile(String... relativePaths) {
Path path = gradleRunner.getProjectDir().toPath();
for (String rp : relativePaths) {
diff --git a/gradle-plugin/kubernetes/pom.xml b/gradle-plugin/kubernetes/pom.xml
index 0ea24f1d38..022a011145 100644
--- a/gradle-plugin/kubernetes/pom.xml
+++ b/gradle-plugin/kubernetes/pom.xml
@@ -72,6 +72,13 @@
jkube-kit-generator-java-exec
${jkube.kit.version}
+
+
+ org.eclipse.jkube
+ jkube-kit-generator-dockerfile-simple
+ ${jkube.kit.version}
+
+
org.eclipse.jkube
jkube-kit-generator-karaf
diff --git a/gradle-plugin/kubernetes/src/main/resources/META-INF/jkube/profiles-default.yml b/gradle-plugin/kubernetes/src/main/resources/META-INF/jkube/profiles-default.yml
index 092aa586f2..b9fe92ba3f 100644
--- a/gradle-plugin/kubernetes/src/main/resources/META-INF/jkube/profiles-default.yml
+++ b/gradle-plugin/kubernetes/src/main/resources/META-INF/jkube/profiles-default.yml
@@ -86,6 +86,7 @@
generator:
# The order given in "includes" is the order in which generators are called
includes:
+ - dockerfile-simple
- quarkus
- spring-boot
- thorntail-v2
@@ -118,6 +119,7 @@
generator:
# The order given in "includes" is the order in which generators are called
includes:
+ - dockerfile-simple
- spring-boot
- thorntail-v2
- wildfly-jar
diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java
index 5e562cf084..3560eb9dae 100644
--- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java
+++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java
@@ -33,6 +33,7 @@ public class TestKubernetesExtension extends KubernetesExtension {
public String buildRecreate;
public Boolean isForcePull;
public Boolean isFailOnNoKubernetesJson;
+ public Boolean isSkipPush;
public TestKubernetesExtension() {
javaProject = mock(JavaProject.class, RETURNS_DEEP_STUBS);
@@ -300,7 +301,7 @@ public Property getServiceUrlWaitTimeSeconds() {
@Override
public Property getSkipPush() {
- return property(Boolean.class);
+ return property(Boolean.class).value(isSkipPush);
}
@Override
diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesBuildTaskTest.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesBuildTaskTest.java
index 4693f3c7b0..751c4aca46 100644
--- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesBuildTaskTest.java
+++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesBuildTaskTest.java
@@ -137,4 +137,5 @@ public Property getSkipBuild() {
assertThat(dockerBuildServiceMockedConstruction.constructed()).isEmpty();
verify(buildTask.jKubeServiceHub.getBuildService(), times(0)).build(any());
}
+
}
diff --git a/gradle-plugin/openshift/src/main/resources/META-INF/jkube/profiles-default.yml b/gradle-plugin/openshift/src/main/resources/META-INF/jkube/profiles-default.yml
index e0744ef0ba..9273956573 100644
--- a/gradle-plugin/openshift/src/main/resources/META-INF/jkube/profiles-default.yml
+++ b/gradle-plugin/openshift/src/main/resources/META-INF/jkube/profiles-default.yml
@@ -87,6 +87,7 @@
generator:
# The order given in "includes" is the order in which generators are called
includes:
+ - dockerfile-simple
- quarkus
- spring-boot
- thorntail-v2
@@ -119,6 +120,7 @@
generator:
# The order given in "includes" is the order in which generators are called
includes:
+ - dockerfile-simple
- spring-boot
- thorntail-v2
- wildfly-jar
diff --git a/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/helper/ConfigHelper.java b/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/helper/ConfigHelper.java
index 35bb48dce5..af052a6e18 100644
--- a/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/helper/ConfigHelper.java
+++ b/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/helper/ConfigHelper.java
@@ -23,7 +23,6 @@
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.util.JKubeProjectUtil;
-import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -33,12 +32,6 @@
import java.util.Set;
import java.util.stream.Collectors;
-import static org.eclipse.jkube.kit.build.api.helper.DockerFileUtil.addSimpleDockerfileConfig;
-import static org.eclipse.jkube.kit.build.api.helper.DockerFileUtil.createSimpleDockerfileConfig;
-import static org.eclipse.jkube.kit.build.api.helper.DockerFileUtil.getTopLevelDockerfile;
-import static org.eclipse.jkube.kit.build.api.helper.DockerFileUtil.isSimpleDockerFileMode;
-import static org.eclipse.jkube.kit.common.util.PropertiesUtil.getValueFromProperties;
-
/**
* Utility class which helps in resolving, customizing, initializing and validating
* image configuration.
@@ -174,16 +167,6 @@ public static List initImageConfiguration(Date buildTimeStam
filter, // A filter which image to process
generatorManager); // GeneratorManager which will invoke generator
- // Check for simple Dockerfile mode
- ImageConfiguration dockerFileImageConfig = createImageConfigurationForSimpleDockerfile(resolvedImages, jKubeConfiguration, imageNameFormatter);
- if (dockerFileImageConfig != null) {
- if (resolvedImages.isEmpty()) {
- resolvedImages.add(dockerFileImageConfig);
- } else {
- resolvedImages.set(0, dockerFileImageConfig);
- }
- }
-
// Init and validate Image configurations. After this step, getResolvedImages() contains the valid configuration.
for (ImageConfiguration imageConfiguration : resolvedImages) {
imageConfiguration.setName(imageNameFormatter.format(imageConfiguration.getName()));
@@ -196,20 +179,6 @@ public static List initImageConfiguration(Date buildTimeStam
return resolvedImages;
}
- private static ImageConfiguration createImageConfigurationForSimpleDockerfile(List resolvedImages, JKubeConfiguration jKubeConfiguration, ImageNameFormatter imageNameFormatter) {
- if (isSimpleDockerFileMode(jKubeConfiguration.getBasedir())) {
- File topDockerfile = getTopLevelDockerfile(jKubeConfiguration.getBasedir());
- String defaultImageName = imageNameFormatter.format(getValueFromProperties(jKubeConfiguration.getProject().getProperties(),
- "jkube.image.name", "jkube.generator.name"));
- if (resolvedImages.isEmpty()) {
- return createSimpleDockerfileConfig(topDockerfile, defaultImageName);
- } else if (resolvedImages.size() == 1 && resolvedImages.get(0).getBuildConfiguration() == null) {
- return addSimpleDockerfileConfig(resolvedImages.get(0), topDockerfile);
- }
- }
- return null;
- }
-
// =========================================================================
private static void printDockerfileInfoIfDockerfileMode(ImageConfiguration imageConfiguration, KitLogger log, JKubeConfiguration jKubeConfiguration) {
diff --git a/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/helper/DockerFileUtil.java b/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/helper/DockerFileUtil.java
index ef73c086bc..8e03cf7cdc 100644
--- a/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/helper/DockerFileUtil.java
+++ b/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/helper/DockerFileUtil.java
@@ -18,14 +18,12 @@
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
import java.util.Properties;
import java.util.Set;
import java.util.regex.Matcher;
@@ -34,7 +32,6 @@
import com.fasterxml.jackson.core.type.TypeReference;
import org.eclipse.jkube.kit.common.JKubeFileInterpolator;
import org.eclipse.jkube.kit.common.util.Serialization;
-import org.eclipse.jkube.kit.config.image.ImageConfiguration;
import org.eclipse.jkube.kit.config.image.build.BuildConfiguration;
import org.apache.commons.lang3.StringUtils;
@@ -192,42 +189,6 @@ public static Map readDockerConfig() {
}
}
- public static boolean isSimpleDockerFileMode(File projectBaseDirectory) {
- if (projectBaseDirectory != null) {
- return getTopLevelDockerfile(projectBaseDirectory).exists();
- }
- return false;
- }
-
- public static File getTopLevelDockerfile(File projectBaseDirectory) {
- return new File(projectBaseDirectory, "Dockerfile");
- }
-
- public static ImageConfiguration createSimpleDockerfileConfig(File dockerFile, String defaultImageName) {
- if (defaultImageName == null) {
- // Default name group/artifact:version (or 'latest' if SNAPSHOT)
- defaultImageName = "%g/%a:%l";
- }
-
- final BuildConfiguration buildConfig = BuildConfiguration.builder()
- .dockerFile(dockerFile.getPath())
- .ports(extractPorts(dockerFile))
- .build();
-
- return ImageConfiguration.builder()
- .name(defaultImageName)
- .build(buildConfig)
- .build();
- }
-
- public static ImageConfiguration addSimpleDockerfileConfig(ImageConfiguration image, File dockerfile) {
- final BuildConfiguration buildConfig = BuildConfiguration.builder()
- .dockerFile(dockerfile.getPath())
- .ports(extractPorts(dockerfile))
- .build();
- return image.toBuilder().build(buildConfig).build();
- }
-
private static void updateMapWithArgValue(Map result, Map args, String argString) {
if (argString.contains("=") || argString.contains(":")) {
String[] argStringParts = argString.split("[=:]");
@@ -269,25 +230,6 @@ private static void validateArgValue(String argStringParam) {
}
}
- static List extractPorts(File dockerFile) {
- Properties properties = new Properties();
- try {
- return extractPorts(extractLines(dockerFile, "EXPOSE", properties, null));
- } catch (IOException ioException) {
- throw new IllegalArgumentException("Error in reading Dockerfile", ioException);
- }
- }
-
- static List extractPorts(List dockerLinesContainingExpose) {
- Set ports = new HashSet<>();
- dockerLinesContainingExpose.forEach(line -> Arrays.stream(line)
- .skip(1)
- .filter(Objects::nonNull)
- .filter(StringUtils::isNotBlank)
- .forEach(ports::add));
- return new ArrayList<>(ports);
- }
-
static String resolveDockerfileFilter(String filter) {
return filter != null ? filter : BuildConfiguration.DEFAULT_FILTER;
}
diff --git a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/helper/ConfigHelperTest.java b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/helper/ConfigHelperTest.java
index ce236af37f..33ee6b1529 100644
--- a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/helper/ConfigHelperTest.java
+++ b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/helper/ConfigHelperTest.java
@@ -13,35 +13,36 @@
*/
package org.eclipse.jkube.kit.build.api.helper;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
import org.eclipse.jkube.kit.common.JKubeConfiguration;
import org.eclipse.jkube.kit.common.JavaProject;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.config.image.GeneratorManager;
import org.eclipse.jkube.kit.config.image.ImageConfiguration;
import org.eclipse.jkube.kit.config.image.build.BuildConfiguration;
+
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Properties;
+import org.junit.jupiter.api.io.TempDir;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.eq;
class ConfigHelperTest {
private KitLogger logger;
@@ -85,56 +86,6 @@ void initImageConfiguration_withSimpleImageConfiguration_shouldReturnImageConfig
.isEqualTo(dummyImageConfiguration);
}
- @Test
- void initImageConfiguration_withSimpleDockerFileInProjectBaseDir_shouldCreateImageConfiguration() {
- List images = new ArrayList<>();
- File dockerFile = new File(Objects.requireNonNull(getClass().getResource("/dummy-javaproject/Dockerfile")).getFile());
- jKubeConfiguration = jKubeConfiguration.toBuilder()
- .project(javaProject.toBuilder()
- .baseDirectory(dockerFile.getParentFile())
- .build())
- .build();
-
- // When
- List resolvedImages = ConfigHelper.initImageConfiguration(new Date(), images, imageConfigResolver, logger, null, generatorManager, jKubeConfiguration);
-
- // Then
- assertThat(resolvedImages).isNotNull()
- .singleElement()
- .hasFieldOrPropertyWithValue("name", "jkube/test-java-project:latest")
- .hasFieldOrPropertyWithValue("build.dockerFile", dockerFile)
- .hasFieldOrPropertyWithValue("build.ports", Collections.singletonList("8080"));
- }
-
- @Test
- void initImageConfiguration_withSimpleDockerFileModeEnabledAndImageConfigurationWithNoBuild_shouldModifyExistingImageConfiguration() {
- ImageConfiguration dummyImageConfiguration = ImageConfiguration.builder()
- .name("imageconfiguration-no-build:latest")
- .build();
- List images = new ArrayList<>();
- images.add(dummyImageConfiguration);
- File dockerFile = new File(getClass().getResource("/dummy-javaproject/Dockerfile").getFile());
- jKubeConfiguration = jKubeConfiguration.toBuilder()
- .project(javaProject.toBuilder()
- .baseDirectory(dockerFile.getParentFile())
- .build())
- .build();
- when(imageConfigResolver.resolve(dummyImageConfiguration, jKubeConfiguration.getProject())).thenReturn(images);
- when(generatorManager.generate(images)).thenReturn(images);
-
- // When
- List resolvedImages = ConfigHelper.initImageConfiguration(new Date(), images, imageConfigResolver, logger, null, generatorManager, jKubeConfiguration);
-
- // Then
- assertThat(resolvedImages).isNotNull()
- .singleElement()
- .hasFieldOrPropertyWithValue("name", "imageconfiguration-no-build:latest")
- .hasFieldOrPropertyWithValue("build.dockerFile", dockerFile)
- .hasFieldOrPropertyWithValue("build.ports", Collections.singletonList("8080"));
- verify(logger).info(eq("Using Dockerfile: %s"), anyString());
- verify(logger).info(eq("Using Docker Context Directory: %s"), any(File.class));
- }
-
@Test
void initImageConfiguration_whenImageConfigurationNameBlank_thenThrowException() {
// Given
@@ -163,6 +114,28 @@ void initImageConfiguration_whenNoMatchForImageFilter_thenLogWarning() {
verify(logger).warn("None of the resolved images [%s] match the configured filter '%s'", "foo/bar:latest", "i-dont-exist");
}
+ @Test
+ void initImageConfiguration_whenDockerfileUsed_thenLogDockerfilePathAndContextDir(@TempDir File temporaryFolder) {
+ File dockerFile = temporaryFolder.toPath().resolve("Dockerfile").toFile();
+ ImageConfiguration dummyImageConfiguration = ImageConfiguration.builder()
+ .name("imageconfiguration-no-build:latest")
+ .build(BuildConfiguration.builder()
+ .dockerFile(dockerFile.getAbsolutePath())
+ .build())
+ .build();
+ List images = new ArrayList<>();
+ images.add(dummyImageConfiguration);
+ when(imageConfigResolver.resolve(dummyImageConfiguration, jKubeConfiguration.getProject())).thenReturn(images);
+ when(generatorManager.generate(images)).thenReturn(images);
+
+ // When
+ ConfigHelper.initImageConfiguration(new Date(), images, imageConfigResolver, logger, null, generatorManager, jKubeConfiguration);
+
+ // Then
+ verify(logger).info(eq("Using Dockerfile: %s"), anyString());
+ verify(logger).info(eq("Using Docker Context Directory: %s"), any(File.class));
+ }
+
@Test
void validateExternalPropertyActivation_withMultipleImagesWithoutExplicitExternalConfig_shouldThrowException() {
// Given
diff --git a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/helper/DockerFileUtilTest.java b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/helper/DockerFileUtilTest.java
index fa1f5716c4..ff641a8c58 100644
--- a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/helper/DockerFileUtilTest.java
+++ b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/helper/DockerFileUtilTest.java
@@ -15,7 +15,6 @@
import org.apache.commons.io.FileUtils;
import org.eclipse.jkube.kit.common.util.EnvUtil;
-import org.eclipse.jkube.kit.config.image.ImageConfiguration;
import org.eclipse.jkube.kit.config.image.build.BuildConfiguration;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -25,7 +24,6 @@
import org.junit.jupiter.params.provider.MethodSource;
import java.io.File;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
@@ -128,43 +126,6 @@ void interpolate_withNullFilter_shouldPickDefaultFilter() throws IOException {
"ENTRYPOINT [\"java\", \"-jar\", \"target/docker-file-simple.jar\"]");
}
- @Test
- void createSimpleDockerfileConfig() throws IOException {
- // Given
- File dockerFile = Files.createTempFile("Dockerfile", "-test").toFile();
- // When
- ImageConfiguration imageConfiguration1 = DockerFileUtil.createSimpleDockerfileConfig(dockerFile, null);
- ImageConfiguration imageConfiguration2 = DockerFileUtil.createSimpleDockerfileConfig(dockerFile, "someImage:0.0.1");
- // Then
- assertThat(imageConfiguration1).isNotNull()
- .hasFieldOrPropertyWithValue("name", "%g/%a:%l")
- .extracting(ImageConfiguration::getBuild)
- .extracting(BuildConfiguration::getDockerFileRaw)
- .isEqualTo(dockerFile.getPath());
- assertThat(imageConfiguration2).isNotNull()
- .hasFieldOrPropertyWithValue("name", "someImage:0.0.1")
- .extracting(ImageConfiguration::getBuild)
- .extracting(BuildConfiguration::getDockerFileRaw)
- .isEqualTo(dockerFile.getPath());
- }
-
- @Test
- void addSimpleDockerfileConfig() throws IOException {
- // Given
- ImageConfiguration imageConfiguration = ImageConfiguration.builder()
- .name("test-image")
- .build();
- File dockerFile = Files.createTempFile("Dockerfile", "-test").toFile();
-
- // When
- ImageConfiguration result = DockerFileUtil.addSimpleDockerfileConfig(imageConfiguration, dockerFile);
-
- // Then
- assertThat(result.getBuild()).isNotNull()
- .extracting(BuildConfiguration::getDockerFileRaw)
- .isEqualTo(dockerFile.getPath());
- }
-
@Test
void customInterpolation() throws IOException {
// Given
@@ -330,48 +291,6 @@ void readDockerConfig_fromMissing() {
}
- @Test
- void createSimpleDockerfileConfig_withPorts() {
- // Given
- File dockerFile = new File(getClass().getResource("/docker/Dockerfile_expose_ports").getFile());
- // When
- ImageConfiguration imageConfiguration1 = DockerFileUtil.createSimpleDockerfileConfig(dockerFile, null);
- // Then
- assertThat(imageConfiguration1.getBuild().getDockerFileRaw()).isEqualTo(dockerFile.getPath());
- assertThat(imageConfiguration1).isNotNull()
- .hasFieldOrPropertyWithValue("name", "%g/%a:%l")
- .extracting(ImageConfiguration::getBuild)
- .extracting(BuildConfiguration::getPorts).isNotNull()
- .asList()
- .hasSize(5)
- .containsExactly("80/tcp", "8080/udp", "80", "8080", "99/udp");
- }
-
- @Test
- void extractPorts_fromInvalidDockerFile_shouldThrowException() {
- assertThatIllegalArgumentException()
- .isThrownBy(() -> DockerFileUtil.extractPorts(new File("iDoNotExist")))
- .withMessage("Error in reading Dockerfile");
- }
-
- @Test
- void extractPorts_fromDockerFileLines() {
- // Given
- List input1 = Arrays.asList(new String[]{"EXPOSE", "8080", "9090", "9999"} , new String[]{"EXPOSE", "9010"});
- List input2 = Arrays.asList(new String[]{"EXPOSE", "9001"}, new String[]{"EXPOSE", null});
- List input3 = Arrays.asList(new String[]{"EXPOSE", ""}, new String[]{"EXPOSE", "8001"});
-
- // When
- List result1 = DockerFileUtil.extractPorts(input1);
- List result2 = DockerFileUtil.extractPorts(input2);
- List result3 = DockerFileUtil.extractPorts(input3);
-
- // Then
- assertThat(result1).containsExactly("9090", "8080", "9999", "9010");
- assertThat(result2).containsExactly("9001");
- assertThat(result3).containsExactly("8001");
- }
-
@Test
void resolveDockerfileFilter() {
assertThat(DockerFileUtil.resolveDockerfileFilter(null)).isEqualTo(BuildConfiguration.DEFAULT_FILTER);
diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/BuildReferenceDateUtil.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/BuildReferenceDateUtil.java
index a1ca423043..9f73894ed4 100644
--- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/BuildReferenceDateUtil.java
+++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/BuildReferenceDateUtil.java
@@ -14,7 +14,6 @@
package org.eclipse.jkube.kit.common.util;
import java.io.File;
-import java.io.IOException;
import java.util.Date;
import java.util.Map;
import java.util.Optional;
@@ -22,7 +21,7 @@
public class BuildReferenceDateUtil {
private BuildReferenceDateUtil() { }
- static Date getBuildReferenceDate(String buildDirectory, String dockerBuildTimestampFile) throws IOException {
+ static Date getBuildReferenceDate(String buildDirectory, String dockerBuildTimestampFile) {
return Optional.ofNullable(EnvUtil.loadTimestamp(getBuildTimestampFile(buildDirectory, dockerBuildTimestampFile)))
.orElse(new Date());
}
@@ -40,10 +39,9 @@ public static File getBuildTimestampFile(String projectBuildDirectory, String do
* @param projectBuildDir project's build directory
* @param dockerBuildTimestampFile docker build timestamp file
* @return timestamp to use
- * @throws IOException If failure in reading build timestamp file
*/
public static Date getBuildTimestamp(Map pluginContext, String buildTimestampContextKey,
- String projectBuildDir, String dockerBuildTimestampFile) throws IOException {
+ String projectBuildDir, String dockerBuildTimestampFile) {
Date now = (Date) (pluginContext != null ? pluginContext.get(buildTimestampContextKey) : null);
if (now == null) {
now = getBuildReferenceDate(projectBuildDir, dockerBuildTimestampFile);
diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/EnvUtil.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/EnvUtil.java
index faa0762444..235beaa4f4 100644
--- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/EnvUtil.java
+++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/EnvUtil.java
@@ -14,6 +14,7 @@
package org.eclipse.jkube.kit.common.util;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jkube.kit.common.JKubeException;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -446,7 +447,7 @@ public static void storeTimestamp(File tsFile, Date buildDate) throws IOExceptio
}
}
- public static Date loadTimestamp(File tsFile) throws IOException {
+ public static Date loadTimestamp(File tsFile) {
try {
if (tsFile.exists()) {
final String ts = new String(Files.readAllBytes(tsFile.toPath()), StandardCharsets.US_ASCII);
@@ -455,7 +456,7 @@ public static Date loadTimestamp(File tsFile) throws IOException {
return null;
}
} catch (IOException e) {
- throw new IOException("Cannot read timestamp " + tsFile, e);
+ throw JKubeException.launderThrowable("Cannot read timestamp " + tsFile, e);
}
}
diff --git a/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/DefaultGeneratorManager.java b/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/DefaultGeneratorManager.java
index e62d1abcbc..b52862bbd7 100644
--- a/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/DefaultGeneratorManager.java
+++ b/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/DefaultGeneratorManager.java
@@ -40,17 +40,9 @@ public DefaultGeneratorManager(GeneratorContext context) {
@Override
public List generate(List imageConfigs) {
-
- final PluginServiceFactory pluginFactory = new PluginServiceFactory<>(genCtx);
- if (genCtx.isUseProjectClasspath()) {
- pluginFactory.addAdditionalClassLoader(
- ClassUtil.createProjectClassLoader(genCtx.getProject().getCompileClassPathElements(), genCtx.getLogger()));
- }
-
List ret = imageConfigs;
final KitLogger log = genCtx.getLogger();
- final List generators = pluginFactory.createServiceObjects(SERVICE_PATHS);
- final List usableGenerators = genCtx.getConfig().prepareProcessors(generators, "generator");
+ List usableGenerators = createUsableGeneratorList();
log.verbose("Generators:");
for (Generator generator : usableGenerators) {
log.verbose(" - %s", generator.getName());
@@ -61,4 +53,14 @@ public List generate(List imageConfigs)
}
return ret;
}
+
+ private List createUsableGeneratorList() {
+ final PluginServiceFactory pluginFactory = new PluginServiceFactory<>(genCtx);
+ if (genCtx.isUseProjectClasspath()) {
+ pluginFactory.addAdditionalClassLoader(
+ ClassUtil.createProjectClassLoader(genCtx.getProject().getCompileClassPathElements(), genCtx.getLogger()));
+ }
+ final List generators = pluginFactory.createServiceObjects(SERVICE_PATHS);
+ return genCtx.getConfig().prepareProcessors(generators, "generator");
+ }
}
diff --git a/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/support/BaseGenerator.java b/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/support/BaseGenerator.java
index 3659ae5f56..8658888a49 100644
--- a/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/support/BaseGenerator.java
+++ b/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/support/BaseGenerator.java
@@ -26,7 +26,6 @@
import org.eclipse.jkube.generator.api.Generator;
import org.eclipse.jkube.generator.api.GeneratorConfig;
import org.eclipse.jkube.generator.api.GeneratorContext;
-import org.eclipse.jkube.kit.build.api.helper.DockerFileUtil;
import org.eclipse.jkube.kit.common.Configs;
import org.eclipse.jkube.kit.common.JavaProject;
import org.eclipse.jkube.kit.common.PrefixedLogger;
@@ -49,6 +48,9 @@
*/
public abstract class BaseGenerator implements Generator {
+ public static final String PROPERTY_JKUBE_IMAGE_NAME = "jkube.image.name";
+ public static final String PROPERTY_JKUBE_GENERATOR_NAME = "jkube.generator.name";
+
private static final String LABEL_SCHEMA_VERSION = "1.0";
private static final String GIT_REMOTE = "origin";
@@ -186,9 +188,9 @@ protected void addFrom(BuildConfiguration.BuildConfigurationBuilder builder) {
*/
protected String getImageName() {
if (getContext().getRuntimeMode() == RuntimeMode.OPENSHIFT) {
- return getConfigWithFallback(Config.NAME, "jkube.generator.name", "%a:%l");
+ return getConfigWithFallback(Config.NAME, PROPERTY_JKUBE_GENERATOR_NAME, "%a:%l");
} else {
- return getConfigWithFallback(Config.NAME, "jkube.generator.name", "%g/%a:%l");
+ return getConfigWithFallback(Config.NAME, PROPERTY_JKUBE_GENERATOR_NAME, "%g/%a:%l");
}
}
@@ -215,10 +217,6 @@ protected String getAlias() {
}
protected boolean shouldAddGeneratedImageConfiguration(List configs) {
- if (getProject() != null && getProject().getBaseDirectory() != null && getProject().getBaseDirectory().exists()
- && DockerFileUtil.isSimpleDockerFileMode(getContext().getProject().getBaseDirectory())) {
- return false;
- }
if (containsBuildConfiguration(configs)) {
return Boolean.parseBoolean(getConfigWithFallback(Config.ADD, "jkube.generator.add", "false"));
}
diff --git a/jkube-kit/generator/api/src/test/java/org/eclipse/jkube/generator/api/support/BaseGeneratorTest.java b/jkube-kit/generator/api/src/test/java/org/eclipse/jkube/generator/api/support/BaseGeneratorTest.java
index 412dc52430..fa2a410e46 100644
--- a/jkube-kit/generator/api/src/test/java/org/eclipse/jkube/generator/api/support/BaseGeneratorTest.java
+++ b/jkube-kit/generator/api/src/test/java/org/eclipse/jkube/generator/api/support/BaseGeneratorTest.java
@@ -327,23 +327,6 @@ void shouldAddDefaultImage() {
.returns(false, g -> g.shouldAddGeneratedImageConfiguration(Collections.singletonList(ic1)));
}
- @Test
- @DisplayName("should not add default image in case of simple dockerfile")
- void shouldNotAddDefaultImageInCaseOfSimpleDockerfile(@TempDir Path folder) throws IOException {
- // Given
- File projectBaseDir = Files.createDirectory(folder.resolve("test-project-dir")).toFile();
- File dockerFile = new File(projectBaseDir, "Dockerfile");
- boolean isTestDockerfileCreated = dockerFile.createNewFile();
- when(ctx.getProject()).thenReturn(project);
- when(project.getBaseDirectory()).thenReturn(projectBaseDir);
- // When
- BaseGenerator generator = createGenerator(null);
-
- // Then
- assertThat(isTestDockerfileCreated).isTrue();
- assertThat(generator.shouldAddGeneratedImageConfiguration(Collections.emptyList())).isFalse();
- }
-
@Test
@DisplayName("should add generated image configuration when add enabled via config, should return true")
void shouldAddGeneratedImageConfiguration_whenAddEnabledViaConfig_shouldReturnTrue() {
diff --git a/jkube-kit/generator/dockerfile-simple/pom.xml b/jkube-kit/generator/dockerfile-simple/pom.xml
new file mode 100644
index 0000000000..8b267a2249
--- /dev/null
+++ b/jkube-kit/generator/dockerfile-simple/pom.xml
@@ -0,0 +1,46 @@
+
+
+
+ 4.0.0
+
+
+ org.eclipse.jkube
+ jkube-kit-parent
+ 1.17-SNAPSHOT
+ ../../parent/pom.xml
+
+
+ jkube-kit-generator-dockerfile-simple
+
+ JKube Kit :: Generator :: Dockerfile Simple
+
+
+
+ org.eclipse.jkube
+ jkube-kit-generator-api
+
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+
+
+ org.assertj
+ assertj-core
+
+
+
diff --git a/jkube-kit/generator/dockerfile-simple/src/main/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileGenerator.java b/jkube-kit/generator/dockerfile-simple/src/main/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileGenerator.java
new file mode 100644
index 0000000000..eac1616af9
--- /dev/null
+++ b/jkube-kit/generator/dockerfile-simple/src/main/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileGenerator.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.jkube.generator.dockerfile.simple;
+
+import org.eclipse.jkube.generator.api.GeneratorContext;
+import org.eclipse.jkube.generator.api.support.BaseGenerator;
+import org.eclipse.jkube.kit.build.api.helper.ImageNameFormatter;
+import org.eclipse.jkube.kit.config.image.ImageConfiguration;
+
+import java.io.File;
+import java.util.List;
+
+import static org.eclipse.jkube.generator.dockerfile.simple.SimpleDockerfileUtil.addSimpleDockerfileConfig;
+import static org.eclipse.jkube.generator.dockerfile.simple.SimpleDockerfileUtil.createSimpleDockerfileConfig;
+import static org.eclipse.jkube.generator.dockerfile.simple.SimpleDockerfileUtil.getTopLevelDockerfile;
+import static org.eclipse.jkube.generator.dockerfile.simple.SimpleDockerfileUtil.isSimpleDockerFileMode;
+import static org.eclipse.jkube.kit.common.util.BuildReferenceDateUtil.getBuildTimestamp;
+import static org.eclipse.jkube.kit.common.util.PropertiesUtil.getValueFromProperties;
+
+public class SimpleDockerfileGenerator extends BaseGenerator {
+ public SimpleDockerfileGenerator(GeneratorContext context) {
+ super(context, "dockerfile-simple");
+ }
+
+ @Override
+ public boolean isApplicable(List configs) {
+ return shouldAddGeneratedImageConfiguration(configs) &&
+ isSimpleDockerFileMode(getContext().getProject().getBaseDirectory());
+ }
+
+ @Override
+ public List customize(List configs, boolean prePackagePhase) {
+ ImageNameFormatter imageNameFormatter = new ImageNameFormatter(getContext().getProject(),
+ getBuildTimestamp(null, null, getContext().getProject().getBuildDirectory().getAbsolutePath(),
+ "docker/build.timestamp"));
+ File topDockerfile = getTopLevelDockerfile(getContext().getProject().getBaseDirectory());
+ String defaultImageName = imageNameFormatter.format(getValueFromProperties(getContext().getProject().getProperties(),
+ PROPERTY_JKUBE_IMAGE_NAME, PROPERTY_JKUBE_GENERATOR_NAME));
+ if (configs.isEmpty()) {
+ configs.add(createSimpleDockerfileConfig(topDockerfile, defaultImageName));
+ } else if (configs.size() == 1 && configs.get(0).getBuildConfiguration() == null) {
+ configs.set(0, addSimpleDockerfileConfig(configs.get(0), topDockerfile));
+ }
+ return configs;
+ }
+}
diff --git a/jkube-kit/generator/dockerfile-simple/src/main/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileUtil.java b/jkube-kit/generator/dockerfile-simple/src/main/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileUtil.java
new file mode 100644
index 0000000000..a7297d07eb
--- /dev/null
+++ b/jkube-kit/generator/dockerfile-simple/src/main/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileUtil.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.jkube.generator.dockerfile.simple;
+
+import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jkube.kit.config.image.ImageConfiguration;
+import org.eclipse.jkube.kit.config.image.build.BuildConfiguration;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Properties;
+import java.util.Set;
+
+import static org.eclipse.jkube.kit.build.api.helper.DockerFileUtil.extractLines;
+
+public class SimpleDockerfileUtil {
+ private SimpleDockerfileUtil() {
+ }
+
+ public static boolean isSimpleDockerFileMode(File projectBaseDirectory) {
+ if (projectBaseDirectory != null) {
+ return getTopLevelDockerfile(projectBaseDirectory).exists();
+ }
+ return false;
+ }
+
+ public static File getTopLevelDockerfile(File projectBaseDirectory) {
+ return new File(projectBaseDirectory, "Dockerfile");
+ }
+
+ public static ImageConfiguration createSimpleDockerfileConfig(File dockerFile, String defaultImageName) {
+ if (defaultImageName == null) {
+ // Default name group/artifact:version (or 'latest' if SNAPSHOT)
+ defaultImageName = "%g/%a:%l";
+ }
+
+ final BuildConfiguration buildConfig = BuildConfiguration.builder()
+ .dockerFile(dockerFile.getPath())
+ .ports(extractPorts(dockerFile))
+ .build();
+
+ return ImageConfiguration.builder()
+ .name(defaultImageName)
+ .build(buildConfig)
+ .build();
+ }
+
+ public static ImageConfiguration addSimpleDockerfileConfig(ImageConfiguration image, File dockerfile) {
+ final BuildConfiguration buildConfig = BuildConfiguration.builder()
+ .dockerFile(dockerfile.getPath())
+ .ports(extractPorts(dockerfile))
+ .build();
+ return image.toBuilder().build(buildConfig).build();
+ }
+
+ static List extractPorts(File dockerFile) {
+ Properties properties = new Properties();
+ try {
+ return extractPorts(extractLines(dockerFile, "EXPOSE", properties, null));
+ } catch (IOException ioException) {
+ throw new IllegalArgumentException("Error in reading Dockerfile", ioException);
+ }
+ }
+
+ static List extractPorts(List dockerLinesContainingExpose) {
+ Set ports = new HashSet<>();
+ dockerLinesContainingExpose.forEach(line -> Arrays.stream(line)
+ .skip(1)
+ .filter(Objects::nonNull)
+ .filter(StringUtils::isNotBlank)
+ .forEach(ports::add));
+ return new ArrayList<>(ports);
+ }
+}
diff --git a/jkube-kit/generator/dockerfile-simple/src/main/resources/META-INF/jkube/generator-default b/jkube-kit/generator/dockerfile-simple/src/main/resources/META-INF/jkube/generator-default
new file mode 100644
index 0000000000..82c49bb62c
--- /dev/null
+++ b/jkube-kit/generator/dockerfile-simple/src/main/resources/META-INF/jkube/generator-default
@@ -0,0 +1,5 @@
+# The order of the generators used is defined in the active profile
+# (which is the profile "default" by default)
+# You can find the default profiles in "profiles-default.yml"
+
+org.eclipse.jkube.generator.dockerfile.simple.SimpleDockerfileGenerator
\ No newline at end of file
diff --git a/jkube-kit/generator/dockerfile-simple/src/test/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileGeneratorTest.java b/jkube-kit/generator/dockerfile-simple/src/test/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileGeneratorTest.java
new file mode 100644
index 0000000000..82efb8d06f
--- /dev/null
+++ b/jkube-kit/generator/dockerfile-simple/src/test/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileGeneratorTest.java
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.jkube.generator.dockerfile.simple;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.Properties;
+
+import org.eclipse.jkube.generator.api.GeneratorContext;
+import org.eclipse.jkube.kit.common.JavaProject;
+import org.eclipse.jkube.kit.config.image.ImageConfiguration;
+
+import org.eclipse.jkube.kit.config.image.build.BuildConfiguration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
+
+class SimpleDockerfileGeneratorTest {
+ @TempDir
+ private File temporaryFolder;
+ private File dockerFile;
+ private SimpleDockerfileGenerator simpleDockerfileGenerator;
+ private Properties properties;
+
+ @BeforeEach
+ void setUp() throws IOException {
+ dockerFile = temporaryFolder.toPath().resolve("Dockerfile").toFile();
+ File srcDockerFile = new File(Objects.requireNonNull(getClass().getResource("/dummy-javaproject/Dockerfile")).getFile());
+ Files.copy(srcDockerFile.toPath(), dockerFile.toPath());
+ properties = new Properties();
+ JavaProject javaProject = JavaProject.builder()
+ .baseDirectory(temporaryFolder)
+ .buildDirectory(temporaryFolder.toPath().resolve("target").toFile())
+ .properties(properties)
+ .build();
+ GeneratorContext generatorContext = GeneratorContext.builder()
+ .project(javaProject)
+ .build();
+ simpleDockerfileGenerator = new SimpleDockerfileGenerator(generatorContext);
+ }
+
+ @Nested
+ @DisplayName("isApplicable")
+ class IsApplicable {
+ @Test
+ @DisplayName("Dockerfile present in project base directory, return true")
+ void whenDockerFilePresentInProjectBaseDir_thenReturnTrue() {
+ assertThat(simpleDockerfileGenerator.isApplicable(Collections.emptyList())).isTrue();
+ }
+
+ @Test
+ @DisplayName("Dockerfile present in project base directory and ImageConfiguration present, return false")
+ void whenImageConfigurationAlreadyProvided_thenReturnFalse() {
+ // Given
+ List imageConfigurationList = new ArrayList<>();
+ imageConfigurationList.add(ImageConfiguration.builder()
+ .name("foo/bar:latest")
+ .build(BuildConfiguration.builder()
+ .from("foo/base:latest")
+ .build())
+ .build());
+
+ // When
+ assertThat(simpleDockerfileGenerator.isApplicable(imageConfigurationList)).isFalse();
+ }
+
+ @Test
+ @DisplayName("Dockerfile present in project base directory and ImageConfiguration does not contain BuildConfig, return true")
+ void whenProvidedImageConfigurationDoesNotContainBuildConfig_thenReturnFalse() {
+ // Given
+ List imageConfigurationList = new ArrayList<>();
+ imageConfigurationList.add(ImageConfiguration.builder()
+ .name("foo/bar:latest")
+ .build());
+
+ // When
+ assertThat(simpleDockerfileGenerator.isApplicable(imageConfigurationList)).isTrue();
+ }
+
+ @Test
+ @DisplayName("Dockerfile NOT present in project base directory, return false")
+ void whenDockerFileAbsentInProjectBaseDir_thenReturnFalse() throws IOException {
+ // Given
+ Files.delete(dockerFile.toPath());
+
+ // When + Then
+ assertThat(simpleDockerfileGenerator.isApplicable(Collections.emptyList())).isFalse();
+ }
+ }
+
+ @Nested
+ @DisplayName("customize")
+ class Customize {
+ @Test
+ @DisplayName("no existing ImageConfiguration, create opinionated ImageConfiguration for Dockerfile")
+ void whenNoExistingImageConfiguration_thenCreateImageConfiguration() {
+ List images = new ArrayList<>();
+
+ // When
+ List resolvedImages = simpleDockerfileGenerator.customize(images, false);
+ resolvedImages.forEach(i -> i.getBuild().initAndValidate());
+
+ // Then
+ assertThat(resolvedImages).isNotNull()
+ .singleElement()
+ .hasFieldOrPropertyWithValue("name", "%g/%a:%l")
+ .hasFieldOrPropertyWithValue("build.dockerFile", dockerFile)
+ .hasFieldOrPropertyWithValue("build.ports", Collections.singletonList("8080"));
+ }
+
+ @Test
+ @DisplayName("no existing ImageConfiguration and jkube.image.name property provided, create opinionated ImageConfiguration with configured name for Dockerfile")
+ void whenNoExistingImageConfigurationAndImageNamePropertyProvided_thenCreateImageConfiguration() {
+ List images = new ArrayList<>();
+ properties.put("jkube.image.name", "configured-via-jkube-image-name-property:latest");
+
+ // When
+ List resolvedImages = simpleDockerfileGenerator.customize(images, false);
+ resolvedImages.forEach(i -> i.getBuild().initAndValidate());
+
+ // Then
+ assertThat(resolvedImages).isNotNull()
+ .singleElement()
+ .hasFieldOrPropertyWithValue("name", "configured-via-jkube-image-name-property:latest")
+ .hasFieldOrPropertyWithValue("build.dockerFile", dockerFile)
+ .hasFieldOrPropertyWithValue("build.ports", Collections.singletonList("8080"));
+ }
+
+ @Test
+ @DisplayName("no existing ImageConfiguration and jkube.generator.name property provided, create opinionated ImageConfiguration with configured name for Dockerfile")
+ void whenNoExistingImageConfigurationAndGeneratorNamePropertyProvided_thenCreateImageConfiguration() {
+ List images = new ArrayList<>();
+ properties.put("jkube.generator.name", "configured-via-jkube-generator-name-property:latest");
+
+ // When
+ List resolvedImages = simpleDockerfileGenerator.customize(images, false);
+ resolvedImages.forEach(i -> i.getBuild().initAndValidate());
+
+ // Then
+ assertThat(resolvedImages).isNotNull()
+ .singleElement()
+ .hasFieldOrPropertyWithValue("name", "configured-via-jkube-generator-name-property:latest")
+ .hasFieldOrPropertyWithValue("build.dockerFile", dockerFile)
+ .hasFieldOrPropertyWithValue("build.ports", Collections.singletonList("8080"));
+ }
+
+ @Test
+ @DisplayName("ImageConfiguration without BuildConfig provided, merge opinionated ImageConfiguration for Dockerfile with provided ImageConfig")
+ void whenProvidedImageConfigurationWithNoBuild_shouldMergeOpinionatedWithExistingImageConfiguration() {
+ ImageConfiguration dummyImageConfiguration = ImageConfiguration.builder()
+ .name("imageconfiguration-no-build:latest")
+ .build();
+ List images = new ArrayList<>();
+ images.add(dummyImageConfiguration);
+
+ // When
+ List resolvedImages = simpleDockerfileGenerator.customize(images, false);
+ resolvedImages.forEach(i -> i.getBuild().initAndValidate());
+
+ // Then
+ assertThat(resolvedImages).isNotNull()
+ .singleElement()
+ .hasFieldOrPropertyWithValue("name", "imageconfiguration-no-build:latest")
+ .hasFieldOrPropertyWithValue("build.dockerFileFile", dockerFile)
+ .hasFieldOrPropertyWithValue("build.ports", Collections.singletonList("8080"));
+ }
+
+ @Test
+ @DisplayName("Valid ImageConfiguration already provided, then do not change provided ImageConfiguration")
+ void whenImageConfigurationProvided_thenDoNotModifyExistingImageConfiguration() {
+ ImageConfiguration dummyImageConfiguration = ImageConfiguration.builder()
+ .name("imageconfiguration-no-build:latest")
+ .build(BuildConfiguration.builder()
+ .from("foo/base:latest")
+ .port("8002")
+ .build())
+ .build();
+ List images = new ArrayList<>();
+ images.add(dummyImageConfiguration);
+
+ // When
+ List resolvedImages = simpleDockerfileGenerator.customize(images, false);
+ resolvedImages.forEach(i -> i.getBuild().initAndValidate());
+
+ // Then
+ assertThat(resolvedImages).isNotNull()
+ .singleElement()
+ .hasFieldOrPropertyWithValue("name", "imageconfiguration-no-build:latest")
+ .hasFieldOrPropertyWithValue("build.dockerFileFile", null)
+ .hasFieldOrPropertyWithValue("build.from", "foo/base:latest")
+ .hasFieldOrPropertyWithValue("build.ports", Collections.singletonList("8002"));
+ }
+ }
+}
diff --git a/jkube-kit/generator/dockerfile-simple/src/test/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileUtilTest.java b/jkube-kit/generator/dockerfile-simple/src/test/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileUtilTest.java
new file mode 100644
index 0000000000..ef62a6db16
--- /dev/null
+++ b/jkube-kit/generator/dockerfile-simple/src/test/java/org/eclipse/jkube/generator/dockerfile/simple/SimpleDockerfileUtilTest.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.jkube.generator.dockerfile.simple;
+
+import org.eclipse.jkube.kit.config.image.ImageConfiguration;
+import org.eclipse.jkube.kit.config.image.build.BuildConfiguration;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
+
+class SimpleDockerfileUtilTest {
+ @Nested
+ @DisplayName("isSimpleDockerfileMode")
+ class IsSimpleDockerFileMode {
+ @Test
+ @DisplayName("Dockerfile present in base directory, return true")
+ void whenDockerfilePresentInBaseDirectory_thenReturnTrue() {
+ // Given
+ File projectDir = new File(Objects.requireNonNull(getClass().getResource("/dummy-javaproject")).getFile());
+ // When
+ boolean result = SimpleDockerfileUtil.isSimpleDockerFileMode(projectDir);
+ // Then
+ assertThat(result).isTrue();
+ }
+
+ @Test
+ @DisplayName("Dockerfile absent in base directory, return false")
+ void whenNoDockerfilePresentInBaseDirectory_thenReturnFalse(@TempDir File temporaryFolder) {
+ assertThat(SimpleDockerfileUtil.isSimpleDockerFileMode(temporaryFolder)).isFalse();
+ }
+
+ @Test
+ @DisplayName("When project directory is null, return false")
+ void whenNullProjectBaseDirectory_thenReturnFalse() {
+ assertThat(SimpleDockerfileUtil.isSimpleDockerFileMode(null)).isFalse();
+ }
+ }
+
+ @Nested
+ @DisplayName("createSimpleDockerfileConfig")
+ class CreateSimpleDockerfileConfig {
+ @Test
+ @DisplayName("simple Dockerfile, should generate ImageConfiguration")
+ void simple() throws IOException {
+ // Given
+ File dockerFile = Files.createTempFile("Dockerfile", "-test").toFile();
+ // When
+ ImageConfiguration imageConfiguration1 = SimpleDockerfileUtil.createSimpleDockerfileConfig(dockerFile, null);
+ ImageConfiguration imageConfiguration2 = SimpleDockerfileUtil.createSimpleDockerfileConfig(dockerFile, "someImage:0.0.1");
+ // Then
+ assertThat(imageConfiguration1).isNotNull()
+ .hasFieldOrPropertyWithValue("name", "%g/%a:%l")
+ .extracting(ImageConfiguration::getBuild)
+ .extracting(BuildConfiguration::getDockerFileRaw)
+ .isEqualTo(dockerFile.getPath());
+ assertThat(imageConfiguration2).isNotNull()
+ .hasFieldOrPropertyWithValue("name", "someImage:0.0.1")
+ .extracting(ImageConfiguration::getBuild)
+ .extracting(BuildConfiguration::getDockerFileRaw)
+ .isEqualTo(dockerFile.getPath());
+ }
+
+ @Test
+ @DisplayName("Dockerfile with EXPOSE statement, then generated ImageConfiguration contains ports")
+ void exposeStatementsInDockerfileAddedAsPortsInImageConfiguration() {
+ // Given
+ File dockerFile = new File(Objects.requireNonNull(getClass().getResource("/Dockerfile_expose_ports")).getFile());
+ // When
+ ImageConfiguration imageConfiguration1 = SimpleDockerfileUtil.createSimpleDockerfileConfig(dockerFile, null);
+ // Then
+ assertThat(imageConfiguration1.getBuild().getDockerFileRaw()).isEqualTo(dockerFile.getPath());
+ assertThat(imageConfiguration1).isNotNull()
+ .hasFieldOrPropertyWithValue("name", "%g/%a:%l")
+ .extracting(ImageConfiguration::getBuild)
+ .extracting(BuildConfiguration::getPorts).isNotNull()
+ .asList()
+ .hasSize(5)
+ .containsExactly("80/tcp", "8080/udp", "80", "8080", "99/udp");
+ }
+ }
+
+ @Test
+ void addSimpleDockerfileConfig() throws IOException {
+ // Given
+ ImageConfiguration imageConfiguration = ImageConfiguration.builder()
+ .name("test-image")
+ .build();
+ File dockerFile = Files.createTempFile("Dockerfile", "-test").toFile();
+
+ // When
+ ImageConfiguration result = SimpleDockerfileUtil.addSimpleDockerfileConfig(imageConfiguration, dockerFile);
+
+ // Then
+ assertThat(result.getBuild()).isNotNull()
+ .extracting(BuildConfiguration::getDockerFileRaw)
+ .isEqualTo(dockerFile.getPath());
+ }
+
+ @Nested
+ @DisplayName("extractPorts")
+ class ExtractPorts {
+ @Test
+ @DisplayName("should throw exception on Invalid Dockerfile provided")
+ void fromInvalidDockerFile_shouldThrowException() {
+ assertThatIllegalArgumentException()
+ .isThrownBy(() -> SimpleDockerfileUtil.extractPorts(new File("iDoNotExist")))
+ .withMessage("Error in reading Dockerfile");
+ }
+
+ @Test
+ @DisplayName("should extract port numbers from EXPOSE statements in Dockerfile")
+ void fromDockerFileLines() {
+ // Given
+ List input1 = Arrays.asList(new String[]{"EXPOSE", "8080", "9090", "9999"} , new String[]{"EXPOSE", "9010"});
+ List input2 = Arrays.asList(new String[]{"EXPOSE", "9001"}, new String[]{"EXPOSE", null});
+ List input3 = Arrays.asList(new String[]{"EXPOSE", ""}, new String[]{"EXPOSE", "8001"});
+
+ // When
+ List result1 = SimpleDockerfileUtil.extractPorts(input1);
+ List result2 = SimpleDockerfileUtil.extractPorts(input2);
+ List result3 = SimpleDockerfileUtil.extractPorts(input3);
+
+ // Then
+ assertThat(result1).containsExactly("9090", "8080", "9999", "9010");
+ assertThat(result2).containsExactly("9001");
+ assertThat(result3).containsExactly("8001");
+ }
+ }
+}
diff --git a/jkube-kit/build/api/src/test/resources/docker/Dockerfile_expose_ports b/jkube-kit/generator/dockerfile-simple/src/test/resources/Dockerfile_expose_ports
similarity index 100%
rename from jkube-kit/build/api/src/test/resources/docker/Dockerfile_expose_ports
rename to jkube-kit/generator/dockerfile-simple/src/test/resources/Dockerfile_expose_ports
diff --git a/jkube-kit/build/api/src/test/resources/dummy-javaproject/Dockerfile b/jkube-kit/generator/dockerfile-simple/src/test/resources/dummy-javaproject/Dockerfile
similarity index 100%
rename from jkube-kit/build/api/src/test/resources/dummy-javaproject/Dockerfile
rename to jkube-kit/generator/dockerfile-simple/src/test/resources/dummy-javaproject/Dockerfile
diff --git a/jkube-kit/parent/pom.xml b/jkube-kit/parent/pom.xml
index 91e5f30d9c..a7b4edb0e0 100644
--- a/jkube-kit/parent/pom.xml
+++ b/jkube-kit/parent/pom.xml
@@ -250,6 +250,12 @@
${project.version}
+
+ org.eclipse.jkube
+ jkube-kit-generator-dockerfile-simple
+ ${project.version}
+
+
org.eclipse.jkube
jkube-kit-enricher-api
diff --git a/jkube-kit/pom.xml b/jkube-kit/pom.xml
index 3654da48bf..294932c054 100644
--- a/jkube-kit/pom.xml
+++ b/jkube-kit/pom.xml
@@ -47,6 +47,7 @@
generator/java-exec
generator/karaf
generator/webapp
+ generator/dockerfile-simple
enricher/api
enricher/generic
enricher/specific
diff --git a/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/Dockerfile b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/Dockerfile
new file mode 100644
index 0000000000..cc3f5db285
--- /dev/null
+++ b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/Dockerfile
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2019 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at:
+#
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+FROM busybox:latest
+EXPOSE 9080
\ No newline at end of file
diff --git a/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/invoker.properties b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/invoker.properties
new file mode 100644
index 0000000000..13ffb54f36
--- /dev/null
+++ b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/invoker.properties
@@ -0,0 +1,17 @@
+#
+# Copyright (c) 2019 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at:
+#
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+invoker.goals.1=clean k8s:resource
+invoker.mavenOpts=-Djkube.verbose -Djkube.offline=true
+invoker.debug=false
\ No newline at end of file
diff --git a/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/pom.xml b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/pom.xml
new file mode 100644
index 0000000000..902155ee86
--- /dev/null
+++ b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/pom.xml
@@ -0,0 +1,54 @@
+
+
+
+
+ 4.0.0
+
+ dockerfile-simple-generator-precedence-kubernetes
+ org.eclipse.jkube
+ 0.1-SNAPSHOT
+ jar
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.17
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ org.eclipse.jkube
+ kubernetes-maven-plugin
+ @jkube.version@
+
+
+
+
+
diff --git a/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/Application.java b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/Application.java
new file mode 100644
index 0000000000..75794b3b8d
--- /dev/null
+++ b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/Application.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.jkube.maven.sample.spring.boot;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/HelloController.java b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/HelloController.java
new file mode 100644
index 0000000000..945b2d95ab
--- /dev/null
+++ b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/HelloController.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.jkube.maven.sample.spring.boot;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class HelloController {
+
+ @RequestMapping("/")
+ public String index() {
+ return "Greetings from Spring Boot!!";
+ }
+
+}
diff --git a/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/verify.groovy b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/verify.groovy
new file mode 100644
index 0000000000..613b7fdfa7
--- /dev/null
+++ b/kubernetes-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/verify.groovy
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+import org.eclipse.jkube.maven.it.Verify
+
+var text = new File(basedir, "build.log").text
+assert text.contains("Running generator dockerfile-simple")
+
diff --git a/kubernetes-maven-plugin/plugin/pom.xml b/kubernetes-maven-plugin/plugin/pom.xml
index 6ee310a556..b938c8573d 100644
--- a/kubernetes-maven-plugin/plugin/pom.xml
+++ b/kubernetes-maven-plugin/plugin/pom.xml
@@ -71,6 +71,11 @@
jkube-kit-generator-java-exec
+
+ org.eclipse.jkube
+ jkube-kit-generator-dockerfile-simple
+
+
org.eclipse.jkube
jkube-kit-generator-karaf
diff --git a/kubernetes-maven-plugin/plugin/src/main/resources/META-INF/jkube/profiles-default.yml b/kubernetes-maven-plugin/plugin/src/main/resources/META-INF/jkube/profiles-default.yml
index 9dacc0a91b..10ba02b687 100644
--- a/kubernetes-maven-plugin/plugin/src/main/resources/META-INF/jkube/profiles-default.yml
+++ b/kubernetes-maven-plugin/plugin/src/main/resources/META-INF/jkube/profiles-default.yml
@@ -86,6 +86,7 @@
generator:
# The order given in "includes" is the order in which generators are called
includes:
+ - dockerfile-simple
- quarkus
- spring-boot
- thorntail-v2
@@ -118,6 +119,7 @@
generator:
# The order given in "includes" is the order in which generators are called
includes:
+ - dockerfile-simple
- spring-boot
- thorntail-v2
- wildfly-jar
diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java
index ef6431b14e..038b9d42c8 100644
--- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java
+++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java
@@ -84,6 +84,7 @@ void setUp(@TempDir Path temporaryFolder) throws Exception {
when(mavenProject.getCompileClasspathElements()).thenReturn(Collections.emptyList());
when(mavenProject.getDependencies()).thenReturn(Collections.emptyList());
when(mavenProject.getDevelopers()).thenReturn(Collections.emptyList());
+ when(mavenProject.getBasedir()).thenReturn(temporaryFolder.toFile());
when(mavenProject.getBuild().getDirectory()).thenReturn(targetDir.getAbsolutePath());
when(mavenProject.getBuild().getOutputDirectory()).thenReturn(targetDir.getAbsolutePath());
mavenSettings = mock(Settings.class);
diff --git a/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/Dockerfile b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/Dockerfile
new file mode 100644
index 0000000000..cc3f5db285
--- /dev/null
+++ b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/Dockerfile
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2019 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at:
+#
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+FROM busybox:latest
+EXPOSE 9080
\ No newline at end of file
diff --git a/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/invoker.properties b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/invoker.properties
new file mode 100644
index 0000000000..3c8670a0a2
--- /dev/null
+++ b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/invoker.properties
@@ -0,0 +1,17 @@
+#
+# Copyright (c) 2019 Red Hat, Inc.
+# This program and the accompanying materials are made
+# available under the terms of the Eclipse Public License 2.0
+# which is available at:
+#
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Red Hat, Inc. - initial API and implementation
+#
+
+invoker.goals.1=clean oc:resource
+invoker.mavenOpts=-Djkube.verbose -Djkube.offline=true
+invoker.debug=false
diff --git a/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/pom.xml b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/pom.xml
new file mode 100644
index 0000000000..94ff4b42c3
--- /dev/null
+++ b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/pom.xml
@@ -0,0 +1,54 @@
+
+
+
+
+ 4.0.0
+
+ dockerfile-simple-generator-precedence-openshift
+ org.eclipse.jkube
+ 0.1-SNAPSHOT
+ jar
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.17
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ org.eclipse.jkube
+ openshift-maven-plugin
+ @jkube.version@
+
+
+
+
+
diff --git a/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/Application.java b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/Application.java
new file mode 100644
index 0000000000..75794b3b8d
--- /dev/null
+++ b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/Application.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.jkube.maven.sample.spring.boot;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/HelloController.java b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/HelloController.java
new file mode 100644
index 0000000000..945b2d95ab
--- /dev/null
+++ b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/src/main/java/io/fabric8/maven/sample/spring/boot/HelloController.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.jkube.maven.sample.spring.boot;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class HelloController {
+
+ @RequestMapping("/")
+ public String index() {
+ return "Greetings from Spring Boot!!";
+ }
+
+}
diff --git a/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/verify.groovy b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/verify.groovy
new file mode 100644
index 0000000000..613b7fdfa7
--- /dev/null
+++ b/openshift-maven-plugin/it/src/it/dockerfile-simple-generator-precedence/verify.groovy
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at:
+ *
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+import org.eclipse.jkube.maven.it.Verify
+
+var text = new File(basedir, "build.log").text
+assert text.contains("Running generator dockerfile-simple")
+
diff --git a/openshift-maven-plugin/plugin/src/main/resources/META-INF/jkube/profiles-default.yml b/openshift-maven-plugin/plugin/src/main/resources/META-INF/jkube/profiles-default.yml
index c9123ed1f9..f203b6e58a 100644
--- a/openshift-maven-plugin/plugin/src/main/resources/META-INF/jkube/profiles-default.yml
+++ b/openshift-maven-plugin/plugin/src/main/resources/META-INF/jkube/profiles-default.yml
@@ -87,6 +87,7 @@
generator:
# The order given in "includes" is the order in which generators are called
includes:
+ - dockerfile-simple
- quarkus
- spring-boot
- thorntail-v2
@@ -119,6 +120,7 @@
generator:
# The order given in "includes" is the order in which generators are called
includes:
+ - dockerfile-simple
- spring-boot
- thorntail-v2
- wildfly-jar