Skip to content

Commit

Permalink
Fix eclipse-jkube#386: final fat jar is not updated in docker build d…
Browse files Browse the repository at this point in the history
…irectory

Updated code in JKubeBuildTarArchiver to allow copying files when already existing.
  • Loading branch information
rohanKanojia committed Oct 5, 2020
1 parent e9468c1 commit 3f9f519
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<File> 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;
}
Expand All @@ -80,5 +78,4 @@ public File createArchive(File inputDirectory, BuildDirs buildDirs, ArchiveCompr

return JKubeTarArchiver.createTarBall(outputFile, inputDirectory, fileListToAddInTarball, fileModeMap, compression);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ public ContainerEnvJavaOptionsMergeVisitor(List<ImageConfiguration> 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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Container> containerList(KubernetesListBuilder kubernetesListBuilder) {
return kubernetesListBuilder.build().getItems().stream()
.map(Deployment.class::cast)
Expand Down

0 comments on commit 3f9f519

Please sign in to comment.