Skip to content

Commit 3a2462c

Browse files
authored
Ensure that ParsedDockerfile supports platform args (#2780)
1 parent fe2102a commit 3a2462c

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

core/src/main/java/org/testcontainers/images/ParsedDockerfile.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
@Slf4j
2222
public class ParsedDockerfile {
2323

24-
private static final Pattern FROM_LINE_PATTERN = Pattern.compile("FROM ([^\\s]+).*");
24+
private static final Pattern FROM_LINE_PATTERN = Pattern.compile("FROM (?<arg>--[^\\s]+\\s)*(?<image>[^\\s]+).*", Pattern.CASE_INSENSITIVE);
2525

2626
private final Path dockerFilePath;
2727

@@ -57,7 +57,7 @@ private void parse(List<String> lines) {
5757
dependencyImageNames = lines.stream()
5858
.map(FROM_LINE_PATTERN::matcher)
5959
.filter(Matcher::matches)
60-
.map(matcher -> matcher.group(1))
60+
.map(matcher -> matcher.group("image"))
6161
.collect(Collectors.toSet());
6262

6363
if (!dependencyImageNames.isEmpty()) {

core/src/test/java/org/testcontainers/images/ParsedDockerfileTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ public void doesSimpleParsing() {
1616
assertEquals("extracts a single image name", Sets.newHashSet("someimage"), parsedDockerfile.getDependencyImageNames());
1717
}
1818

19+
@Test
20+
public void isCaseInsensitive() {
21+
final ParsedDockerfile parsedDockerfile = new ParsedDockerfile(asList("from someimage", "RUN something"));
22+
assertEquals("extracts a single image name", Sets.newHashSet("someimage"), parsedDockerfile.getDependencyImageNames());
23+
}
24+
1925
@Test
2026
public void handlesTags() {
2127
final ParsedDockerfile parsedDockerfile = new ParsedDockerfile(asList("FROM someimage:tag", "RUN something"));
@@ -40,6 +46,18 @@ public void ignoringBuildStageNames() {
4046
assertEquals("ignores build stage names and allows multiple images to be extracted", Sets.newHashSet("someimage", "nextimage"), parsedDockerfile.getDependencyImageNames());
4147
}
4248

49+
@Test
50+
public void ignoringPlatformArgs() {
51+
final ParsedDockerfile parsedDockerfile = new ParsedDockerfile(asList("FROM --platform=linux/amd64 someimage", "RUN something"));
52+
assertEquals("ignores platform args", Sets.newHashSet("someimage"), parsedDockerfile.getDependencyImageNames());
53+
}
54+
55+
@Test
56+
public void ignoringExtraPlatformArgs() {
57+
final ParsedDockerfile parsedDockerfile = new ParsedDockerfile(asList("FROM --platform=linux/amd64 --somethingelse=value someimage", "RUN something"));
58+
assertEquals("ignores platform args", Sets.newHashSet("someimage"), parsedDockerfile.getDependencyImageNames());
59+
}
60+
4361
@Test
4462
public void handlesGracefullyIfNoFromLine() {
4563
final ParsedDockerfile parsedDockerfile = new ParsedDockerfile(asList("RUN something", "# is this even a valid Dockerfile?"));

0 commit comments

Comments
 (0)