From d5139c70fa53555acc54d4b83355733fee700239 Mon Sep 17 00:00:00 2001 From: Quinten Krijger Date: Thu, 15 Sep 2016 11:10:26 +0200 Subject: [PATCH] Fix #67 Any type of project can now use a Dockerfile.template --- .../docker/tasks/PrepareDockerFileTask.groovy | 9 +++--- .../Dockerfile.template | 2 ++ .../build-templated-dockerfile/build.gradle | 30 +++++++++++++++++++ .../docker/DockerPluginSpecification.groovy | 9 ++++++ 4 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 src/test/gradle-projects/build-templated-dockerfile/Dockerfile.template create mode 100644 src/test/gradle-projects/build-templated-dockerfile/build.gradle diff --git a/src/main/groovy/org/stackwork/gradle/docker/tasks/PrepareDockerFileTask.groovy b/src/main/groovy/org/stackwork/gradle/docker/tasks/PrepareDockerFileTask.groovy index 4e7ceea..b6784b1 100644 --- a/src/main/groovy/org/stackwork/gradle/docker/tasks/PrepareDockerFileTask.groovy +++ b/src/main/groovy/org/stackwork/gradle/docker/tasks/PrepareDockerFileTask.groovy @@ -16,7 +16,7 @@ class PrepareDockerFileTask extends AbstractTask { dependsOn project.task("parseDockerFileTemplate", type: Copy) { // disable task caching - onlyIf { dependsOnBaseImage() } + onlyIf { usingDockerfileTemplate() } outputs.upToDateWhen { false } description = 'Parsing the Dockerfile.template' @@ -28,15 +28,14 @@ class PrepareDockerFileTask extends AbstractTask { } doLast { - project.stackwork.dockerFile = dependsOnBaseImage() ? + project.stackwork.dockerFile = usingDockerfileTemplate() ? project.file("${project.stackwork.buildDir}/Dockerfile").absolutePath : project.file('Dockerfile').absolutePath } } - boolean dependsOnBaseImage() { - def baseImageProject = getBaseImageProject() - baseImageProject != null && baseImageProject != project + boolean usingDockerfileTemplate() { + project.file('Dockerfile.template').exists() } Project getBaseImageProject() { diff --git a/src/test/gradle-projects/build-templated-dockerfile/Dockerfile.template b/src/test/gradle-projects/build-templated-dockerfile/Dockerfile.template new file mode 100644 index 0000000..82b0824 --- /dev/null +++ b/src/test/gradle-projects/build-templated-dockerfile/Dockerfile.template @@ -0,0 +1,2 @@ +FROM scratch +LABEL image.version="${project.version}" diff --git a/src/test/gradle-projects/build-templated-dockerfile/build.gradle b/src/test/gradle-projects/build-templated-dockerfile/build.gradle new file mode 100644 index 0000000..9009057 --- /dev/null +++ b/src/test/gradle-projects/build-templated-dockerfile/build.gradle @@ -0,0 +1,30 @@ +import static org.stackwork.gradle.docker.ModuleType.* + +buildscript { + repositories { + maven { url = "file://${project.projectDir}/../../../../build/repoForTests" } + mavenCentral() + } + dependencies { + classpath group: 'org.stackwork.gradle', name: 'stackwork', version: '0.1-TEST' + } +} +apply from: '../../gradle-plugins/stackwork-extended-for-tests.gradle' + +version='1' + +stackwork { + moduleType = IMAGE +} + +task('inspectImage', + description: 'Inspect the image. If this works, we know it has been built.', + group: 'Stackwork', + type: Exec) { + commandLine 'docker', 'inspect', '--format=\'{{.Id}}\'', "${-> project.stackwork.imageId}" +} + +tasks.inspectImage.dependsOn tasks.buildImage +afterEvaluate { + tasks.stackworkCheck.dependsOn tasks.inspectImage +} diff --git a/src/test/groovy/org/stackwork/gradle/docker/DockerPluginSpecification.groovy b/src/test/groovy/org/stackwork/gradle/docker/DockerPluginSpecification.groovy index 9e51a64..e2bfb95 100644 --- a/src/test/groovy/org/stackwork/gradle/docker/DockerPluginSpecification.groovy +++ b/src/test/groovy/org/stackwork/gradle/docker/DockerPluginSpecification.groovy @@ -1,5 +1,6 @@ package org.stackwork.gradle.docker +import spock.lang.IgnoreRest import spock.lang.Specification class DockerPluginSpecification extends Specification { @@ -24,6 +25,14 @@ class DockerPluginSpecification extends Specification { output.standardOut.contains 'Step 2 : COPY Dockerfile /' } + def "The Dockerfile may be templated using project properties"() { + when: + GradleOutput output = runGradleTask('build-templated-dockerfile') + + then: 'the build is successful' + output.process.exitValue() == 0 + } + def "A test module that applies the JavaPlugin is allowed to connect to an image in unit tests trough appropriately set system properties"() { when: GradleOutput output = runGradleTask('unit-test')