Browse Source
The plugin is configured to detect flaky tests and retry them 3 times when running on the CI, but still reports failures. This will provide a standard way to detect flaky tests as failures and successful attempts are shown in the tests report.pull/29282/head
Brian Clozel
2 years ago
7 changed files with 112 additions and 12 deletions
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
/* |
||||
* Copyright 2002-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.build; |
||||
|
||||
import org.gradle.api.Plugin; |
||||
import org.gradle.api.Project; |
||||
import org.gradle.api.plugins.JavaBasePlugin; |
||||
|
||||
/** |
||||
* Plugin to apply conventions to projects that are part of Spring Framework's build. |
||||
* Conventions are applied in response to various plugins being applied. |
||||
* |
||||
* When the {@link JavaBasePlugin} is applied, the conventions in {@link TestConventions} |
||||
* are applied. |
||||
* When the {@link JavaBasePlugin} is applied, the conventions in {@link CompilerConventions} |
||||
* are applied. |
||||
* |
||||
* @author Brian Clozel |
||||
*/ |
||||
public class ConventionsPlugin implements Plugin<Project> { |
||||
|
||||
@Override |
||||
public void apply(Project project) { |
||||
new TestConventions().apply(project); |
||||
new CompilerConventions().apply(project); |
||||
} |
||||
} |
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
/* |
||||
* Copyright 2002-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.build; |
||||
|
||||
import org.gradle.api.Project; |
||||
import org.gradle.api.plugins.JavaBasePlugin; |
||||
import org.gradle.api.tasks.testing.Test; |
||||
import org.gradle.testretry.TestRetryPlugin; |
||||
import org.gradle.testretry.TestRetryTaskExtension; |
||||
|
||||
/** |
||||
* Conventions that are applied in the presence of the {@link JavaBasePlugin}. When the |
||||
* plugin is applied: |
||||
* <ul> |
||||
* <li>The {@link TestRetryPlugin Test Retry} plugins is applied so that flaky tests |
||||
* are retried 3 times when running on the CI. |
||||
* </ul> |
||||
* |
||||
* @author Brian Clozel |
||||
* @author Andy Wilkinson |
||||
*/ |
||||
class TestConventions { |
||||
|
||||
void apply(Project project) { |
||||
project.getPlugins().withType(JavaBasePlugin.class, (java) -> configureTestConventions(project)); |
||||
} |
||||
|
||||
private void configureTestConventions(Project project) { |
||||
project.getPlugins().apply(TestRetryPlugin.class); |
||||
project.getTasks().withType(Test.class, |
||||
(test) -> project.getPlugins().withType(TestRetryPlugin.class, (testRetryPlugin) -> { |
||||
TestRetryTaskExtension testRetry = test.getExtensions().getByType(TestRetryTaskExtension.class); |
||||
testRetry.getFailOnPassedAfterRetry().set(true); |
||||
testRetry.getMaxRetries().set(isCi() ? 3 : 0); |
||||
})); |
||||
} |
||||
|
||||
private boolean isCi() { |
||||
return Boolean.parseBoolean(System.getenv("CI")); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue