Skip to content

Commit a359cda

Browse files
committed
fix (buildx) : Only add --config to buildx when config directory not empty
Signed-off-by: Rohan Kumar <[email protected]>
1 parent f7e1bca commit a359cda

File tree

3 files changed

+62
-5
lines changed

3 files changed

+62
-5
lines changed

doc/changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# ChangeLog
22

33
* **0.44-SNAPSHOT**:
4+
- Make `--config` from buildx command string generation optional ([1673](https://github.com/fabric8io/docker-maven-plugin/pull/1673)) @robfrank
45

56
* **0.43.1** (2023-07-28):
67
- Resolve registry auth URL by registry ID ([1688](https://github.com/fabric8io/docker-maven-plugin/issues/1688)) @wajda

src/main/java/io/fabric8/maven/docker/service/BuildXService.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,14 @@ protected <C> void useBuilder(ProjectPaths projectPaths, ImageConfiguration imag
6363
BuildDirs buildDirs = new BuildDirs(projectPaths, imageConfig.getName());
6464

6565
Path configPath = getDockerStateDir(imageConfig.getBuildConfiguration(), buildDirs);
66-
List<String> buildX = Arrays.asList("docker", "buildx");
66+
File[] configDirFiles = configPath.toFile().listFiles();
67+
List<String> buildX = new ArrayList<>();
68+
buildX.add("docker");
69+
if (configDirFiles != null && configDirFiles.length > 0) {
70+
buildX.add("--config");
71+
buildX.add(configPath.toString());
72+
}
73+
buildX.add("buildx");
6774

6875
String builderName = createBuilder(configPath, buildX, imageConfig, buildDirs);
6976
Path configJson = configPath.resolve("config.json");

src/test/java/io/fabric8/maven/docker/service/BuildXServiceTest.java

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package io.fabric8.maven.docker.service;
22

3+
import java.io.IOException;
4+
import java.nio.file.Files;
35
import java.util.Arrays;
46
import java.util.List;
57
import java.io.File;
6-
import java.nio.file.Path;
78
import java.nio.file.Paths;
89

9-
import org.junit.jupiter.api.Assertions;
10+
import org.apache.maven.plugin.MojoExecutionException;
1011
import org.junit.jupiter.api.BeforeEach;
1112
import org.junit.jupiter.api.Test;
1213
import org.junit.jupiter.api.extension.ExtendWith;
1314

15+
import org.junit.jupiter.api.io.TempDir;
16+
import org.mockito.ArgumentCaptor;
1417
import org.mockito.InjectMocks;
1518
import org.mockito.Mock;
1619
import org.mockito.Spy;
@@ -28,6 +31,11 @@
2831
import io.fabric8.maven.docker.config.BuildImageConfiguration;
2932
import io.fabric8.maven.docker.config.ImageConfiguration;
3033

34+
import static org.junit.jupiter.api.Assertions.assertEquals;
35+
import static org.mockito.ArgumentMatchers.any;
36+
import static org.mockito.ArgumentMatchers.anyString;
37+
import static org.mockito.ArgumentMatchers.eq;
38+
3139
@ExtendWith(MockitoExtension.class)
3240
@MockitoSettings(strictness = Strictness.WARN)
3341
class BuildXServiceTest {
@@ -103,14 +111,55 @@ void testBuildForeignPlatforms() throws Exception {
103111
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
104112
}
105113

106-
private void givenAnImageConfiguration(String... platforms) {
114+
@Test
115+
void useBuilder_whenConfigProvided_thenAddConfigOptionToBuildX(@TempDir File temporaryFolder) throws MojoExecutionException, IOException {
116+
// Given
117+
File dockerBuildKitToml = new File(temporaryFolder, "buildkitd.toml");
118+
Files.createFile(dockerBuildKitToml.toPath());
119+
BuildXService.Builder<File> builder = Mockito.mock(BuildXService.Builder.class);
120+
Mockito.doReturn(temporaryFolder.toPath()).when(buildx).getDockerStateDir(Mockito.any(), Mockito.any());
121+
givenAnImageConfiguration(new BuildXConfiguration.Builder()
122+
.dockerStateDir(temporaryFolder.getAbsolutePath())
123+
.platforms(Arrays.asList(FOREIGN1, FOREIGN2))
124+
.build());
125+
126+
// When
127+
buildx.useBuilder(projectPaths, imageConfig, configuredRegistry, authConfig, buildArchive, builder);
128+
129+
// Then
130+
ArgumentCaptor<List<String>> buildXArgCaptor = ArgumentCaptor.forClass(List.class);
131+
Mockito.verify(builder).useBuilder(buildXArgCaptor.capture(), anyString(), any(), eq(imageConfig), eq(configuredRegistry), eq(buildArchive));
132+
assertEquals(Arrays.asList("docker", "--config", temporaryFolder.getAbsolutePath(), "buildx"), buildXArgCaptor.getValue());
133+
}
134+
135+
@Test
136+
void useBuilder_whenNoConfigProvided_thenDoNotAddConfigOptionToBuildX() throws MojoExecutionException {
137+
// Given
138+
BuildXService.Builder<File> builder = Mockito.mock(BuildXService.Builder.class);
139+
givenAnImageConfiguration(new BuildXConfiguration.Builder()
140+
.platforms(Arrays.asList(FOREIGN1, FOREIGN2))
141+
.build());
142+
143+
// When
144+
buildx.useBuilder(projectPaths, imageConfig, configuredRegistry, authConfig, buildArchive, builder);
145+
146+
// Then
147+
ArgumentCaptor<List<String>> buildXArgCaptor = ArgumentCaptor.forClass(List.class);
148+
Mockito.verify(builder).useBuilder(buildXArgCaptor.capture(), anyString(), any(), eq(imageConfig), eq(configuredRegistry), eq(buildArchive));
149+
assertEquals(Arrays.asList("docker", "buildx"), buildXArgCaptor.getValue());
150+
}
107151

152+
private void givenAnImageConfiguration(String... platforms) {
108153
final BuildXConfiguration buildxConfig = new BuildXConfiguration.Builder()
109154
.platforms(Arrays.asList(platforms))
110155
.build();
111156

157+
givenAnImageConfiguration(buildxConfig);
158+
}
159+
160+
private void givenAnImageConfiguration(BuildXConfiguration buildXConfiguration) {
112161
final BuildImageConfiguration buildImageConfig = new BuildImageConfiguration.Builder()
113-
.buildx(buildxConfig)
162+
.buildx(buildXConfiguration)
114163
.build();
115164

116165
imageConfig = new ImageConfiguration.Builder()

0 commit comments

Comments
 (0)