From f457ea912c24c412803546a37bcc99304278dd7c Mon Sep 17 00:00:00 2001 From: Tobias Stadler Date: Sat, 10 Aug 2019 12:13:41 +0200 Subject: [PATCH] Relax targetDir requirements (#1244) Signed-off-by: Tobias Stadler --- .../maven/docker/assembly/DockerFileBuilder.java | 6 ++++-- .../maven/docker/assembly/DockerFileBuilderTest.java | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/fabric8/maven/docker/assembly/DockerFileBuilder.java b/src/main/java/io/fabric8/maven/docker/assembly/DockerFileBuilder.java index 12550c571..12cb25614 100644 --- a/src/main/java/io/fabric8/maven/docker/assembly/DockerFileBuilder.java +++ b/src/main/java/io/fabric8/maven/docker/assembly/DockerFileBuilder.java @@ -23,6 +23,8 @@ public class DockerFileBuilder { private static final Joiner JOIN_ON_COMMA = Joiner.on("\",\""); + private static final Pattern ENV_VAR_PATTERN = Pattern.compile("^\\$(\\{[a-zA-Z0-9_]+\\}|[a-zA-Z0-9_]+).*"); + // Base image to use as from private String baseImage; @@ -370,9 +372,9 @@ public DockerFileBuilder workdir(String workdir) { public DockerFileBuilder basedir(String dir) { if (dir != null) { - if (!dir.startsWith("/")) { + if (!dir.startsWith("/") && !ENV_VAR_PATTERN.matcher(dir).matches()) { throw new IllegalArgumentException("'basedir' must be an absolute path starting with / (and not " + - "'" + basedir + "')"); + "'" + basedir + "') or start with an environment variable"); } basedir = dir; } diff --git a/src/test/java/io/fabric8/maven/docker/assembly/DockerFileBuilderTest.java b/src/test/java/io/fabric8/maven/docker/assembly/DockerFileBuilderTest.java index f35095612..9f5c0df6f 100644 --- a/src/test/java/io/fabric8/maven/docker/assembly/DockerFileBuilderTest.java +++ b/src/test/java/io/fabric8/maven/docker/assembly/DockerFileBuilderTest.java @@ -252,6 +252,16 @@ public void testExportBaseDir() { assertFalse(new DockerFileBuilder().baseImage("java").exportTargetDir(false).basedir("/export").content().contains("/export")); } + @Test + public void testTargetDirStartsWithEnvVar() { + assertTrue(new DockerFileBuilder().basedir("${FOO}").content().contains("${FOO}")); + assertTrue(new DockerFileBuilder().basedir("$FOO").content().contains("$FOO")); + assertTrue(new DockerFileBuilder().basedir("${FOO}/").content().contains("${FOO}")); + assertTrue(new DockerFileBuilder().basedir("$FOO/").content().contains("$FOO")); + assertTrue(new DockerFileBuilder().basedir("${FOO}/bar").content().contains("${FOO}/bar")); + assertTrue(new DockerFileBuilder().basedir("$FOO/bar").content().contains("$FOO/bar")); + } + @Test public void testDockerFileKeywords() { StringBuilder b = new StringBuilder();