You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by pa...@apache.org on 2017/02/26 22:47:42 UTC

[20/50] [abbrv] polygene-java git commit: build & docker-tests: revamp how Docker availability is detected

build & docker-tests: revamp how Docker availability is detected


Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/431695a1
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/431695a1
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/431695a1

Branch: refs/heads/serialization-3.0
Commit: 431695a190496f6b94f31a3c423dc1a6b0b63b06
Parents: 5860c1e
Author: Paul Merlin <pa...@apache.org>
Authored: Sat Feb 25 15:12:48 2017 +0100
Committer: Paul Merlin <pa...@apache.org>
Committed: Sat Feb 25 15:12:48 2017 +0100

----------------------------------------------------------------------
 .../polygene/gradle/code/CodePlugin.groovy      | 22 ++++++++++--
 .../internals/InternalDockerPlugin.groovy       | 38 +++++++++++++++++---
 internals/testsupport-internal/build.gradle     |  3 +-
 .../polygene/test/internal/DockerRule.java      |  8 ++---
 4 files changed, 60 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/polygene-java/blob/431695a1/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
index 1448341..eb605c9 100644
--- a/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
@@ -22,9 +22,11 @@ import org.apache.polygene.gradle.BasePlugin
 import org.apache.polygene.gradle.TaskGroups
 import org.apache.polygene.gradle.dependencies.DependenciesDeclarationExtension
 import org.apache.polygene.gradle.dependencies.DependenciesPlugin
+import org.gradle.api.Action
 import org.gradle.api.JavaVersion
 import org.gradle.api.Plugin
 import org.gradle.api.Project
+import org.gradle.api.Task
 import org.gradle.api.plugins.JavaPluginConvention
 import org.gradle.api.plugins.osgi.OsgiManifest
 import org.gradle.api.tasks.bundling.AbstractArchiveTask
@@ -38,6 +40,8 @@ import org.gradle.testing.jacoco.tasks.JacocoReport
 @CompileStatic
 class CodePlugin implements Plugin<Project>
 {
+  public static final String DOCKER_DISABLED_EXTRA_PROPERTY = 'dockerDisabled'
+
   @Override
   void apply( Project project )
   {
@@ -91,7 +95,7 @@ class CodePlugin implements Plugin<Project>
     def maxTestWorkers = ( parallel ? project.gradle.startParameter.maxWorkerCount : 1 ) as int
     // The space in the directory name is intentional
     def allTestsDir = project.file "$project.buildDir/tmp/test files"
-    project.tasks.withType( Test ) { Test testTask ->
+    def testTasks = project.tasks.withType( Test ) { Test testTask ->
       testTask.onlyIf { !project.hasProperty( 'skipTests' ) }
       testTask.testLogging.info.exceptionFormat = TestExceptionFormat.FULL
       testTask.maxHeapSize = '1g'
@@ -123,8 +127,22 @@ class CodePlugin implements Plugin<Project>
           project.delete testDir
         }
       }
-      testTask.inputs.property( 'polygeneTestSupportDockerHostEnv', System.getenv( 'DOCKER_HOST' ) )
     }
+    // Configuration task to honor disabling Docker when unavailable
+    project.tasks.create( 'configureDockerForTest', { Task task ->
+      // TODO Untangle docker connectivity check & test task configuration
+      task.dependsOn ':internals:testsupport-internal:checkDockerConnectivity'
+      testTasks.each { it.dependsOn task }
+      task.inputs.property 'polygeneTestSupportDockerDisabled',
+                           { project.findProperty( DOCKER_DISABLED_EXTRA_PROPERTY ) }
+      task.doLast {
+        boolean dockerDisabled = project.findProperty( DOCKER_DISABLED_EXTRA_PROPERTY )
+        testTasks.each { testTask ->
+          testTask.inputs.property 'polygeneTestSupportDockerDisabled', dockerDisabled
+          testTask.systemProperty 'DOCKER_DISABLED', dockerDisabled
+        }
+      }
+    } as Action<Task> )
   }
 
   private static void configureJar( Project project )

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/431695a1/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy
index 898a075..cdfd95d 100644
--- a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy
@@ -19,13 +19,17 @@ package org.apache.polygene.gradle.structure.internals
 
 import com.bmuschko.gradle.docker.DockerExtension
 import com.bmuschko.gradle.docker.DockerRemoteApiPlugin
+import com.bmuschko.gradle.docker.tasks.DockerVersion
 import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
 import groovy.transform.CompileStatic
 import org.apache.polygene.gradle.BasePlugin
+import org.apache.polygene.gradle.code.CodePlugin
 import org.apache.polygene.gradle.code.PublishNaming
 import org.apache.polygene.gradle.dependencies.DependenciesPlugin
+import org.gradle.api.Action
 import org.gradle.api.Plugin
 import org.gradle.api.Project
+import org.gradle.api.logging.LogLevel
 
 @CompileStatic
 class InternalDockerPlugin implements Plugin<Project>
@@ -40,6 +44,7 @@ class InternalDockerPlugin implements Plugin<Project>
     project.plugins.apply BasePlugin
     project.plugins.apply DependenciesPlugin
     applyDockerPlugin( project )
+    applyDockerSwitch( project )
     applyDockerBuildImage( project )
   }
 
@@ -47,9 +52,29 @@ class InternalDockerPlugin implements Plugin<Project>
   {
     project.plugins.apply DockerRemoteApiPlugin
     def dockerExtension = project.extensions.getByType DockerExtension
-    dockerExtension.certPath = dockerCertPath ?
-                               new File( dockerCertPath ) :
-                               new File( System.getProperty( 'user.home' ), '.boot2docker/certs/boot2docker-vm' )
+    // TLS support
+    if( dockerCertPath )
+    {
+      dockerExtension.certPath = new File( dockerCertPath )
+    }
+  }
+
+  private void applyDockerSwitch( Project project )
+  {
+    project.tasks.create( 'checkDockerConnectivity', DockerVersion, { DockerVersion task ->
+      task.onError = { ex ->
+        // Disable Docker for this build
+        project.rootProject.extensions.extraProperties.set( CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY, true )
+        if( project.logger.isEnabled( LogLevel.INFO ) )
+        {
+          project.logger.info 'Unable to connect to Docker, all Docker tasks will be SKIPPED', ex
+        }
+        else
+        {
+          project.logger.lifecycle "Unable to connect to Docker, all Docker tasks will be SKIPPED\n  ${ ( ( Exception ) ex ).message }"
+        }
+      }
+    } as Action<DockerVersion> )
   }
 
   private void applyDockerBuildImage( Project project )
@@ -62,7 +87,12 @@ class InternalDockerPlugin implements Plugin<Project>
       project.tasks.create( taskName, DockerBuildImage ) { DockerBuildImage task ->
         task.group = 'docker'
         task.description = "Build $dockerName Docker image"
-        task.onlyIf { dockerHost }
+        task.dependsOn 'checkDockerConnectivity'
+        task.onlyIf {
+          def extra = project.rootProject.extensions.extraProperties
+          !( extra.has( CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY ) &&
+             extra.get( CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY ) )
+        }
         task.inputs.property 'dockerMachineName', dockerMachineName
         task.inputs.property 'dockerHostEnv', dockerHost
         task.inputs.property 'dockerCertPath', dockerCertPath

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/431695a1/internals/testsupport-internal/build.gradle
----------------------------------------------------------------------
diff --git a/internals/testsupport-internal/build.gradle b/internals/testsupport-internal/build.gradle
index d65e648..fc70ba0 100644
--- a/internals/testsupport-internal/build.gradle
+++ b/internals/testsupport-internal/build.gradle
@@ -21,7 +21,8 @@ apply plugin: 'polygene-internal-docker'
 
 dependencies {
   api polygene.core.testsupport
-  api libraries.docker_junit
+
+  implementation libraries.docker_junit
 
   runtimeOnly polygene.core.runtime
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/431695a1/internals/testsupport-internal/src/main/java/org/apache/polygene/test/internal/DockerRule.java
----------------------------------------------------------------------
diff --git a/internals/testsupport-internal/src/main/java/org/apache/polygene/test/internal/DockerRule.java b/internals/testsupport-internal/src/main/java/org/apache/polygene/test/internal/DockerRule.java
index cea44c8..dce7150 100644
--- a/internals/testsupport-internal/src/main/java/org/apache/polygene/test/internal/DockerRule.java
+++ b/internals/testsupport-internal/src/main/java/org/apache/polygene/test/internal/DockerRule.java
@@ -25,11 +25,11 @@ import org.junit.runners.model.Statement;
 import pl.domzal.junit.docker.rule.DockerRuleBuilder;
 import pl.domzal.junit.docker.rule.WaitFor;
 
-import static org.junit.Assume.assumeNotNull;
+import static org.junit.Assume.assumeFalse;
 
 public class DockerRule implements TestRule
 {
-    private final String dockerHost = System.getenv( "DOCKER_HOST" );
+    private final boolean dockerDisabled = Boolean.valueOf( System.getProperty( "DOCKER_DISABLED", "false" ) );
     private final pl.domzal.junit.docker.rule.DockerRule dockerRule;
 
     public DockerRule( String image, int... portsToWaitFor )
@@ -39,7 +39,7 @@ public class DockerRule implements TestRule
 
     public DockerRule( String image, Map<String, String> environment, int... portsToWaitFor )
     {
-        if( dockerHost == null )
+        if( dockerDisabled )
         {
             dockerRule = null;
         }
@@ -58,7 +58,7 @@ public class DockerRule implements TestRule
     @Override
     public Statement apply( Statement base, Description description )
     {
-        assumeNotNull( dockerHost );
+        assumeFalse( dockerDisabled );
         return dockerRule.apply( base, description );
     }