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")