mirror of
https://github.com/gradle/gradle-build-action.git
synced 2025-04-07 05:44:14 +02:00

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
No EOL
8.8 KiB
Groovy
192 lines
No EOL
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)
|
|
} |