mirror of
				https://hub.gitmirror.com/https://github.com/gradle/gradle-build-action
				synced 2025-11-01 02:20:05 +08:00 
			
		
		
		
	 982da8e78c
			
		
	
	
		982da8e78c
		
			
		
	
	
	
	
		
			
			The `PluginManager` type wasn't introduced until Gradle 2.x. Remove this type from the method signature in an attempt to allow this file to be parsed with Gradle 1.12.
		
			
				
	
	
		
			192 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Groovy
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Groovy
		
	
	
	
	
	
| import org.gradle.util.GradleVersion
 | |
| 
 | |
| // note that there is no mechanism to share code between the initscript{} block and the main script, so some logic is duplicated
 | |
| 
 | |
| // conditionally apply the GE / Build Scan plugin to the classpath so it can be applied to the build further down in this script
 | |
| initscript {
 | |
|     def isTopLevelBuild = !gradle.parent
 | |
|     if (!isTopLevelBuild) {
 | |
|         return
 | |
|     }
 | |
| 
 | |
|     def getInputParam = { String name ->
 | |
|         def envVarName = name.toUpperCase().replace('.', '_').replace('-', '_')
 | |
|         return System.getProperty(name) ?: System.getenv(envVarName)
 | |
|     }
 | |
| 
 | |
|     // finish early if injection is disabled
 | |
|     def gradleInjectionEnabled = getInputParam("gradle-enterprise.injection-enabled")
 | |
|     if (gradleInjectionEnabled != "true") {
 | |
|         return
 | |
|     }
 | |
| 
 | |
|     def pluginRepositoryUrl = getInputParam('gradle-enterprise.plugin-repository.url')
 | |
|     def gePluginVersion = getInputParam('gradle-enterprise.plugin.version')
 | |
|     def ccudPluginVersion = getInputParam('gradle-enterprise.ccud-plugin.version')
 | |
| 
 | |
|     def atLeastGradle5 = GradleVersion.current() >= GradleVersion.version('5.0')
 | |
|     def atLeastGradle4 = GradleVersion.current() >= GradleVersion.version('4.0')
 | |
| 
 | |
|     if (gePluginVersion || ccudPluginVersion && atLeastGradle4) {
 | |
|         pluginRepositoryUrl = pluginRepositoryUrl ?: 'https://plugins.gradle.org/m2'
 | |
|         logger.quiet("Gradle Enterprise plugins resolution: $pluginRepositoryUrl")
 | |
| 
 | |
|         repositories {
 | |
|             maven { url pluginRepositoryUrl }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     dependencies {
 | |
|         if (gePluginVersion) {
 | |
|             classpath atLeastGradle5 ?
 | |
|                 "com.gradle:gradle-enterprise-gradle-plugin:$gePluginVersion" :
 | |
|                 "com.gradle:build-scan-plugin:1.16"
 | |
|         }
 | |
| 
 | |
|         if (ccudPluginVersion && atLeastGradle4) {
 | |
|             classpath "com.gradle:common-custom-user-data-gradle-plugin:$ccudPluginVersion"
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| def BUILD_SCAN_PLUGIN_ID = 'com.gradle.build-scan'
 | |
| def BUILD_SCAN_PLUGIN_CLASS = 'com.gradle.scan.plugin.BuildScanPlugin'
 | |
| 
 | |
| def GRADLE_ENTERPRISE_PLUGIN_ID = 'com.gradle.enterprise'
 | |
| def GRADLE_ENTERPRISE_PLUGIN_CLASS = 'com.gradle.enterprise.gradleplugin.GradleEnterprisePlugin'
 | |
| def GRADLE_ENTERPRISE_EXTENSION_CLASS = 'com.gradle.enterprise.gradleplugin.GradleEnterpriseExtension'
 | |
| def CI_AUTO_INJECTION_CUSTOM_VALUE_NAME = 'CI auto injection'
 | |
| def CI_AUTO_INJECTION_CUSTOM_VALUE_VALUE = 'gradle-build-action'
 | |
| def CCUD_PLUGIN_ID = 'com.gradle.common-custom-user-data-gradle-plugin'
 | |
| def CCUD_PLUGIN_CLASS = 'com.gradle.CommonCustomUserDataGradlePlugin'
 | |
| 
 | |
| def isTopLevelBuild = !gradle.parent
 | |
| if (!isTopLevelBuild) {
 | |
|     return
 | |
| }
 | |
| 
 | |
| def getInputParam = { String name ->
 | |
|     def envVarName = name.toUpperCase().replace('.', '_').replace('-', '_')
 | |
|     return System.getProperty(name) ?: System.getenv(envVarName)
 | |
| }
 | |
| 
 | |
| // finish early if injection is disabled
 | |
| def gradleInjectionEnabled = getInputParam("gradle-enterprise.injection-enabled")
 | |
| if (gradleInjectionEnabled != "true") {
 | |
|     return
 | |
| }
 | |
| 
 | |
| def geUrl = getInputParam('gradle-enterprise.url')
 | |
| def geAllowUntrustedServer = Boolean.parseBoolean(getInputParam('gradle-enterprise.allow-untrusted-server'))
 | |
| def geEnforceUrl = Boolean.parseBoolean(getInputParam('gradle-enterprise.enforce-url'))
 | |
| def buildScanUploadInBackground = Boolean.parseBoolean(getInputParam('gradle-enterprise.build-scan.upload-in-background'))
 | |
| def gePluginVersion = getInputParam('gradle-enterprise.plugin.version')
 | |
| def ccudPluginVersion = getInputParam('gradle-enterprise.ccud-plugin.version')
 | |
| 
 | |
| def atLeastGradle4 = GradleVersion.current() >= GradleVersion.version('4.0')
 | |
| 
 | |
| // finish early if configuration parameters passed in via system properties are not valid/supported
 | |
| if (ccudPluginVersion && isNotAtLeast(ccudPluginVersion, '1.7')) {
 | |
|     logger.warn("Common Custom User Data Gradle plugin must be at least 1.7. Configured version is $ccudPluginVersion.")
 | |
|     return
 | |
| }
 | |
| 
 | |
| // register buildScanPublished listener and optionally apply the GE / Build Scan plugin
 | |
| if (GradleVersion.current() < GradleVersion.version('6.0')) {
 | |
|     rootProject {
 | |
|         buildscript.configurations.getByName("classpath").incoming.afterResolve { ResolvableDependencies incoming ->
 | |
|             def resolutionResult = incoming.resolutionResult
 | |
| 
 | |
|             if (gePluginVersion) {
 | |
|                 def scanPluginComponent = resolutionResult.allComponents.find {
 | |
|                     it.moduleVersion.with { group == "com.gradle" && (name == "build-scan-plugin" || name == "gradle-enterprise-gradle-plugin") }
 | |
|                 }
 | |
|                 if (!scanPluginComponent) {
 | |
|                     logger.quiet("Applying $BUILD_SCAN_PLUGIN_CLASS via init script")
 | |
|                     logger.quiet("Connection to Gradle Enterprise: $geUrl, allowUntrustedServer: $geAllowUntrustedServer")
 | |
|                     applyPluginExternally(pluginManager, BUILD_SCAN_PLUGIN_CLASS)
 | |
|                     buildScan.server = geUrl
 | |
|                     buildScan.allowUntrustedServer = geAllowUntrustedServer
 | |
|                     buildScan.publishAlways()
 | |
|                     if (buildScan.metaClass.respondsTo(buildScan, 'setUploadInBackground', Boolean)) buildScan.uploadInBackground = buildScanUploadInBackground  // uploadInBackground not available for build-scan-plugin 1.16
 | |
|                     buildScan.value CI_AUTO_INJECTION_CUSTOM_VALUE_NAME, CI_AUTO_INJECTION_CUSTOM_VALUE_VALUE
 | |
|                 }
 | |
| 
 | |
|                 if (geUrl && geEnforceUrl) {
 | |
|                     pluginManager.withPlugin(BUILD_SCAN_PLUGIN_ID) {
 | |
|                         afterEvaluate {
 | |
|                             logger.quiet("Enforcing Gradle Enterprise: $geUrl, allowUntrustedServer: $geAllowUntrustedServer")
 | |
|                             buildScan.server = geUrl
 | |
|                             buildScan.allowUntrustedServer = geAllowUntrustedServer
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (ccudPluginVersion && atLeastGradle4) {
 | |
|                 def ccudPluginComponent = resolutionResult.allComponents.find {
 | |
|                     it.moduleVersion.with { group == "com.gradle" && name == "common-custom-user-data-gradle-plugin" }
 | |
|                 }
 | |
|                 if (!ccudPluginComponent) {
 | |
|                     logger.quiet("Applying $CCUD_PLUGIN_CLASS via init script")
 | |
|                     pluginManager.apply(initscript.classLoader.loadClass(CCUD_PLUGIN_CLASS))
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| } else {
 | |
|     gradle.settingsEvaluated { settings ->
 | |
|         if (gePluginVersion) {
 | |
|             if (!settings.pluginManager.hasPlugin(GRADLE_ENTERPRISE_PLUGIN_ID)) {
 | |
|                 logger.quiet("Applying $GRADLE_ENTERPRISE_PLUGIN_CLASS via init script")
 | |
|                 logger.quiet("Connection to Gradle Enterprise: $geUrl, allowUntrustedServer: $geAllowUntrustedServer")
 | |
|                 applyPluginExternally(settings.pluginManager, GRADLE_ENTERPRISE_PLUGIN_CLASS)
 | |
|                 extensionsWithPublicType(settings, GRADLE_ENTERPRISE_EXTENSION_CLASS).collect { settings[it.name] }.each { ext ->
 | |
|                     ext.server = geUrl
 | |
|                     ext.allowUntrustedServer = geAllowUntrustedServer
 | |
|                     ext.buildScan.publishAlways()
 | |
|                     ext.buildScan.uploadInBackground = buildScanUploadInBackground
 | |
|                     ext.buildScan.value CI_AUTO_INJECTION_CUSTOM_VALUE_NAME, CI_AUTO_INJECTION_CUSTOM_VALUE_VALUE
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (geUrl && geEnforceUrl) {
 | |
|                 extensionsWithPublicType(settings, GRADLE_ENTERPRISE_EXTENSION_CLASS).collect { settings[it.name] }.each { ext ->
 | |
|                     logger.quiet("Enforcing Gradle Enterprise: $geUrl, allowUntrustedServer: $geAllowUntrustedServer")
 | |
|                     ext.server = geUrl
 | |
|                     ext.allowUntrustedServer = geAllowUntrustedServer
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if (ccudPluginVersion) {
 | |
|             if (!settings.pluginManager.hasPlugin(CCUD_PLUGIN_ID)) {
 | |
|                 logger.quiet("Applying $CCUD_PLUGIN_CLASS via init script")
 | |
|                 settings.pluginManager.apply(initscript.classLoader.loadClass(CCUD_PLUGIN_CLASS))
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| void applyPluginExternally(def pluginManager, String pluginClassName) {
 | |
|     def externallyApplied = 'gradle.enterprise.externally-applied'
 | |
|     def oldValue = System.getProperty(externallyApplied)
 | |
|     System.setProperty(externallyApplied, 'true')
 | |
|     try {
 | |
|         pluginManager.apply(initscript.classLoader.loadClass(pluginClassName))
 | |
|     } finally {
 | |
|         if (oldValue == null) {
 | |
|             System.clearProperty(externallyApplied)
 | |
|         } else {
 | |
|             System.setProperty(externallyApplied, oldValue)
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| static def extensionsWithPublicType(def container, String publicType) {
 | |
|     container.extensions.extensionsSchema.elements.findAll { it.publicType.concreteClass.name == publicType }
 | |
| }
 | |
| 
 | |
| static boolean isNotAtLeast(String versionUnderTest, String referenceVersion) {
 | |
|     GradleVersion.version(versionUnderTest) < GradleVersion.version(referenceVersion)
 | |
| } |