diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java b/docker-java-core/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java index 752935e19..763496405 100644 --- a/docker-java-core/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java +++ b/docker-java-core/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java @@ -85,7 +85,7 @@ public Iterable getStatements() throws IOException { public List getIgnores() throws IOException { List ignores = new ArrayList<>(); - File dockerIgnoreFile = new File(baseDirectory, ".dockerignore"); + File dockerIgnoreFile = getDockerIgnoreFile(); if (dockerIgnoreFile.exists()) { int lineNumber = 0; List dockerIgnoreFileContent = FileUtils.readLines(dockerIgnoreFile); @@ -107,6 +107,17 @@ public List getIgnores() throws IOException { return ignores; } + private File getDockerIgnoreFile() { + // See https://docs.docker.com/build/concepts/context/#filename-and-location + String dockerFileName = dockerFile.getName(); + File dockerFileSpecificIgnoreFile = new File(baseDirectory, dockerFileName + ".dockerignore"); + if (dockerFileSpecificIgnoreFile.exists()) { + return dockerFileSpecificIgnoreFile; + } else { + return new File(baseDirectory, ".dockerignore"); + } + } + public ScannedResult parse() throws IOException { return new ScannedResult(); } diff --git a/docker-java/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileAddMultipleFilesTest.java b/docker-java/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileAddMultipleFilesTest.java index 6406647cf..ce080dffd 100644 --- a/docker-java/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileAddMultipleFilesTest.java +++ b/docker-java/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileAddMultipleFilesTest.java @@ -57,6 +57,46 @@ public void ineffectiveIgnorePattern() throws Exception { assertThat(filesToAdd, containsInAnyOrder("Dockerfile", ".dockerignore", "README.md", "README-secret.md")); } + @Test + public void specificDockerFileWithoutDockerFileSpecificIgnore() throws IOException { + File baseDir = fileFromBuildTestResource("dockerignore/specificDockerFileWithoutDockerFileSpecificIgnore"); + Dockerfile dockerfile = new Dockerfile(new File(baseDir, "specific.Dockerfile"), baseDir); + Dockerfile.ScannedResult result = dockerfile.parse(); + Collection filesToAdd = transform(result.filesToAdd, TO_FILE_NAMES); + + assertThat(filesToAdd, containsInAnyOrder("specific.Dockerfile", ".dockerignore", "README.md")); + } + + @Test + public void defaultDockerFileWithDefaultIgnore() throws IOException { + File baseDir = fileFromBuildTestResource("dockerignore/DefaultDockerFileWithDefaultIgnore"); + Dockerfile dockerfile = new Dockerfile(new File(baseDir, "Dockerfile"), baseDir); + Dockerfile.ScannedResult result = dockerfile.parse(); + Collection filesToAdd = transform(result.filesToAdd, TO_FILE_NAMES); + + assertThat(filesToAdd, containsInAnyOrder("Dockerfile", ".dockerignore", "README.md")); + } + + @Test + public void defaultDockerFileWithDockerFileSpecificIgnore() throws IOException { + File baseDir = fileFromBuildTestResource("dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore"); + Dockerfile dockerfile = new Dockerfile(new File(baseDir, "Dockerfile"), baseDir); + Dockerfile.ScannedResult result = dockerfile.parse(); + Collection filesToAdd = transform(result.filesToAdd, TO_FILE_NAMES); + + assertThat(filesToAdd, containsInAnyOrder("Dockerfile", "Dockerfile.dockerignore", "README.md")); + } + + @Test + public void dockerFileSpecificIgnoreOverridesDockerIgnore() throws IOException { + File baseDir = fileFromBuildTestResource("dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore"); + Dockerfile dockerfile = new Dockerfile(new File(baseDir, "special.Dockerfile"), baseDir); + Dockerfile.ScannedResult result = dockerfile.parse(); + Collection filesToAdd = transform(result.filesToAdd, TO_FILE_NAMES); + + assertThat(filesToAdd, containsInAnyOrder("special.Dockerfile", ".dockerignore", "special.Dockerfile.dockerignore", "README.md", "README-not-secret.md")); + } + @Test public void addFiles() throws IOException { File baseDir = fileFromBuildTestResource("ADD/files"); diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDefaultIgnore/.dockerignore b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDefaultIgnore/.dockerignore new file mode 100644 index 000000000..f22e777b8 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDefaultIgnore/.dockerignore @@ -0,0 +1,3 @@ +*.md +!README*.md +README-secret.md \ No newline at end of file diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDefaultIgnore/Dockerfile b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDefaultIgnore/Dockerfile new file mode 100644 index 000000000..3c57c5061 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDefaultIgnore/Dockerfile @@ -0,0 +1,3 @@ +FROM busybox:latest + +CMD ["echo", "Success"] diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDefaultIgnore/README-secret.md b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDefaultIgnore/README-secret.md new file mode 100644 index 000000000..64237b5a7 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDefaultIgnore/README-secret.md @@ -0,0 +1 @@ +No markdown files are included in the context except README files other than README-secret.md. \ No newline at end of file diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDefaultIgnore/README.md b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDefaultIgnore/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/Dockerfile b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/Dockerfile new file mode 100644 index 000000000..3c57c5061 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/Dockerfile @@ -0,0 +1,3 @@ +FROM busybox:latest + +CMD ["echo", "Success"] diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/Dockerfile.dockerignore b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/Dockerfile.dockerignore new file mode 100644 index 000000000..f22e777b8 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/Dockerfile.dockerignore @@ -0,0 +1,3 @@ +*.md +!README*.md +README-secret.md \ No newline at end of file diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/README-secret.md b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/README-secret.md new file mode 100644 index 000000000..64237b5a7 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/README-secret.md @@ -0,0 +1 @@ +No markdown files are included in the context except README files other than README-secret.md. \ No newline at end of file diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/README.md b/docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/.dockerignore b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/.dockerignore new file mode 100644 index 000000000..ba359e7d6 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/.dockerignore @@ -0,0 +1,4 @@ +*.md +!README*.md +README-not-secret.md +README-secret.md diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/README-not-secret.md b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/README-not-secret.md new file mode 100644 index 000000000..64237b5a7 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/README-not-secret.md @@ -0,0 +1 @@ +No markdown files are included in the context except README files other than README-secret.md. \ No newline at end of file diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/README-secret.md b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/README-secret.md new file mode 100644 index 000000000..64237b5a7 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/README-secret.md @@ -0,0 +1 @@ +No markdown files are included in the context except README files other than README-secret.md. \ No newline at end of file diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/README-special-secret.md b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/README-special-secret.md new file mode 100644 index 000000000..64237b5a7 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/README-special-secret.md @@ -0,0 +1 @@ +No markdown files are included in the context except README files other than README-secret.md. \ No newline at end of file diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/README.md b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/special.Dockerfile b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/special.Dockerfile new file mode 100644 index 000000000..3c57c5061 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/special.Dockerfile @@ -0,0 +1,3 @@ +FROM busybox:latest + +CMD ["echo", "Success"] diff --git a/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/special.Dockerfile.dockerignore b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/special.Dockerfile.dockerignore new file mode 100644 index 000000000..75d903976 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore/special.Dockerfile.dockerignore @@ -0,0 +1,4 @@ +*.md +!README*.md +README-secret.md +README-special-secret.md diff --git a/docker-java/src/test/resources/buildTests/dockerignore/SpecificDockerFileWithoutDockerFileSpecificIgnore/.dockerignore b/docker-java/src/test/resources/buildTests/dockerignore/SpecificDockerFileWithoutDockerFileSpecificIgnore/.dockerignore new file mode 100644 index 000000000..f22e777b8 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/SpecificDockerFileWithoutDockerFileSpecificIgnore/.dockerignore @@ -0,0 +1,3 @@ +*.md +!README*.md +README-secret.md \ No newline at end of file diff --git a/docker-java/src/test/resources/buildTests/dockerignore/SpecificDockerFileWithoutDockerFileSpecificIgnore/README-secret.md b/docker-java/src/test/resources/buildTests/dockerignore/SpecificDockerFileWithoutDockerFileSpecificIgnore/README-secret.md new file mode 100644 index 000000000..64237b5a7 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/SpecificDockerFileWithoutDockerFileSpecificIgnore/README-secret.md @@ -0,0 +1 @@ +No markdown files are included in the context except README files other than README-secret.md. \ No newline at end of file diff --git a/docker-java/src/test/resources/buildTests/dockerignore/SpecificDockerFileWithoutDockerFileSpecificIgnore/README.md b/docker-java/src/test/resources/buildTests/dockerignore/SpecificDockerFileWithoutDockerFileSpecificIgnore/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docker-java/src/test/resources/buildTests/dockerignore/SpecificDockerFileWithoutDockerFileSpecificIgnore/specific.Dockerfile b/docker-java/src/test/resources/buildTests/dockerignore/SpecificDockerFileWithoutDockerFileSpecificIgnore/specific.Dockerfile new file mode 100644 index 000000000..3c57c5061 --- /dev/null +++ b/docker-java/src/test/resources/buildTests/dockerignore/SpecificDockerFileWithoutDockerFileSpecificIgnore/specific.Dockerfile @@ -0,0 +1,3 @@ +FROM busybox:latest + +CMD ["echo", "Success"]