Browse Source

Improve build scan metadata (#44247)

Mark Vieira 6 years ago
parent
commit
2797b2452b
2 changed files with 47 additions and 8 deletions
  1. 4 8
      build.gradle
  2. 43 0
      gradle/build-scan.gradle

+ 4 - 8
build.gradle

@@ -29,16 +29,13 @@ import org.gradle.util.DistributionLocator
 import org.gradle.plugins.ide.eclipse.model.SourceFolder
 
 plugins {
-    id 'com.gradle.build-scan' version '2.2.1'
+    id 'com.gradle.build-scan' version '2.3'
     id 'base'
     id 'elasticsearch.global-build-info'
 }
-if (Boolean.valueOf(project.findProperty('org.elasticsearch.acceptScanTOS') ?: "false")) {
-    buildScan {
-        termsOfServiceUrl = 'https://gradle.com/terms-of-service'
-        termsOfServiceAgree = 'yes'
-    }
-}
+
+apply plugin: 'nebula.info-scm'
+apply from: 'gradle/build-scan.gradle'
 
 // common maven publishing configuration
 allprojects {
@@ -49,7 +46,6 @@ allprojects {
 
 BuildPlugin.configureRepositories(project)
 
-apply plugin: 'nebula.info-scm'
 String licenseCommit
 if (VersionProperties.elasticsearch.toString().endsWith('-SNAPSHOT')) {
   licenseCommit = scminfo.change ?: "master" // leniency for non git builds

+ 43 - 0
gradle/build-scan.gradle

@@ -0,0 +1,43 @@
+import nebula.plugin.info.scm.ScmInfoExtension
+
+buildScan {
+    def jenkinsUrl = System.getenv('JENKINS_URL') ? new URL(System.getenv('JENKINS_URL')) : null
+
+    // Accept Gradle ToS when project property org.elasticsearch.acceptScanTOS=true or this is an Elastic CI build
+    if (jenkinsUrl?.host?.endsWith('elastic.co') || Boolean.valueOf(project.findProperty('org.elasticsearch.acceptScanTOS') ?: "false")) {
+        termsOfServiceUrl = 'https://gradle.com/terms-of-service'
+        termsOfServiceAgree = 'yes'
+    }
+
+    // Jenkins-specific build scan metadata
+    if (jenkinsUrl) {
+        tag 'CI'
+        tag System.getenv('JOB_NAME')
+        link 'Jenkins Build', System.getenv('BUILD_URL')
+        System.getenv('NODE_LABELS').split(' ').each {
+            value 'Jenkins Worker Label', it
+        }
+
+        // Capture changes included in this CI build except for pull request builds
+        if (System.getenv('GIT_COMMIT') && System.getenv('ROOT_BUILD_CAUSE_GHPRBCAUSE') == null) {
+            background {
+                def changes = "git diff --name-only ${System.getenv('GIT_PREVIOUS_COMMIT')}..${System.getenv('GIT_COMMIT')}".execute().text.trim()
+                value 'Git Changes', changes
+            }
+        }
+    } else {
+        tag 'LOCAL'
+    }
+
+    // Add SCM information
+    def scmInfo = project.extensions.findByType(ScmInfoExtension)
+    if (scmInfo && scmInfo.change && scmInfo.branch) {
+        value 'Git Commit ID', scmInfo.change
+        // Don't tag the branch if we are in a detached head state
+        if (scmInfo.branch ==~ /[0-9a-f]{5,40}/ == false) {
+            value 'Git Branch', scmInfo.branch
+            tag scmInfo.branch
+        }
+        link 'Source', "https://github.com/elastic/elasticsearch/commit/${scmInfo.change}"
+    }
+}