From f67c20873d83df8daf9c2e0c670fa073986d0970 Mon Sep 17 00:00:00 2001 From: Cedric Champeau Date: Fri, 29 Apr 2022 09:59:13 +0200 Subject: [PATCH 1/2] Expose test selection property via build environment This will let project which do not use the "common plugin" code to enable test selection. This is typically the case of the Micronaut Gradle plugin which isn't a typical Micronaut library. --- .../build/MicronautBuildCommonPlugin.groovy | 16 +--------------- .../io/micronaut/build/BuildEnvironment.java | 18 +++++++++++++++++- .../build/MicronautGradleEnterprisePlugin.java | 16 ++++++++++++++++ 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/main/groovy/io/micronaut/build/MicronautBuildCommonPlugin.groovy b/src/main/groovy/io/micronaut/build/MicronautBuildCommonPlugin.groovy index 2395c8fc..e204f8e8 100644 --- a/src/main/groovy/io/micronaut/build/MicronautBuildCommonPlugin.groovy +++ b/src/main/groovy/io/micronaut/build/MicronautBuildCommonPlugin.groovy @@ -108,21 +108,7 @@ class MicronautBuildCommonPlugin implements Plugin { } } - // Predictive test selection is enabled if: - // an environment variable is explicitly configured and set to true - // or a system property is explicitly configured and set to true - // or it's a local build - def testSelectionEnabled = project.providers.environmentVariable("PREDICTIVE_TEST_SELECTION") - .orElse(project.providers.systemProperty("predictiveTestSelection")) - .map { - if (it.trim()) { - Boolean.parseBoolean(it) - } else { - true - } - } - .orElse(micronautBuildExtension.environment.isNotGithubAction()) - + def testSelectionEnabled = micronautBuildExtension.environment.isTestSelectionEnabled() project.dependencies { testImplementation(testSelectionEnabled.map { enabled -> if (enabled) { diff --git a/src/main/java/io/micronaut/build/BuildEnvironment.java b/src/main/java/io/micronaut/build/BuildEnvironment.java index bc185b90..0d1135e6 100644 --- a/src/main/java/io/micronaut/build/BuildEnvironment.java +++ b/src/main/java/io/micronaut/build/BuildEnvironment.java @@ -26,7 +26,7 @@ public class BuildEnvironment { public BuildEnvironment(ProviderFactory providers) { this.providers = providers; - this.githubAction = trueWhenEnvVarPresent( "GITHUB_ACTIONS"); + this.githubAction = trueWhenEnvVarPresent("GITHUB_ACTIONS"); this.isMigrationActive = !providers.systemProperty("strictBuild") .forUseAtConfigurationTime() .isPresent(); @@ -47,6 +47,22 @@ public Provider trueWhenEnvVarPresent(String envVar) { .orElse(false); } + public Provider isTestSelectionEnabled() { + // Predictive test selection is enabled if: + // an environment variable is explicitly configured and set to true + // or a system property is explicitly configured and set to true + // or it's a local build + return providers.environmentVariable("PREDICTIVE_TEST_SELECTION") + .orElse(providers.systemProperty("predictiveTestSelection")) + .map(it -> { + if (it.trim().length() > 0) { + return Boolean.parseBoolean(it); + } + return false; + }) + .orElse(isNotGithubAction()); + } + public void duringMigration(Runnable action) { if (isMigrationActive) { action.run(); diff --git a/src/main/java/io/micronaut/build/MicronautGradleEnterprisePlugin.java b/src/main/java/io/micronaut/build/MicronautGradleEnterprisePlugin.java index 0f64ffb8..da6f256f 100644 --- a/src/main/java/io/micronaut/build/MicronautGradleEnterprisePlugin.java +++ b/src/main/java/io/micronaut/build/MicronautGradleEnterprisePlugin.java @@ -35,6 +35,10 @@ import static io.micronaut.build.ProviderUtils.envOrSystemProperty; public class MicronautGradleEnterprisePlugin implements Plugin { + private static final String[] SAFE_TO_LOG_ENV_VARIABLES = new String[] { + "PREDICTIVE_TEST_SELECTION" + }; + @Override public void apply(Settings settings) { PluginManager pluginManager = settings.getPluginManager(); @@ -89,6 +93,18 @@ private void configureGradleEnterprise(Settings settings, }); } }); + BuildEnvironment buildEnvironment = new BuildEnvironment(providers); + if (Boolean.TRUE.equals(buildEnvironment.isTestSelectionEnabled().get())) { + ge.getBuildScan().tag("Predictive Test Selection"); + } + captureSafeEnvironmentVariables(ge); + } + } + + private void captureSafeEnvironmentVariables(GradleEnterpriseExtension ge) { + for (String variable : SAFE_TO_LOG_ENV_VARIABLES) { + String value = System.getenv(variable); + ge.getBuildScan().value("env." + variable, value == null ? "" : value); } } From 508afa98acab0367826b276d7f31b5d8b47feae5 Mon Sep 17 00:00:00 2001 From: Cedric Champeau Date: Fri, 29 Apr 2022 10:10:57 +0200 Subject: [PATCH 2/2] Introduce constants --- src/main/java/io/micronaut/build/BuildEnvironment.java | 6 ++++-- .../io/micronaut/build/MicronautGradleEnterprisePlugin.java | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/micronaut/build/BuildEnvironment.java b/src/main/java/io/micronaut/build/BuildEnvironment.java index 0d1135e6..cc26cdad 100644 --- a/src/main/java/io/micronaut/build/BuildEnvironment.java +++ b/src/main/java/io/micronaut/build/BuildEnvironment.java @@ -20,6 +20,8 @@ public class BuildEnvironment { + public static final String PREDICTIVE_TEST_SELECTION_ENV_VAR = "PREDICTIVE_TEST_SELECTION"; + public static final String PREDICTIVE_TEST_SELECTION_SYSPROP = "predictiveTestSelection"; private final ProviderFactory providers; private final Provider githubAction; private final boolean isMigrationActive; @@ -52,8 +54,8 @@ public Provider isTestSelectionEnabled() { // an environment variable is explicitly configured and set to true // or a system property is explicitly configured and set to true // or it's a local build - return providers.environmentVariable("PREDICTIVE_TEST_SELECTION") - .orElse(providers.systemProperty("predictiveTestSelection")) + return providers.environmentVariable(PREDICTIVE_TEST_SELECTION_ENV_VAR) + .orElse(providers.systemProperty(PREDICTIVE_TEST_SELECTION_SYSPROP)) .map(it -> { if (it.trim().length() > 0) { return Boolean.parseBoolean(it); diff --git a/src/main/java/io/micronaut/build/MicronautGradleEnterprisePlugin.java b/src/main/java/io/micronaut/build/MicronautGradleEnterprisePlugin.java index da6f256f..ffb147dd 100644 --- a/src/main/java/io/micronaut/build/MicronautGradleEnterprisePlugin.java +++ b/src/main/java/io/micronaut/build/MicronautGradleEnterprisePlugin.java @@ -32,11 +32,12 @@ import java.lang.reflect.InvocationTargetException; +import static io.micronaut.build.BuildEnvironment.PREDICTIVE_TEST_SELECTION_ENV_VAR; import static io.micronaut.build.ProviderUtils.envOrSystemProperty; public class MicronautGradleEnterprisePlugin implements Plugin { private static final String[] SAFE_TO_LOG_ENV_VARIABLES = new String[] { - "PREDICTIVE_TEST_SELECTION" + PREDICTIVE_TEST_SELECTION_ENV_VAR }; @Override