|
32 | 32 | import java.nio.file.Path; |
33 | 33 | import java.util.Collections; |
34 | 34 | import java.util.HashMap; |
| 35 | +import java.util.LinkedHashSet; |
35 | 36 | import java.util.Map; |
36 | 37 | import java.util.Optional; |
37 | 38 | import java.util.Set; |
| 39 | +import java.util.function.Consumer; |
38 | 40 | import java.util.zip.GZIPOutputStream; |
39 | 41 |
|
40 | 42 | @Slf4j |
@@ -62,6 +64,8 @@ public class ImageFromDockerfile |
62 | 64 |
|
63 | 65 | private Optional<String> target = Optional.empty(); |
64 | 66 |
|
| 67 | + private final Set<Consumer<BuildImageCmd>> buildImageCmdModifiers = new LinkedHashSet<>(); |
| 68 | + |
65 | 69 | private Set<String> dependencyImageNames = Collections.emptySet(); |
66 | 70 |
|
67 | 71 | public ImageFromDockerfile() { |
@@ -180,6 +184,7 @@ protected void configure(BuildImageCmd buildImageCmd) { |
180 | 184 |
|
181 | 185 | this.buildArgs.forEach(buildImageCmd::withBuildArg); |
182 | 186 | this.target.ifPresent(buildImageCmd::withTarget); |
| 187 | + this.buildImageCmdModifiers.forEach(hook -> hook.accept(buildImageCmd)); |
183 | 188 | } |
184 | 189 |
|
185 | 190 | private void prePullDependencyImages(Set<String> imagesToPull) { |
@@ -248,4 +253,16 @@ public ImageFromDockerfile withDockerfile(Path dockerfile) { |
248 | 253 | this.dockerfile = Optional.of(dockerfile); |
249 | 254 | return this; |
250 | 255 | } |
| 256 | + |
| 257 | + /** |
| 258 | + * Allow low level modifications of {@link BuildImageCmd}. |
| 259 | + * Warning: this does expose the underlying docker-java API so might change outside of our control. |
| 260 | + * |
| 261 | + * @param modifier {@link Consumer} of {@link BuildImageCmd}. |
| 262 | + * @return this |
| 263 | + */ |
| 264 | + public ImageFromDockerfile withBuildImageCmdModifier(Consumer<BuildImageCmd> modifier) { |
| 265 | + this.buildImageCmdModifiers.add(modifier); |
| 266 | + return this; |
| 267 | + } |
251 | 268 | } |
0 commit comments