From 557c419c1723791b7750543f69a64b4632102518 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Thu, 9 Mar 2023 08:28:23 +0100 Subject: [PATCH] Model parameters using org.gradlex.build-parameters (#3170) Introduces the org.gradlex.build-parameters plugin to model parameters that can be supplied to this build. For this the existing build logic in gradle/plugins is moved to a submodule called 'common' and a new module called 'build-parameters' is introduced. This way, build logic can access build parameters using the `buildParameters` pre-compiled accessor in Kotlin. Occurences of project.findProperty as well as project.hasProperty are replaced by properly modeled build parameters. Since validation of parameters is not turned off, the build-parameters plugin will fail the build is a parameter is supplied which is not modeled. For that reason, any other parameters, such as signing or deployment parameters that are supplied by developers only during releasing need to be added before this can be merged. --- .editorconfig | 3 + .github/actions/run-gradle/action.yml | 2 +- .github/workflows/cross-version.yml | 6 +- .github/workflows/main.yml | 8 +- README.md | 2 +- build.gradle.kts | 2 +- documentation/documentation.gradle.kts | 3 +- .../plugins/build-parameters/build.gradle.kts | 81 +++++++++++++++++++ gradle/plugins/{ => common}/build.gradle.kts | 1 + .../ConfigurationContainerExtensions.kt | 0 .../src/main/kotlin/JavaLibraryExtension.kt | 0 .../{ => common}/src/main/kotlin/License.kt | 0 .../src/main/kotlin/ProjectExtensions.kt | 0 .../src/main/kotlin/TaskExtensions.kt | 0 .../junitbuild.base-conventions.gradle.kts | 0 .../junitbuild.build-metadata.gradle.kts | 0 ...itbuild.dependency-update-check.gradle.kts | 0 ....jacoco-aggregation-conventions.gradle.kts | 0 .../junitbuild.jacoco-conventions.gradle.kts | 5 +- ...itbuild.jacoco-java-conventions.gradle.kts | 4 +- ...tbuild.java-library-conventions.gradle.kts | 0 ...uild.java-multi-release-sources.gradle.kts | 0 .../junitbuild.java-repackage-jars.gradle.kts | 0 ...uild.java-toolchain-conventions.gradle.kts | 7 +- ...junitbuild.junit4-compatibility.gradle.kts | 0 ...uild.kotlin-library-conventions.gradle.kts | 0 .../junitbuild.osgi-conventions.gradle.kts | 0 ...nitbuild.publishing-conventions.gradle.kts | 4 +- .../junitbuild.shadow-conventions.gradle.kts | 0 ...junitbuild.spotless-conventions.gradle.kts | 0 .../junitbuild.temp-maven-repo.gradle.kts | 0 .../junitbuild.testing-conventions.gradle.kts | 21 +++-- .../exec/ClasspathSystemPropertyProvider.kt | 0 .../junitbuild/exec/RunConsoleLauncher.kt | 0 .../kotlin/junitbuild/java/ExecJarAction.kt | 0 .../junitbuild/java/ModuleCompileOptions.kt | 0 .../java/ModulePathArgumentProvider.kt | 0 .../java/PatchModuleArgumentProvider.kt | 0 .../junitbuild/java/WriteArtifactsFile.kt | 0 .../ModuleSpecificJavadocFileOption.kt | 0 gradle/plugins/settings.gradle.kts | 2 + .../platform-tooling-support-tests.gradle.kts | 5 +- settings.gradle.kts | 30 +++---- 43 files changed, 136 insertions(+), 50 deletions(-) create mode 100644 gradle/plugins/build-parameters/build.gradle.kts rename gradle/plugins/{ => common}/build.gradle.kts (94%) rename gradle/plugins/{ => common}/src/main/kotlin/ConfigurationContainerExtensions.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/JavaLibraryExtension.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/License.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/ProjectExtensions.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/TaskExtensions.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.base-conventions.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.build-metadata.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.dependency-update-check.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.jacoco-aggregation-conventions.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.jacoco-conventions.gradle.kts (61%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.jacoco-java-conventions.gradle.kts (90%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.java-multi-release-sources.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.java-repackage-jars.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.java-toolchain-conventions.gradle.kts (87%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.junit4-compatibility.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.osgi-conventions.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.publishing-conventions.gradle.kts (94%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.shadow-conventions.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.spotless-conventions.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.temp-maven-repo.gradle.kts (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild.testing-conventions.gradle.kts (75%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild/exec/ClasspathSystemPropertyProvider.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild/exec/RunConsoleLauncher.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild/java/ExecJarAction.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild/java/ModuleCompileOptions.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild/java/ModulePathArgumentProvider.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild/java/PatchModuleArgumentProvider.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild/java/WriteArtifactsFile.kt (100%) rename gradle/plugins/{ => common}/src/main/kotlin/junitbuild/javadoc/ModuleSpecificJavadocFileOption.kt (100%) diff --git a/.editorconfig b/.editorconfig index 063e4a874109..2a4ad4ec1b55 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,3 +1,6 @@ [*.{kt,kts}] ij_kotlin_allow_trailing_comma = false ij_kotlin_allow_trailing_comma_on_call_site = false + +[*.kts] +indent_style = tab diff --git a/.github/actions/run-gradle/action.yml b/.github/actions/run-gradle/action.yml index 501393593a6c..a4b1bc129f6c 100644 --- a/.github/actions/run-gradle/action.yml +++ b/.github/actions/run-gradle/action.yml @@ -19,7 +19,7 @@ runs: with: arguments: | -Porg.gradle.java.installations.auto-download=false - -PenablePredictiveTestSelection=${{ github.event_name == 'pull_request' }} + -Penterprise.predictiveTestSelection.enabled=${{ github.event_name == 'pull_request' }} "-Dscan.value.GitHub job=${{ github.job }}" javaToolchains ${{ inputs.arguments }} diff --git a/.github/workflows/cross-version.yml b/.github/workflows/cross-version.yml index 4786e5b3c07f..13c93692b87a 100644 --- a/.github/workflows/cross-version.yml +++ b/.github/workflows/cross-version.yml @@ -10,9 +10,9 @@ on: - '*' env: - ORG_GRADLE_PROJECT_enableTestDistribution: true - ORG_GRADLE_PROJECT_junitBuildCacheUsername: ${{ secrets.BUILD_CACHE_USERNAME }} - ORG_GRADLE_PROJECT_junitBuildCachePassword: ${{ secrets.BUILD_CACHE_PASSWORD }} + ENTERPRISE_TESTDISTRIBUTION_ENABLED: true + BUILDCACHE_USERNAME: ${{ secrets.BUILD_CACHE_USERNAME }} + BUILDCACHE_PASSWORD: ${{ secrets.BUILD_CACHE_PASSWORD }} GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} jobs: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 25b8e9db7f72..676ec1a2f87a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,9 +10,9 @@ on: - '*' env: - ORG_GRADLE_PROJECT_enableTestDistribution: true - ORG_GRADLE_PROJECT_junitBuildCacheUsername: ${{ secrets.BUILD_CACHE_USERNAME }} - ORG_GRADLE_PROJECT_junitBuildCachePassword: ${{ secrets.BUILD_CACHE_PASSWORD }} + ENTERPRISE_TESTDISTRIBUTION_ENABLED: true + BUILDCACHE_USERNAME: ${{ secrets.BUILD_CACHE_USERNAME }} + BUILDCACHE_PASSWORD: ${{ secrets.BUILD_CACHE_PASSWORD }} GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} jobs: @@ -38,7 +38,7 @@ jobs: uses: ./.github/actions/main-build with: arguments: | - -PenableJaCoCo + -Ptesting.enableJaCoCo build jacocoRootReport prepareDocsForUploadToGhPages diff --git a/README.md b/README.md index 7b4bb98a40c3..aa095c5e67be 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ builds of the next OpenJDK. Code coverage using [JaCoCo] for the latest build is available on [Codecov]. A code coverage report can also be generated locally via the [Gradle Wrapper] by -executing `./gradlew -PenableJaCoCo clean jacocoRootReport`. The results will be available +executing `./gradlew -Ptesting.enableJaCoCo clean jacocoRootReport`. The results will be available in `build/reports/jacoco/jacocoRootReport/html/index.html`. ## Gradle Enterprise diff --git a/build.gradle.kts b/build.gradle.kts index 7662a5524b31..f1cf305950ea 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -61,5 +61,5 @@ nexusPublishing { } nohttp { - source.exclude("**/.gradle/**", "gradle/plugins/build/**") + source.exclude("**/.gradle/**", "gradle/plugins/**/build/**") } diff --git a/documentation/documentation.gradle.kts b/documentation/documentation.gradle.kts index c90891a62be6..2c2ac600ba6a 100644 --- a/documentation/documentation.gradle.kts +++ b/documentation/documentation.gradle.kts @@ -12,6 +12,7 @@ plugins { id("org.asciidoctor.jvm.convert") id("org.asciidoctor.jvm.pdf") id("org.ajoberstar.git-publish") + id("junitbuild.build-parameters") id("junitbuild.kotlin-library-conventions") id("junitbuild.testing-conventions") } @@ -71,7 +72,7 @@ val snapshot = rootProject.version.toString().contains("SNAPSHOT") val docsVersion = if (snapshot) "snapshot" else rootProject.version val releaseBranch = if (snapshot) "HEAD" else "r${rootProject.version}" val docsDir = file("$buildDir/ghpages-docs") -val replaceCurrentDocs = project.hasProperty("replaceCurrentDocs") +val replaceCurrentDocs = buildParameters.documentation.replaceCurrentDocs val uploadPdfs = !snapshot val userGuidePdfFileName = "junit-user-guide-${rootProject.version}.pdf" val ota4jDocVersion = if (libs.versions.opentest4j.get().contains("SNAPSHOT")) "snapshot" else libs.versions.opentest4j.get() diff --git a/gradle/plugins/build-parameters/build.gradle.kts b/gradle/plugins/build-parameters/build.gradle.kts new file mode 100644 index 000000000000..d246161af8fa --- /dev/null +++ b/gradle/plugins/build-parameters/build.gradle.kts @@ -0,0 +1,81 @@ +plugins { + id("org.gradlex.build-parameters") version "1.4.3" +} + +group = "junitbuild" + +buildParameters { + pluginId("junitbuild.build-parameters") + bool("ci") { + description.set("Whether or not this build is running in a CI environment") + defaultValue.set(false) + fromEnvironment() + } + integer("javaToolchainVersion") { + description.set("Defines the Java toolchain version to use for compiling code") + } + group("buildCache") { + string("username") { + description.set("Username to authenticate with the remote build cache") + fromEnvironment() + } + string("password") { + description.set("Password to authenticate with the remote build cache") + fromEnvironment() + } + string("url") { + description.set("URL to the remote build cache") + fromEnvironment() + } + } + group("documentation") { + description.set("Parameters controlling how the documentation is built") + bool("replaceCurrentDocs") { + description.set("The documentation that is being deployed will replace what's currently deployed as 'current'") + defaultValue.set(false) + } + } + group("enterprise") { + description.set("Parameters controlling Gradle Enterprise features") + group("predictiveTestSelection") { + bool("enabled") { + description.set("Whether or not to use Predictive Test Selection for selecting tests to execute") + defaultValue.set(true) + } + } + group("testDistribution") { + bool("enabled") { + description.set("Whether or not to use Test Distribution for executing tests") + defaultValue.set(false) + fromEnvironment() + } + integer("maxLocalExecutors") { + description.set("How many local executors to use for executing tests") + defaultValue.set(1) + } + integer("maxRemoteExecutors") { + description.set("How many remote executors to request for executing tests") + } + } + } + group("testing") { + description.set("Testing related parameters") + bool("enableJaCoCo") { + description.set("Enables JaCoCo test coverage reporting") + defaultValue.set(false) + } + bool("enableJFR") { + description.set("Enables Java Flight Recorder functionality") + defaultValue.set(false) + } + integer("retries") { + description.set("Configures the number of times failing test are retried") + } + } +} + +tasks { + withType().configureEach { + options.release.set(11) + } +} diff --git a/gradle/plugins/build.gradle.kts b/gradle/plugins/common/build.gradle.kts similarity index 94% rename from gradle/plugins/build.gradle.kts rename to gradle/plugins/common/build.gradle.kts index e499f8cca6f5..88ec294b01fd 100644 --- a/gradle/plugins/build.gradle.kts +++ b/gradle/plugins/common/build.gradle.kts @@ -10,6 +10,7 @@ repositories { } dependencies { + implementation(project(":build-parameters")) implementation(kotlin("gradle-plugin")) implementation("biz.aQute.bnd:biz.aQute.bnd.gradle:6.4.0") implementation("com.diffplug.spotless:spotless-plugin-gradle:6.15.0") diff --git a/gradle/plugins/src/main/kotlin/ConfigurationContainerExtensions.kt b/gradle/plugins/common/src/main/kotlin/ConfigurationContainerExtensions.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/ConfigurationContainerExtensions.kt rename to gradle/plugins/common/src/main/kotlin/ConfigurationContainerExtensions.kt diff --git a/gradle/plugins/src/main/kotlin/JavaLibraryExtension.kt b/gradle/plugins/common/src/main/kotlin/JavaLibraryExtension.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/JavaLibraryExtension.kt rename to gradle/plugins/common/src/main/kotlin/JavaLibraryExtension.kt diff --git a/gradle/plugins/src/main/kotlin/License.kt b/gradle/plugins/common/src/main/kotlin/License.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/License.kt rename to gradle/plugins/common/src/main/kotlin/License.kt diff --git a/gradle/plugins/src/main/kotlin/ProjectExtensions.kt b/gradle/plugins/common/src/main/kotlin/ProjectExtensions.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/ProjectExtensions.kt rename to gradle/plugins/common/src/main/kotlin/ProjectExtensions.kt diff --git a/gradle/plugins/src/main/kotlin/TaskExtensions.kt b/gradle/plugins/common/src/main/kotlin/TaskExtensions.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/TaskExtensions.kt rename to gradle/plugins/common/src/main/kotlin/TaskExtensions.kt diff --git a/gradle/plugins/src/main/kotlin/junitbuild.base-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.base-conventions.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.base-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.base-conventions.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.build-metadata.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.build-metadata.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.build-metadata.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.build-metadata.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.dependency-update-check.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.dependency-update-check.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.dependency-update-check.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.dependency-update-check.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.jacoco-aggregation-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.jacoco-aggregation-conventions.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.jacoco-aggregation-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.jacoco-aggregation-conventions.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.jacoco-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.jacoco-conventions.gradle.kts similarity index 61% rename from gradle/plugins/src/main/kotlin/junitbuild.jacoco-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.jacoco-conventions.gradle.kts index 03e5c8851345..ef29df71f8c0 100644 --- a/gradle/plugins/src/main/kotlin/junitbuild.jacoco-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.jacoco-conventions.gradle.kts @@ -1,13 +1,12 @@ plugins { jacoco + id("junitbuild.build-parameters") } -val enableJaCoCo = project.hasProperty("enableJaCoCo") - jacoco { toolVersion = requiredVersionFromLibs("jacoco") } tasks.withType().configureEach { - enabled = enableJaCoCo + enabled = buildParameters.testing.enableJaCoCo } diff --git a/gradle/plugins/src/main/kotlin/junitbuild.jacoco-java-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.jacoco-java-conventions.gradle.kts similarity index 90% rename from gradle/plugins/src/main/kotlin/junitbuild.jacoco-java-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.jacoco-java-conventions.gradle.kts index 42f7c754fd4e..7bc6a3a8e214 100644 --- a/gradle/plugins/src/main/kotlin/junitbuild.jacoco-java-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.jacoco-java-conventions.gradle.kts @@ -3,15 +3,15 @@ import org.gradle.api.attributes.LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE plugins { java + id("junitbuild.build-parameters") id("junitbuild.jacoco-conventions") } val mavenizedProjects: List by rootProject.extra -val enableJaCoCo = project.hasProperty("enableJaCoCo") tasks.withType().configureEach { configure { - isEnabled = enableJaCoCo + isEnabled = buildParameters.testing.enableJaCoCo } } diff --git a/gradle/plugins/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.java-library-conventions.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.java-multi-release-sources.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.java-multi-release-sources.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.java-multi-release-sources.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.java-multi-release-sources.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.java-repackage-jars.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.java-repackage-jars.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.java-repackage-jars.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.java-repackage-jars.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.java-toolchain-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.java-toolchain-conventions.gradle.kts similarity index 87% rename from gradle/plugins/src/main/kotlin/junitbuild.java-toolchain-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.java-toolchain-conventions.gradle.kts index 87c334d2621e..5cd96cf5180e 100644 --- a/gradle/plugins/src/main/kotlin/junitbuild.java-toolchain-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.java-toolchain-conventions.gradle.kts @@ -1,9 +1,12 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension +plugins { + id("junitbuild.build-parameters") +} + project.pluginManager.withPlugin("java") { - val javaToolchainVersion: String? by project val defaultLanguageVersion = JavaLanguageVersion.of(17) - val javaLanguageVersion = javaToolchainVersion?.let { JavaLanguageVersion.of(it) } ?: defaultLanguageVersion + val javaLanguageVersion = buildParameters.javaToolchainVersion.map { JavaLanguageVersion.of(it) }.getOrElse(defaultLanguageVersion) val extension = the() val javaToolchainService = the() diff --git a/gradle/plugins/src/main/kotlin/junitbuild.junit4-compatibility.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.junit4-compatibility.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.junit4-compatibility.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.junit4-compatibility.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.kotlin-library-conventions.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.osgi-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.osgi-conventions.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.osgi-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.osgi-conventions.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.publishing-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.publishing-conventions.gradle.kts similarity index 94% rename from gradle/plugins/src/main/kotlin/junitbuild.publishing-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.publishing-conventions.gradle.kts index 7f8b617b3084..876612f0609c 100644 --- a/gradle/plugins/src/main/kotlin/junitbuild.publishing-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.publishing-conventions.gradle.kts @@ -2,10 +2,10 @@ plugins { `maven-publish` signing id("junitbuild.base-conventions") + id("junitbuild.build-parameters") } val isSnapshot = project.version.toString().contains("SNAPSHOT") -val isContinuousIntegrationEnvironment = System.getenv("CI")?.toBoolean() ?: false val jupiterProjects: List by rootProject val platformProjects: List by rootProject @@ -43,7 +43,7 @@ tasks.withType().configureEach { signing { useGpgCmd() sign(publishing.publications) - isRequired = !(isSnapshot || isContinuousIntegrationEnvironment) + isRequired = !(isSnapshot || buildParameters.ci) } tasks.withType().configureEach { diff --git a/gradle/plugins/src/main/kotlin/junitbuild.shadow-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.shadow-conventions.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.shadow-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.shadow-conventions.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.spotless-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.spotless-conventions.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.spotless-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.spotless-conventions.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.temp-maven-repo.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.temp-maven-repo.gradle.kts similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild.temp-maven-repo.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.temp-maven-repo.gradle.kts diff --git a/gradle/plugins/src/main/kotlin/junitbuild.testing-conventions.gradle.kts b/gradle/plugins/common/src/main/kotlin/junitbuild.testing-conventions.gradle.kts similarity index 75% rename from gradle/plugins/src/main/kotlin/junitbuild.testing-conventions.gradle.kts rename to gradle/plugins/common/src/main/kotlin/junitbuild.testing-conventions.gradle.kts index a11546e4d937..032661be08d0 100644 --- a/gradle/plugins/src/main/kotlin/junitbuild.testing-conventions.gradle.kts +++ b/gradle/plugins/common/src/main/kotlin/junitbuild.testing-conventions.gradle.kts @@ -6,6 +6,7 @@ import org.gradle.internal.os.OperatingSystem plugins { `java-library` + id("junitbuild.build-parameters") } tasks.withType().configureEach { @@ -17,18 +18,14 @@ tasks.withType().configureEach { events = setOf(FAILED) exceptionFormat = FULL } - val isCiServer = System.getenv("CI") != null retry { - maxRetries.set(providers.gradleProperty("retries").map(String::toInt).orElse(if (isCiServer) 2 else 0)) + maxRetries.set(buildParameters.testing.retries.orElse(if (buildParameters.ci) 2 else 0)) } distribution { - enabled.convention(providers.gradleProperty("enableTestDistribution") - .map(String::toBoolean) - .map { enabled -> enabled && (!isCiServer || System.getenv("GRADLE_ENTERPRISE_ACCESS_KEY").isNotBlank()) } - .orElse(false)) - maxLocalExecutors.set(providers.gradleProperty("testDistribution.maxLocalExecutors").map(String::toInt).orElse(1)) - maxRemoteExecutors.set(providers.gradleProperty("testDistribution.maxRemoteExecutors").map(String::toInt)) - if (isCiServer) { + enabled.convention(buildParameters.enterprise.testDistribution.enabled && (!buildParameters.ci || System.getenv("GRADLE_ENTERPRISE_ACCESS_KEY").isNotBlank())) + maxLocalExecutors.set(buildParameters.enterprise.testDistribution.maxLocalExecutors) + maxRemoteExecutors.set(buildParameters.enterprise.testDistribution.maxRemoteExecutors) + if (buildParameters.ci) { when { OperatingSystem.current().isLinux -> requirements.add("os=linux") OperatingSystem.current().isWindows -> requirements.add("os=windows") @@ -37,7 +34,7 @@ tasks.withType().configureEach { } } predictiveSelection { - enabled.set(providers.gradleProperty("enablePredictiveTestSelection").map(String::toBoolean).orElse(true)) + enabled.set(buildParameters.enterprise.predictiveTestSelection.enabled) // Ensure PTS works when publishing Build Scans to scans.gradle.com this as PredictiveTestSelectionExtensionInternal @@ -46,7 +43,7 @@ tasks.withType().configureEach { systemProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager") // Required until ASM officially supports the JDK 14 systemProperty("net.bytebuddy.experimental", true) - if (project.hasProperty("enableJFR")) { + if (buildParameters.testing.enableJFR) { jvmArgs( "-XX:+UnlockDiagnosticVMOptions", "-XX:+DebugNonSafepoints", @@ -59,7 +56,7 @@ tasks.withType().configureEach { trackOperationSystemAsInput() // Avoid passing unnecessary environment variables to the JVM (from GitHub Actions) - if (isCiServer) { + if (buildParameters.ci) { environment.remove("RUNNER_TEMP") environment.remove("GITHUB_ACTION") } diff --git a/gradle/plugins/src/main/kotlin/junitbuild/exec/ClasspathSystemPropertyProvider.kt b/gradle/plugins/common/src/main/kotlin/junitbuild/exec/ClasspathSystemPropertyProvider.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild/exec/ClasspathSystemPropertyProvider.kt rename to gradle/plugins/common/src/main/kotlin/junitbuild/exec/ClasspathSystemPropertyProvider.kt diff --git a/gradle/plugins/src/main/kotlin/junitbuild/exec/RunConsoleLauncher.kt b/gradle/plugins/common/src/main/kotlin/junitbuild/exec/RunConsoleLauncher.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild/exec/RunConsoleLauncher.kt rename to gradle/plugins/common/src/main/kotlin/junitbuild/exec/RunConsoleLauncher.kt diff --git a/gradle/plugins/src/main/kotlin/junitbuild/java/ExecJarAction.kt b/gradle/plugins/common/src/main/kotlin/junitbuild/java/ExecJarAction.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild/java/ExecJarAction.kt rename to gradle/plugins/common/src/main/kotlin/junitbuild/java/ExecJarAction.kt diff --git a/gradle/plugins/src/main/kotlin/junitbuild/java/ModuleCompileOptions.kt b/gradle/plugins/common/src/main/kotlin/junitbuild/java/ModuleCompileOptions.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild/java/ModuleCompileOptions.kt rename to gradle/plugins/common/src/main/kotlin/junitbuild/java/ModuleCompileOptions.kt diff --git a/gradle/plugins/src/main/kotlin/junitbuild/java/ModulePathArgumentProvider.kt b/gradle/plugins/common/src/main/kotlin/junitbuild/java/ModulePathArgumentProvider.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild/java/ModulePathArgumentProvider.kt rename to gradle/plugins/common/src/main/kotlin/junitbuild/java/ModulePathArgumentProvider.kt diff --git a/gradle/plugins/src/main/kotlin/junitbuild/java/PatchModuleArgumentProvider.kt b/gradle/plugins/common/src/main/kotlin/junitbuild/java/PatchModuleArgumentProvider.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild/java/PatchModuleArgumentProvider.kt rename to gradle/plugins/common/src/main/kotlin/junitbuild/java/PatchModuleArgumentProvider.kt diff --git a/gradle/plugins/src/main/kotlin/junitbuild/java/WriteArtifactsFile.kt b/gradle/plugins/common/src/main/kotlin/junitbuild/java/WriteArtifactsFile.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild/java/WriteArtifactsFile.kt rename to gradle/plugins/common/src/main/kotlin/junitbuild/java/WriteArtifactsFile.kt diff --git a/gradle/plugins/src/main/kotlin/junitbuild/javadoc/ModuleSpecificJavadocFileOption.kt b/gradle/plugins/common/src/main/kotlin/junitbuild/javadoc/ModuleSpecificJavadocFileOption.kt similarity index 100% rename from gradle/plugins/src/main/kotlin/junitbuild/javadoc/ModuleSpecificJavadocFileOption.kt rename to gradle/plugins/common/src/main/kotlin/junitbuild/javadoc/ModuleSpecificJavadocFileOption.kt diff --git a/gradle/plugins/settings.gradle.kts b/gradle/plugins/settings.gradle.kts index e69de29bb2d1..ac0f7bb49c42 100644 --- a/gradle/plugins/settings.gradle.kts +++ b/gradle/plugins/settings.gradle.kts @@ -0,0 +1,2 @@ +include("build-parameters") +include("common") diff --git a/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts b/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts index 21c6f6c08d11..5be604bd0a8d 100644 --- a/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts +++ b/platform-tooling-support-tests/platform-tooling-support-tests.gradle.kts @@ -2,6 +2,7 @@ import org.gradle.api.tasks.PathSensitivity.RELATIVE import org.gradle.jvm.toolchain.internal.NoToolchainAvailableException plugins { + id("junitbuild.build-parameters") id("junitbuild.kotlin-library-conventions") id("junitbuild.testing-conventions") } @@ -135,8 +136,6 @@ class MavenRepo(@get:InputDirectory @get:PathSensitive(RELATIVE) val repoDir: Fi } class JavaHomeDir(project: Project, @Input val version: Int) : CommandLineArgumentProvider { - @Internal - val passToolchain = project.providers.gradleProperty("enableTestDistribution").map(String::toBoolean).orElse(false).map { !it } @Internal val javaLauncher: Property = project.objects.property() @@ -151,7 +150,7 @@ class JavaHomeDir(project: Project, @Input val version: Int) : CommandLineArgume }) override fun asArguments(): List { - if (passToolchain.get()) { + if (buildParameters.enterprise.testDistribution.enabled) { val metadata = javaLauncher.map { it.metadata } val javaHome = metadata.map { it.installationPath.asFile.absolutePath }.orNull return javaHome?.let { listOf("-Djava.home.$version=$it") } ?: emptyList() diff --git a/settings.gradle.kts b/settings.gradle.kts index 07d42905f4fe..cc8b9fb0b8fc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,4 @@ +import buildparameters.BuildParametersExtension import com.gradle.enterprise.gradleplugin.internal.extension.BuildScanExtensionWithHiddenFeatures pluginManagement { @@ -24,6 +25,7 @@ plugins { id("com.gradle.enterprise") id("com.gradle.common-custom-user-data-gradle-plugin") id("org.gradle.toolchains.foojay-resolver-convention") + id("junitbuild.build-parameters") } dependencyResolutionManagement { @@ -38,15 +40,11 @@ dependencyResolutionManagement { } val gradleEnterpriseServer = "https://ge.junit.org" -val isCiServer = System.getenv("CI") != null -val junitBuildCacheUrl: String? by extra -val junitBuildCacheUsername: String? by extra -val junitBuildCachePassword: String? by extra gradleEnterprise { buildScan { capture.isTaskInputFiles = true - isUploadInBackground = !isCiServer + isUploadInBackground = !buildParameters.ci publishAlways() @@ -58,7 +56,7 @@ gradleEnterprise { } obfuscation { - if (isCiServer) { + if (buildParameters.ci) { username { "github" } } else { hostname { null } @@ -66,10 +64,7 @@ gradleEnterprise { } } - val enableTestDistribution = providers.gradleProperty("enableTestDistribution") - .map(String::toBoolean) - .getOrElse(false) - if (enableTestDistribution) { + if (buildParameters.enterprise.testDistribution.enabled) { tag("test-distribution") } } @@ -77,14 +72,16 @@ gradleEnterprise { buildCache { local { - isEnabled = !isCiServer + isEnabled = !buildParameters.ci } remote { - url = uri(junitBuildCacheUrl ?: "$gradleEnterpriseServer/cache/") - isPush = isCiServer && !junitBuildCacheUsername.isNullOrEmpty() && !junitBuildCachePassword.isNullOrEmpty() + url = uri(buildParameters.buildCache.url.getOrElse("$gradleEnterpriseServer/cache/")) + val buildCacheUsername = buildParameters.buildCache.username.map { it.ifBlank { null } } + val buildCachePassword = buildParameters.buildCache.password.map { it.ifBlank { null } } + isPush = buildParameters.ci && buildCacheUsername.isPresent && buildCachePassword.isPresent credentials { - username = junitBuildCacheUsername?.ifEmpty { null } - password = junitBuildCachePassword?.ifEmpty { null } + username = buildCacheUsername.orNull + password = buildCachePassword.orNull } } } @@ -132,4 +129,7 @@ rootProject.children.forEach { project -> } } +val buildParameters: BuildParametersExtension + get() = the() + enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")