-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApplication.java
More file actions
93 lines (83 loc) · 2.7 KB
/
Application.java
File metadata and controls
93 lines (83 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package software.xdev;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.slf4j.LoggerFactory;
import software.xdev.testcontainers.imagebuilder.AdvancedImageFromDockerFile;
import software.xdev.testcontainers.imagebuilder.compat.DockerfileCOPYParentsEmulator;
import software.xdev.testcontainers.imagebuilder.transfer.fcm.FileLinesContentModifier;
public final class Application
{
@SuppressWarnings({"java:S106", "PMD.SystemPrintln"}) // Just a demo
public static void main(final String[] args)
{
final AdvancedImageFromDockerFile builder = new AdvancedImageFromDockerFile("dynamically-built")
.withLoggerForBuild(LoggerFactory.getLogger("container.build"))
.withPostGitIgnoreLines(
// Ignore files that aren't related to the built code
".git/**",
".config/**",
".github/**",
".idea/**",
".run/**",
".md",
".cmd",
"/renovate.json5",
"testcontainers-advanced-imagebuilder/**",
"testcontainers-advanced-imagebuilder-demo/**"
)
.withDockerFilePath(Paths.get("../testcontainers-advanced-imagebuilder-demo/Dockerfile"))
.withBaseDir(Paths.get("../"))
.withDockerFileLinesModifier(new DockerfileCOPYParentsEmulator())
// Only copy the required maven modules and remove the not required ones
.withTransferArchiveTARCompressorCustomizer(c -> c.withContentModifier(
new FileLinesContentModifier()
{
@Override
public boolean shouldApply(
final Path sourcePath,
final String targetPath,
final TarArchiveEntry tarArchiveEntry)
{
return "pom.xml".equals(targetPath);
}
@Override
public List<String> modify(
final List<String> lines,
final Path sourcePath,
final String targetPath,
final TarArchiveEntry tarArchiveEntry)
{
return lines.stream()
// Only keep the dummy-app submodule as this is only needed for building
.filter(s -> !(s.contains("<module>testcontainers-advanced-imagebuilder")
&& !s.contains("<module>testcontainers-advanced-imagebuilder-dummy-app")))
.toList();
}
@Override
public boolean isIdentical(final List<String> original, final List<String> created)
{
return original.size() == created.size();
}
}
));
final String imageName;
try
{
imageName = builder.get(5, TimeUnit.MINUTES);
}
catch(final TimeoutException e)
{
System.out.println("Timed out: " + e.getMessage());
System.exit(1);
return;
}
System.out.println("Successfully build " + imageName);
}
private Application()
{
}
}