Skip to content

Commit

Permalink
Merge 5eb4594 into f228f64
Browse files Browse the repository at this point in the history
  • Loading branch information
tadgh authored Nov 6, 2023
2 parents f228f64 + 5eb4594 commit 2c48d52
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 13 deletions.
1 change: 1 addition & 0 deletions doc/changelog.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# ChangeLog
* **0.44-SNAPSHOT**:
- Add new option "useDefaultExclusion" for build configuration to handle exclusion of hidden files ([1708](https://github.com/fabric8io/docker-maven-plugin/issues/1708))
- The <noCache> option is now propagated down to the buildx command, if it is set in the <build> section. ([1717](https://github.com/fabric8io/docker-maven-plugin/pull/1717))

* **0.43.4** (2023-08-18):
- Always pass `--config` option for latest versions of Docker CLI ([1701](https://github.com/fabric8io/docker-maven-plugin/issues/1701))
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/io/fabric8/maven/docker/config/ConfigHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,19 @@ private static void verifyImageNames(List<ImageConfiguration> ret) {
}
}

public static boolean isNoCache(ImageConfiguration imageConfig) {
String noCache = System.getProperty("docker.noCache");
if (noCache == null) {
noCache = System.getProperty("docker.nocache");
}
if (noCache != null) {
return noCache.length() == 0 || Boolean.valueOf(noCache);
} else {
BuildImageConfiguration buildConfig = imageConfig.getBuildConfiguration();
return buildConfig.noCache();
}
}


// =========================================================================

Expand Down
15 changes: 2 additions & 13 deletions src/main/java/io/fabric8/maven/docker/service/BuildService.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import io.fabric8.maven.docker.config.AssemblyConfiguration;
import io.fabric8.maven.docker.config.BuildImageConfiguration;
import io.fabric8.maven.docker.config.CleanupMode;
import io.fabric8.maven.docker.config.ConfigHelper;
import io.fabric8.maven.docker.config.ImageConfiguration;
import io.fabric8.maven.docker.model.ImageArchiveManifest;
import io.fabric8.maven.docker.model.ImageArchiveManifestEntry;
Expand Down Expand Up @@ -68,7 +69,7 @@ public void buildImage(ImageConfiguration imageConfig, ImagePullManager imagePul
autoPullCacheFromImage(imageConfig, imagePullManager, buildContext);
}

buildImage(imageConfig, buildContext.getMojoParameters(), checkForNocache(imageConfig), checkForSquash(imageConfig), addBuildArgs(buildContext), buildArchiveFile);
buildImage(imageConfig, buildContext.getMojoParameters(), ConfigHelper.isNoCache(imageConfig), checkForSquash(imageConfig), addBuildArgs(buildContext), buildArchiveFile);
}

/**
Expand Down Expand Up @@ -478,18 +479,6 @@ private void removeImage(String oldImageName, String oldImageId, CleanupMode cle
}
}

private boolean checkForNocache(ImageConfiguration imageConfig) {
String noCache = System.getProperty("docker.noCache");
if (noCache == null) {
noCache = System.getProperty("docker.nocache");
}
if (noCache != null) {
return noCache.length() == 0 || Boolean.valueOf(noCache);
} else {
BuildImageConfiguration buildConfig = imageConfig.getBuildConfiguration();
return buildConfig.noCache();
}
}

private boolean checkForSquash(ImageConfiguration imageConfig) {
String squash = System.getProperty("docker.squash");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import io.fabric8.maven.docker.config.AttestationConfiguration;
import io.fabric8.maven.docker.config.BuildImageConfiguration;
import io.fabric8.maven.docker.config.BuildXConfiguration;
import io.fabric8.maven.docker.config.ConfigHelper;
import io.fabric8.maven.docker.config.ImageConfiguration;
import io.fabric8.maven.docker.util.EnvUtil;
import io.fabric8.maven.docker.util.ImageName;
Expand Down Expand Up @@ -170,6 +171,9 @@ protected void buildX(List<String> buildX, String builderName, BuildDirs buildDi
cmdLine.add(key + '=' + value);
});
}
if (ConfigHelper.isNoCache(imageConfig)) {
cmdLine.add("--no-cache");
}

AttestationConfiguration attestations = buildConfiguration.getBuildX().getAttestations();
if (attestations != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import io.fabric8.maven.docker.config.ImageConfiguration;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
Expand Down Expand Up @@ -117,6 +118,34 @@ void testBuildNativePlatformWithForeign() throws Exception {
verifyBuildXPlatforms(NATIVE);
}

@Test
void testNoCacheIsPropagatedToBuildx(@TempDir File temporaryFolder) throws Exception {

//Given
buildNoCacheConfigUsingBuildx(temporaryFolder);

// When
buildx.build(projectPaths, imageConfig, configuredRegistry, authConfigList, buildArchive);

//Then
verifyBuildXArgumentPresentInExec("--no-cache");
}

private void buildNoCacheConfigUsingBuildx(File temporaryFolder) {
BuildXConfiguration buildXConfiguration = new BuildXConfiguration.Builder()
.dockerStateDir(temporaryFolder.getAbsolutePath())
.platforms(Arrays.asList(NATIVE))
.build();
final BuildImageConfiguration buildImageConfig = new BuildImageConfiguration.Builder()
.buildx(buildXConfiguration)
.noCache(true)
.build();
imageConfig = new ImageConfiguration.Builder()
.name("build-image")
.buildConfig(buildImageConfig)
.build();
}

@Test
void testBuildForeignPlatforms() throws Exception {
givenAnImageConfiguration(FOREIGN1, FOREIGN2);
Expand Down Expand Up @@ -198,4 +227,12 @@ private void verifyBuildXPlatforms(String... platforms) throws Exception {
Mockito.verify(buildx).buildX(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(),
Mockito.argThat(l -> expect.equals(l)), Mockito.any(), Mockito.any());
}

private void verifyBuildXArgumentPresentInExec(String... args) throws Exception{
ArgumentCaptor<List<String>> buildXArgCaptor = ArgumentCaptor.forClass(List.class);
Mockito.verify(exec).process(buildXArgCaptor.capture());
for (String arg: args) {
assertTrue(buildXArgCaptor.getValue().stream().anyMatch(passedArgument -> passedArgument.equalsIgnoreCase(arg)));
}
}
}

0 comments on commit 2c48d52

Please sign in to comment.