From 3f9f519a6a8582919bc63c85ea9bf044c259242c Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Thu, 1 Oct 2020 12:32:24 +0530 Subject: [PATCH] Fix #386: final fat jar is not updated in docker build directory Updated code in JKubeBuildTarArchiver to allow copying files when already existing. --- CHANGELOG.md | 1 + .../api/assembly/JKubeBuildTarArchiver.java | 9 +++---- .../api/assembly/AssemblyManagerTest.java | 25 +++++++++++++++++++ .../ContainerEnvJavaOptionsMergeEnricher.java | 1 + .../ContainerEnvJavaOptionsMergeTest.java | 18 +++++++++++++ 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59ac155eec..3953503525 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Usage: * Fix #358: Prometheus is enabled by default, opt-out via AB_PROMETHEUS_OFF required to disable (like in FMP) * Fix #365: jkube.watch.postGoal property/parameter/configuration is ignored * Fix #384: Enricher defined Container environment variables get merged with vars defined in Image Build Configuration +* Fix #386: final fat jar is not updated in docker build directory * Fix #385: WildFly Bootable JAR - Add native support for slim Bootable JAR * Fix #415: Fixed resource validation for new json-schema-validator version * Fix #356: Add further support for tls termination and insecureEdgeTerminationPolicy in pom.xml diff --git a/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/JKubeBuildTarArchiver.java b/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/JKubeBuildTarArchiver.java index e231ec4e54..8f4625d358 100644 --- a/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/JKubeBuildTarArchiver.java +++ b/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/JKubeBuildTarArchiver.java @@ -61,17 +61,15 @@ public File createArchive(File inputDirectory, BuildDirs buildDirs, ArchiveCompr FileUtil.createDirectory(new File(inputDirectory, parentDirectory.getPath())); } File targetFile = new File(inputDirectory, targetFileName); - // Check whether file is not already created. - if (!targetFile.exists()) { - FileUtils.copyFile(srcFile, targetFile); + if (!srcFile.equals(targetFile)) { + FileUtil.copy(srcFile, targetFile); files.add(targetFile); } } } List fileListToAddInTarball = new ArrayList<>(); - for (int i = 0; i < files.size(); i++) { - File currentFile = files.get(i); + for (File currentFile : files) { if (filesNamesToExclude.contains(currentFile.getName())) { continue; } @@ -80,5 +78,4 @@ public File createArchive(File inputDirectory, BuildDirs buildDirs, ArchiveCompr return JKubeTarArchiver.createTarBall(outputFile, inputDirectory, fileListToAddInTarball, fileModeMap, compression); } - } \ No newline at end of file diff --git a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManagerTest.java b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManagerTest.java index 9b606bb114..b01fb5fdb9 100644 --- a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManagerTest.java +++ b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManagerTest.java @@ -14,9 +14,11 @@ package org.eclipse.jkube.kit.build.api.assembly; import java.io.File; import java.io.FileNotFoundException; +import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; +import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.Properties; @@ -290,6 +292,29 @@ public void testCreateDockerTarArchiveWithoutDockerfileAndFinalCustomizer() thro assertTrue(customized.get()); } + @Test + public void testAlreadyExistingFileInAssemblyGetsOverwritten() throws IOException { + final JKubeConfiguration jKubeBuildContext = createNoDockerfileConfiguration(); + final BuildConfiguration jKubeBuildConfiguration = BuildConfiguration.builder().build(); + File finalArtifactFile = jKubeBuildContext.getProject().getArtifact(); + File dockerArchiveFile = null; + + // When + dockerArchiveFile = assemblyManager.createDockerTarArchive("test-image", jKubeBuildContext, jKubeBuildConfiguration, prefixedLogger, null); + // Modify file contents + FileWriter fileWriter = new FileWriter(finalArtifactFile); + fileWriter.write("Modified content"); + fileWriter.close(); + dockerArchiveFile = assemblyManager.createDockerTarArchive("test-image", jKubeBuildContext, jKubeBuildConfiguration, prefixedLogger, null); + + // Then + assertNotNull(dockerArchiveFile); + assertTrue(dockerArchiveFile.exists()); + File copiedFile = new File(temporaryFolder.getRoot().toPath().resolve("target/docker/test-image/build/maven/").toFile(), "test-0.1.0.jar"); + assertTrue(copiedFile.exists()); + assertEquals("Modified content", new String(Files.readAllBytes(copiedFile.toPath()))); + } + private JKubeConfiguration createNoDockerfileConfiguration() throws IOException { File targetFolder = temporaryFolder.newFolder("target"); File finalArtifactFile = new File(targetFolder, "test-0.1.0.jar"); diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeEnricher.java index 4689ea897b..0a4b565850 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeEnricher.java @@ -77,6 +77,7 @@ public ContainerEnvJavaOptionsMergeVisitor(List imageConfigu public void visit(ContainerBuilder containerBuilder) { imageConfigurations.stream() .filter(ic -> ImageEnricher.containerImageName(ic).equals(containerBuilder.getImage())) + .filter(ic -> ic.getBuild().getEnv() != null) .filter(ic -> !ic.getBuild().getEnv().isEmpty()) .filter(ic -> ic.getBuild().getEnv().containsKey(ENV_KEY)) .findFirst() diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeTest.java index a88768df92..defde4274c 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeTest.java @@ -104,6 +104,24 @@ public void enrichWithDisabledShouldDoNothing() { .containsOnly(new EnvVar("JAVA_OPTIONS", "val-from-container", null)); } + @Test + public void enrichWithNullEnvInImageConfiguration() { + // Given + // @formatter:off + new Expectations() {{ + imageConfiguration.getName(); result = "the-image:latest"; minTimes = 0; + imageConfiguration.getBuild().getEnv(); result = null; + }}; + // @formatter:on + // When + containerEnvJavaOptionsMergeEnricher.enrich(PlatformMode.kubernetes, kubernetesListBuilder); + // Then + assertThat(containerList(kubernetesListBuilder)) + .flatExtracting("env") + .hasSize(1) + .containsOnly(new EnvVar("JAVA_OPTIONS", "val-from-container", null)); + } + static List containerList(KubernetesListBuilder kubernetesListBuilder) { return kubernetesListBuilder.build().getItems().stream() .map(Deployment.class::cast)