This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit b6b2e5802f9d575215620a41d532933aa907cfa0 Author: Peter Palaga <[email protected]> AuthorDate: Thu Feb 27 21:53:11 2020 +0100 Ensure that the GitHub Actions run each itest --- pom.xml | 21 +++++++++ tooling/scripts/validate-github-workflows.groovy | 56 ++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/pom.xml b/pom.xml index f03d68d..daba85f 100644 --- a/pom.xml +++ b/pom.xml @@ -301,6 +301,27 @@ </plugin> </plugins> </pluginManagement> + + <plugins> + <plugin> + <groupId>org.codehaus.gmaven</groupId> + <artifactId>groovy-maven-plugin</artifactId> + <executions> + <execution> + <id>validate-github-workflows</id> + <inherited>false</inherited> + <goals> + <goal>execute</goal> + </goals> + <phase>process-resources</phase> + <configuration> + <source>file:///${project.basedir}/tooling/scripts/validate-github-workflows.groovy</source> + </configuration> + </execution> + </executions> + </plugin> + + </plugins> </build> <profiles> diff --git a/tooling/scripts/validate-github-workflows.groovy b/tooling/scripts/validate-github-workflows.groovy new file mode 100644 index 0000000..db0da5e --- /dev/null +++ b/tooling/scripts/validate-github-workflows.groovy @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * + * http://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. + */ + +/** + * Makes sure that each itest is executed by the CI + */ +import java.nio.file.Path +import java.nio.file.Paths +import java.nio.file.Files +import java.util.regex.Matcher +import java.util.regex.Pattern +import java.util.stream.Collectors + +final Path treeRootDir = project.getBasedir().toPath() + +final String jobDefRelPath = '.github/workflows/pr-build.yaml' +final Path jobDefPath = treeRootDir.resolve(jobDefRelPath) +final String jobDefSource = new String(Files.readAllBytes(jobDefPath), 'UTF-8') + +final Set<String> executedBaseNames = [] as Set +final Matcher plMatcher = Pattern.compile('-pl :camel-quarkus-integration-test-([^\n ]+)').matcher(jobDefSource) +while (plMatcher.find()) { + executedBaseNames.add(plMatcher.group(1)) +} +final Matcher extensionMatcher = Pattern.compile('extension: *\\[ *\'([^\\]]+)\' *\\]').matcher(jobDefSource) +while (extensionMatcher.find()) { + extensionMatcher.group(1).split('\' *, *\'').each { executedBaseNames.add(it) } +} + +final Set<String> missingBaseNames = [] as TreeSet +final Set<String> itestBaseNames = Files.list(treeRootDir.resolve('integration-tests')) + .filter{ path -> Files.exists(path.resolve('pom.xml')) } + .map{ path -> path.getFileName().toString() } + .filter{ dirName -> !dirName.equals('support') } + .filter{ dirName -> !executedBaseNames.contains(dirName) } + .forEach{ dirName -> missingBaseNames.add(dirName) } + +if (!missingBaseNames.isEmpty()) { + throw new IllegalStateException('Integration tests not executed by the CI:\n\n ' + + missingBaseNames.join('\n ') + + '\n\n You may want to adapt ' + jobDefRelPath) +}
