diff --git a/setup-gradle/README.md b/setup-gradle/README.md index d52250a1..7e96a5f2 100644 --- a/setup-gradle/README.md +++ b/setup-gradle/README.md @@ -663,15 +663,17 @@ with a valid [Develocity access key](https://docs.gradle.com/enterprise/gradle-p The `init-script` supports several additional configuration parameters that you may find useful. All configuration options (required and optional) are detailed below: -| Variable | Required | Description | -|-----------------------------------| --- | --- | -| DEVELOCITY_INJECTION_ENABLED | :white_check_mark: | enables Develocity injection | -| DEVELOCITY_URL | :white_check_mark: | the URL of the Develocity server | -| DEVELOCITY_ALLOW_UNTRUSTED_SERVER | | allow communication with an untrusted server; set to _true_ if your Develocity instance is using a self-signed certificate | +| Variable | Required | Description | +|-----------------------------------| --- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| DEVELOCITY_INJECTION_ENABLED | :white_check_mark: | enables Develocity injection | +| DEVELOCITY_URL | :white_check_mark: | the URL of the Develocity server | +| DEVELOCITY_ALLOW_UNTRUSTED_SERVER | | allow communication with an untrusted server; set to _true_ if your Develocity instance is using a self-signed certificate | | DEVELOCITY_ENFORCE_URL | | enforce the configured Develocity URL over a URL configured in the project's build; set to _true_ to enforce publication of build scans to the configured Develocity URL | -| DEVELOCITY_PLUGIN_VERSION | :white_check_mark: | the version of the [Develocity Gradle plugin](https://docs.gradle.com/enterprise/gradle-plugin/) to apply | -| DEVELOCITY_CCUD_PLUGIN_VERSION | | the version of the [Common Custom User Data Gradle plugin](https://github.com/gradle/common-custom-user-data-gradle-plugin) to apply, if any | -| GRADLE_PLUGIN_REPOSITORY_URL | | the URL of the repository to use when resolving the Develocity and CCUD plugins; the Gradle Plugin Portal is used by default | +| DEVELOCITY_PLUGIN_VERSION | :white_check_mark: | the version of the [Develocity Gradle plugin](https://docs.gradle.com/enterprise/gradle-plugin/) to apply | +| DEVELOCITY_CCUD_PLUGIN_VERSION | | the version of the [Common Custom User Data Gradle plugin](https://github.com/gradle/common-custom-user-data-gradle-plugin) to apply, if any | +| GRADLE_PLUGIN_REPOSITORY_URL | | the URL of the repository to use when resolving the Develocity and CCUD plugins; the Gradle Plugin Portal is used by default | +| GRADLE_PLUGIN_REPOSITORY_USERNAME | | the username for the repository URL to use when resolving the Develocity and CCUD plugins | +| GRADLE_PLUGIN_REPOSITORY_PASSWORD | | the password for the repository URL to use when resolving the Develocity and CCUD plugins; Consider using secrets to pass the value to this variable | ## Publishing to scans.gradle.com diff --git a/sources/src/resources/init-scripts/gradle-actions.inject-develocity.init.gradle b/sources/src/resources/init-scripts/gradle-actions.inject-develocity.init.gradle index e503c646..cf37e43f 100644 --- a/sources/src/resources/init-scripts/gradle-actions.inject-develocity.init.gradle +++ b/sources/src/resources/init-scripts/gradle-actions.inject-develocity.init.gradle @@ -21,6 +21,8 @@ initscript { } def pluginRepositoryUrl = getInputParam('gradle.plugin-repository.url') + def pluginRepositoryUsername = getInputParam('gradle.plugin-repository.username') + def pluginRepositoryPassword = getInputParam('gradle.plugin-repository.password') def gePluginVersion = getInputParam('develocity.plugin.version') def ccudPluginVersion = getInputParam('develocity.ccud-plugin.version') @@ -32,7 +34,19 @@ initscript { logger.lifecycle("Develocity plugins resolution: $pluginRepositoryUrl") repositories { - maven { url pluginRepositoryUrl } + maven { + url pluginRepositoryUrl + if (pluginRepositoryUsername && pluginRepositoryPassword) { + logger.lifecycle("Using credentials for plugin repository") + credentials { + username(pluginRepositoryUsername) + password(pluginRepositoryPassword) + } + authentication { + basic(BasicAuthentication) + } + } + } } } diff --git a/sources/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDevelocityInjection.groovy b/sources/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDevelocityInjection.groovy index 8be8db01..d74d6ff5 100644 --- a/sources/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDevelocityInjection.groovy +++ b/sources/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestDevelocityInjection.groovy @@ -205,6 +205,26 @@ class TestDevelocityInjection extends BaseInitScriptTest { testGradleVersion << ALL_VERSIONS } + def "can configure alternative repository for plugins with credentials when Develocity plugin is applied by the init script"() { + assumeTrue testGradleVersion.compatibleWithCurrentJvm + + when: + def config = testConfig().withPluginRepository(new URI('https://plugins.grdev.net/m2')).withPluginRepositoryCredentials("john", "doe") + def result = run(testGradleVersion, config) + + then: + outputContainsDevelocityPluginApplicationViaInitScript(result, testGradleVersion.gradleVersion) + outputContainsDevelocityConnectionInfo(result, mockScansServer.address.toString(), true) + outputMissesCcudPluginApplicationViaInitScript(result) + outputContainsPluginRepositoryInfo(result, 'https://plugins.grdev.net/m2', true) + + and: + outputContainsBuildScanUrl(result) + + where: + testGradleVersion << ALL_VERSIONS + } + def "stops gracefully when requested CCUD plugin version is <1.7"() { assumeTrue testGradleVersion.compatibleWithCurrentJvm @@ -311,10 +331,16 @@ class TestDevelocityInjection extends BaseInitScriptTest { assert 1 == result.output.count(geConnectionInfo) } - void outputContainsPluginRepositoryInfo(BuildResult result, String gradlePluginRepositoryUrl) { + void outputContainsPluginRepositoryInfo(BuildResult result, String gradlePluginRepositoryUrl, boolean withCredentials = false) { def repositoryInfo = "Develocity plugins resolution: ${gradlePluginRepositoryUrl}" assert result.output.contains(repositoryInfo) assert 1 == result.output.count(repositoryInfo) + + if (withCredentials) { + def credentialsInfo = "Using credentials for plugin repository" + assert result.output.contains(credentialsInfo) + assert 1 == result.output.count(credentialsInfo) + } } void outputEnforcesDevelocityUrl(BuildResult result, String geUrl, boolean geAllowUntrustedServer) { @@ -350,6 +376,8 @@ class TestDevelocityInjection extends BaseInitScriptTest { boolean enforceUrl = false String ccudPluginVersion = null String pluginRepositoryUrl = null + String pluginRepoUsername = null + String pluginRepoPassword = null TestConfig withCCUDPlugin(String version = CCUD_PLUGIN_VERSION) { ccudPluginVersion = version @@ -367,6 +395,12 @@ class TestDevelocityInjection extends BaseInitScriptTest { return this } + TestConfig withPluginRepositoryCredentials(String pluginRepoUsername, String pluginRepoPassword) { + this.pluginRepoUsername = pluginRepoUsername + this.pluginRepoPassword = pluginRepoPassword + return this + } + def getEnvVars() { Map envVars = [ DEVELOCITY_INJECTION_ENABLED: "true", @@ -378,6 +412,8 @@ class TestDevelocityInjection extends BaseInitScriptTest { if (enforceUrl) envVars.put("DEVELOCITY_ENFORCE_URL", "true") if (ccudPluginVersion != null) envVars.put("DEVELOCITY_CCUD_PLUGIN_VERSION", ccudPluginVersion) if (pluginRepositoryUrl != null) envVars.put("GRADLE_PLUGIN_REPOSITORY_URL", pluginRepositoryUrl) + if (pluginRepoUsername != null) envVars.put("GRADLE_PLUGIN_REPOSITORY_USERNAME", pluginRepoUsername) + if (pluginRepoPassword != null) envVars.put("GRADLE_PLUGIN_REPOSITORY_PASSWORD", pluginRepoPassword) return envVars } @@ -394,6 +430,8 @@ class TestDevelocityInjection extends BaseInitScriptTest { if (enforceUrl) jvmArgs.add("-Ddevelocity.enforce-url=true") if (ccudPluginVersion != null) jvmArgs.add("-Ddevelocity.ccud-plugin.version=$ccudPluginVersion") if (pluginRepositoryUrl != null) jvmArgs.add("-Dgradle.plugin-repository.url=$pluginRepositoryUrl") + if (pluginRepoUsername != null) jvmArgs.add("-Dgradle.plugin-repository.username=$pluginRepoUsername") + if (pluginRepoPassword != null) jvmArgs.add("-Dgradle.plugin-repository.password=$pluginRepoPassword") return jvmArgs.collect { it.toString() } // Convert from GStrings }