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 @@ |
|||||||
|
/* |
||||||
|
* 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 @@ |
|||||||
|
/* |
||||||
|
* 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