This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch camel-quarkus-main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus-examples.git
The following commit(s) were added to refs/heads/camel-quarkus-main by this
push:
new 7fb72d4 Dynamically generate native test matrix
7fb72d4 is described below
commit 7fb72d472934797123ea521d123ae7d6739c3ff3
Author: James Netherton <[email protected]>
AuthorDate: Wed Feb 16 10:43:07 2022 +0000
Dynamically generate native test matrix
---
.github/generate-test-groups.groovy | 43 +++++++++++++++++++++++++++++++++++
.github/test-categories.yaml | 43 -----------------------------------
.github/workflows/ci-build.yaml | 45 +++++++++++++++++++------------------
3 files changed, 66 insertions(+), 65 deletions(-)
diff --git a/.github/generate-test-groups.groovy
b/.github/generate-test-groups.groovy
new file mode 100644
index 0000000..6987c2d
--- /dev/null
+++ b/.github/generate-test-groups.groovy
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+import groovy.json.JsonOutput;
+
+final int MAX_GROUPS = 10
+final List<Map<String, String>> GROUPS = new ArrayList<>()
+int groupId = 0
+
+// Distribute example projects across a bounded set of test groups and output
as JSON
+new File(".").eachFileRecurse { file ->
+ if (file.getName() == "pom.xml" && file.text.contains("<id>native</id>")) {
+ if (GROUPS[groupId] == null) {
+ GROUPS[groupId] = [:]
+ GROUPS[groupId].name = "group-${String.format("%02d", groupId +
1)}"
+ GROUPS[groupId].tests = ""
+ }
+
+ String separator = GROUPS[groupId].tests == "" ? "" : ","
+
+ GROUPS[groupId].tests =
"${GROUPS[groupId].tests}${separator}${file.parentFile.name}"
+
+ groupId += 1;
+ if (groupId == MAX_GROUPS) {
+ groupId = 0
+ }
+ }
+}
+
+print JsonOutput.toJson(["include": GROUPS])
diff --git a/.github/test-categories.yaml b/.github/test-categories.yaml
deleted file mode 100644
index bdaec59..0000000
--- a/.github/test-categories.yaml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-#
-# 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.
-#
-
-# Association of categories and camel-quarkus-examples maven modules. Used by
GitHub workflows.
-group-01:
- - file-bindy-ftp
- - file-split-log-xml
-group-02:
- - health
- - observability
-group-03:
- - http-log
- - rest-json
-group-04:
- - aws-lambda
- - timer-log
- - timer-log-cdi
-group-05:
- - timer-log-kotlin
- - timer-log-main
-group-06:
- - timer-log-spring
- - timer-log-xml
-group-07:
- - kafka
- - kamelet-chucknorris
-group-08:
- - jdbc-datasource
diff --git a/.github/workflows/ci-build.yaml b/.github/workflows/ci-build.yaml
index b040299..2727618 100644
--- a/.github/workflows/ci-build.yaml
+++ b/.github/workflows/ci-build.yaml
@@ -78,19 +78,6 @@ jobs:
license:check \
net.revelc.code.formatter:formatter-maven-plugin:validate \
net.revelc.code:impsort-maven-plugin:check
- - name: Validate test categories YAML
- run: |
- VALID=true
- for EXAMPLE in $(dirname $(grep -l "camel-quarkus-examples-" $(find
. -name pom.xml)) | cut -f2 -d'/'); do
- if ! grep ${EXAMPLE} .github/test-categories.yaml > /dev/null; then
- echo "Project ${EXAMPLE} is not listed in
.github/test-categories.yaml"
- VALID=false
- fi
- done
-
- if [[ ${VALID} != "true" ]]; then
- exit 1
- fi
- name: Build Camel Quarkus Examples
run: |
./mvnw-for-each.sh ${MAVEN_ARGS} clean install -DskipTests
-Dquarkus.build.skip
@@ -111,11 +98,12 @@ jobs:
- name: Setup Integration Test Matrix
id: set-itest-matrix
run: |
- CATEGORIES=$(yq -M -N -I 0 -o=json e 'keys'
.github/test-categories.yaml | tr '"' "'")
- echo "::set-output name=matrix::{'category': ${CATEGORIES}}"
+ sudo apt install groovy -y --no-install-recommends
+ TEST_GROUPS=$(groovy .github/generate-test-groups.groovy)
+ echo "::set-output name=matrix::${TEST_GROUPS}"
integration-tests:
- name: Integration Tests - ${{matrix.category}}
+ name: Integration Tests - ${{matrix.name}}
needs: initial-mvn-install
runs-on: ubuntu-latest
strategy:
@@ -139,18 +127,31 @@ jobs:
run: |
tar -xzf ../maven-repo.tgz -C ~
- name: Integration Tests
+ env:
+ TEST_MODULES: ${{matrix.tests}}
+ shell: '/usr/bin/bash {0}'
run: |
- EXAMPLE_PROJECTS=""
- for EXAMPLE in $(yq -M -N e ".${{ matrix.category }}"
.github/test-categories.yaml | cut -f2 -d' '); do
- if [ "${EXAMPLE}" == "null" ]; then
- continue
- fi
+ BUILD_FAILURES=()
+ for MODULE in ${TEST_MODULES//,/ }; do
./mvnw ${MAVEN_ARGS} clean verify \
-Dformatter.skip -Dimpsort.skip \
-Pnative,docker \
- -f "${EXAMPLE}/pom.xml"
+ -f "${MODULE}/pom.xml"
+
+ if [[ $? -ne 0 ]]; then
+ BUILD_FAILURES[${#BUILD_FAILURES[@]}]=${MODULE}
+ fi
done
+
+ if [[ ${#BUILD_FAILURES[@]} -gt 0 ]]; then
+ echo -e "\nBuild errors were encountred in the following
projects:\n"
+ for FAILURE in ${BUILD_FAILURES[@]}; do
+ echo "* ${FAILURE}"
+ done
+ echo -e "\nCheck build logs for further information."
+ exit 1
+ fi
- name: Fail if there are uncommitted changes
shell: bash
run: |