Skip to content

Commit

Permalink
fix (buildx) : Only add --config to buildx when config directory not …
Browse files Browse the repository at this point in the history
…empty

Signed-off-by: Rohan Kumar <rohaan@redhat.com>
  • Loading branch information
rohanKanojia committed Jul 28, 2023
1 parent f7e1bca commit a359cda
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 5 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**:
- Make `--config` from buildx command string generation optional ([1673](https://github.com/fabric8io/docker-maven-plugin/pull/1673)) @robfrank

* **0.43.1** (2023-07-28):
- Resolve registry auth URL by registry ID ([1688](https://github.com/fabric8io/docker-maven-plugin/issues/1688)) @wajda
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,14 @@ protected <C> void useBuilder(ProjectPaths projectPaths, ImageConfiguration imag
BuildDirs buildDirs = new BuildDirs(projectPaths, imageConfig.getName());

Path configPath = getDockerStateDir(imageConfig.getBuildConfiguration(), buildDirs);
List<String> buildX = Arrays.asList("docker", "buildx");
File[] configDirFiles = configPath.toFile().listFiles();
List<String> buildX = new ArrayList<>();
buildX.add("docker");
if (configDirFiles != null && configDirFiles.length > 0) {
buildX.add("--config");
buildX.add(configPath.toString());
}
buildX.add("buildx");

String builderName = createBuilder(configPath, buildX, imageConfig, buildDirs);
Path configJson = configPath.resolve("config.json");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package io.fabric8.maven.docker.service;

import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.List;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

import org.junit.jupiter.api.Assertions;
import org.apache.maven.plugin.MojoExecutionException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

import org.junit.jupiter.api.io.TempDir;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
Expand All @@ -28,6 +31,11 @@
import io.fabric8.maven.docker.config.BuildImageConfiguration;
import io.fabric8.maven.docker.config.ImageConfiguration;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;

@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.WARN)
class BuildXServiceTest {
Expand Down Expand Up @@ -103,14 +111,55 @@ void testBuildForeignPlatforms() throws Exception {
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any());
}

private void givenAnImageConfiguration(String... platforms) {
@Test
void useBuilder_whenConfigProvided_thenAddConfigOptionToBuildX(@TempDir File temporaryFolder) throws MojoExecutionException, IOException {
// Given
File dockerBuildKitToml = new File(temporaryFolder, "buildkitd.toml");
Files.createFile(dockerBuildKitToml.toPath());
BuildXService.Builder<File> builder = Mockito.mock(BuildXService.Builder.class);
Mockito.doReturn(temporaryFolder.toPath()).when(buildx).getDockerStateDir(Mockito.any(), Mockito.any());
givenAnImageConfiguration(new BuildXConfiguration.Builder()
.dockerStateDir(temporaryFolder.getAbsolutePath())
.platforms(Arrays.asList(FOREIGN1, FOREIGN2))
.build());

// When
buildx.useBuilder(projectPaths, imageConfig, configuredRegistry, authConfig, buildArchive, builder);

// Then
ArgumentCaptor<List<String>> buildXArgCaptor = ArgumentCaptor.forClass(List.class);
Mockito.verify(builder).useBuilder(buildXArgCaptor.capture(), anyString(), any(), eq(imageConfig), eq(configuredRegistry), eq(buildArchive));
assertEquals(Arrays.asList("docker", "--config", temporaryFolder.getAbsolutePath(), "buildx"), buildXArgCaptor.getValue());
}

@Test
void useBuilder_whenNoConfigProvided_thenDoNotAddConfigOptionToBuildX() throws MojoExecutionException {
// Given
BuildXService.Builder<File> builder = Mockito.mock(BuildXService.Builder.class);
givenAnImageConfiguration(new BuildXConfiguration.Builder()
.platforms(Arrays.asList(FOREIGN1, FOREIGN2))
.build());

// When
buildx.useBuilder(projectPaths, imageConfig, configuredRegistry, authConfig, buildArchive, builder);

// Then
ArgumentCaptor<List<String>> buildXArgCaptor = ArgumentCaptor.forClass(List.class);
Mockito.verify(builder).useBuilder(buildXArgCaptor.capture(), anyString(), any(), eq(imageConfig), eq(configuredRegistry), eq(buildArchive));
assertEquals(Arrays.asList("docker", "buildx"), buildXArgCaptor.getValue());
}

private void givenAnImageConfiguration(String... platforms) {
final BuildXConfiguration buildxConfig = new BuildXConfiguration.Builder()
.platforms(Arrays.asList(platforms))
.build();

givenAnImageConfiguration(buildxConfig);
}

private void givenAnImageConfiguration(BuildXConfiguration buildXConfiguration) {
final BuildImageConfiguration buildImageConfig = new BuildImageConfiguration.Builder()
.buildx(buildxConfig)
.buildx(buildXConfiguration)
.build();

imageConfig = new ImageConfiguration.Builder()
Expand Down

0 comments on commit a359cda

Please sign in to comment.