Commit c0f748e1 authored by Andy Wilkinson's avatar Andy Wilkinson

Always apply retry plugin but only retry on CI

Previously, the retry plugin was only applied on CI as we do not want
tests to be retried in local builds. Unfortunately, this arrangement
led to test tasks from CI builds having additional doFirst and doLast
actions and an additional property. These differences meant that the
output from a test task that has run on CI could not be used by a
local build.

This commit changes our configuration of the test retry plugin so
that it is now always applied. To retain the behaviour of only
retrying tests on CI, max retries is configured to 3 on CI and 0 for
local builds.

Closes gh-21698
parent 4d37430b
...@@ -109,15 +109,17 @@ class JavaConventions { ...@@ -109,15 +109,17 @@ class JavaConventions {
test.useJUnitPlatform(); test.useJUnitPlatform();
test.setMaxHeapSize("1024M"); test.setMaxHeapSize("1024M");
}); });
if (Boolean.parseBoolean(System.getenv("CI"))) { project.getPlugins().apply(TestRetryPlugin.class);
project.getPlugins().apply(TestRetryPlugin.class); project.getTasks().withType(Test.class,
project.getTasks().withType(Test.class, (test) -> project.getPlugins().withType(TestRetryPlugin.class, (testRetryPlugin) -> {
(test) -> project.getPlugins().withType(TestRetryPlugin.class, (testRetryPlugin) -> { TestRetryTaskExtension testRetry = test.getExtensions().getByType(TestRetryTaskExtension.class);
TestRetryTaskExtension testRetry = test.getExtensions().getByType(TestRetryTaskExtension.class); testRetry.getFailOnPassedAfterRetry().set(true);
testRetry.getFailOnPassedAfterRetry().set(true); testRetry.getMaxRetries().set(isCi() ? 3 : 0);
testRetry.getMaxRetries().set(3); }));
})); }
}
private boolean isCi() {
return Boolean.parseBoolean(System.getenv("CI"));
} }
private void configureJavadocConventions(Project project) { private void configureJavadocConventions(Project project) {
......
...@@ -78,7 +78,7 @@ class ConventionsPluginTests { ...@@ -78,7 +78,7 @@ class ConventionsPluginTests {
} }
@Test @Test
void testRetryIsConfiguredOnCI() throws IOException { void testRetryIsConfiguredWithThreeRetriesOnCI() throws IOException {
try (PrintWriter out = new PrintWriter(new FileWriter(this.buildFile))) { try (PrintWriter out = new PrintWriter(new FileWriter(this.buildFile))) {
out.println("plugins {"); out.println("plugins {");
out.println(" id 'java'"); out.println(" id 'java'");
...@@ -101,7 +101,7 @@ class ConventionsPluginTests { ...@@ -101,7 +101,7 @@ class ConventionsPluginTests {
} }
@Test @Test
void testRetryIsNotConfiguredLocally() throws IOException { void testRetryIsConfiguredWithZeroRetriesLocally() throws IOException {
try (PrintWriter out = new PrintWriter(new FileWriter(this.buildFile))) { try (PrintWriter out = new PrintWriter(new FileWriter(this.buildFile))) {
out.println("plugins {"); out.println("plugins {");
out.println(" id 'java'"); out.println(" id 'java'");
...@@ -111,11 +111,16 @@ class ConventionsPluginTests { ...@@ -111,11 +111,16 @@ class ConventionsPluginTests {
out.println("task retryConfig {"); out.println("task retryConfig {");
out.println(" doLast {"); out.println(" doLast {");
out.println(" println \"Retry plugin applied: ${plugins.hasPlugin('org.gradle.test-retry')}\""); out.println(" println \"Retry plugin applied: ${plugins.hasPlugin('org.gradle.test-retry')}\"");
out.println(" test.retry {");
out.println(" println \"maxRetries: ${maxRetries.get()}\"");
out.println(" println \"failOnPassedAfterRetry: ${failOnPassedAfterRetry.get()}\"");
out.println(" }");
out.println(" }"); out.println(" }");
out.println("}"); out.println("}");
} }
assertThat(runGradle(Collections.singletonMap("CI", "local"), "retryConfig", "--stacktrace").getOutput()) assertThat(runGradle(Collections.singletonMap("CI", "local"), "retryConfig", "--stacktrace").getOutput())
.contains("Retry plugin applied: false"); .contains("Retry plugin applied: true").contains("maxRetries: 0")
.contains("failOnPassedAfterRetry: true");
} }
private BuildResult runGradle(String... args) { private BuildResult runGradle(String... args) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment