From afa355fece7b57e5c3d6fa53393bc93679cd86fc Mon Sep 17 00:00:00 2001 From: Richard Zowalla Date: Wed, 1 Apr 2026 20:19:48 +0200 Subject: [PATCH 1/4] Speed up CI by building once on JDK 17 and fanning out tests. Restructure the GitHub Actions CI workflow into a build + test pipeline: - Compiles the project once on JDK 17 (minimum supported) - Runs RAT license check - Uploads artifacts for downstream test jobs - Eliminates redundant full rebuilds per test matrix entry - Add gitact-test.sh: a test-only CI script (no compile, no RAT) - Remove unused Ruby and Node.js setup from all workflows (storm-webapp uses frontend-maven-plugin with its own Node) --- .github/workflows/maven.yaml | 63 +++++++++++++++++++++++--------- .github/workflows/nightlies.yaml | 8 ---- .github/workflows/snapshots.yaml | 8 ---- dev-tools/gitact/gitact-test.sh | 60 ++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 33 deletions(-) create mode 100755 dev-tools/gitact/gitact-test.sh diff --git a/.github/workflows/maven.yaml b/.github/workflows/maven.yaml index f95b502aef4..efb598c5b2f 100644 --- a/.github/workflows/maven.yaml +++ b/.github/workflows/maven.yaml @@ -22,12 +22,48 @@ on: branches: [ "master" ] jobs: + # Compile once on the minimum supported JDK and share artifacts with test jobs build: - runs-on: ${{ matrix.os }} + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Set up Python + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: '3.10' + - name: Set up JDK 17 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 + with: + distribution: temurin + java-version: 17 + - name: Ensure a clean state without storm artifacts + run: rm -rf ~/.m2/repository/org/apache/storm + - name: Build project (compile + install, skip tests) + run: /bin/bash ./dev-tools/gitact/gitact-install.sh `pwd` + - name: RAT license check + run: mvn --batch-mode apache-rat:check -Prat + - name: Upload Storm artifacts + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: storm-build-artifacts + path: ~/.m2/repository/org/apache/storm/ + retention-days: 1 + + # Run tests on multiple JDKs using pre-built artifacts from the build job + test: + needs: build + runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental }} + timeout-minutes: 45 strategy: matrix: - os: [ ubuntu-latest ] java: [ 17, 21 ] module: [ Client, Server, Core, External, Integration-Test ] experimental: [false] @@ -40,29 +76,22 @@ jobs: key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- + - name: Download Storm artifacts + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + name: storm-build-artifacts + path: ~/.m2/repository/org/apache/storm/ - name: Set up Python uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: '3.10' - - name: Set up Node - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 - with: - node-version: 20 - - name: Set up Ruby - uses: ruby/setup-ruby@3ff19f5e2baf30647122352b96108b1fbe250c64 # v1.299.0 - with: - ruby-version: '2.7' - name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: temurin java-version: ${{ matrix.java }} - - name: Ensure a clean state without storm artifacts - run: rm -rf ~/.m2/repository/org/apache/storm - - name: Set up project dependencies - run: /bin/bash ./dev-tools/gitact/gitact-install.sh `pwd` - - name: Run build + - name: Run tests run: | - export JDK_VERSION=${{ matrix.java }} + export JDK_VERSION=${{ matrix.java }} export USER=github - /bin/bash ./dev-tools/gitact/gitact-script.sh `pwd` ${{ matrix.module }}; + /bin/bash ./dev-tools/gitact/gitact-test.sh `pwd` ${{ matrix.module }}; diff --git a/.github/workflows/nightlies.yaml b/.github/workflows/nightlies.yaml index 9e56f4b71ce..b6badea36fd 100644 --- a/.github/workflows/nightlies.yaml +++ b/.github/workflows/nightlies.yaml @@ -40,14 +40,6 @@ jobs: uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: '3.10' - - name: Set up Node - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 - with: - node-version: 16 - - name: Set up Ruby - uses: ruby/setup-ruby@3ff19f5e2baf30647122352b96108b1fbe250c64 # v1.299.0 - with: - ruby-version: '2.7' - name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: diff --git a/.github/workflows/snapshots.yaml b/.github/workflows/snapshots.yaml index ee9ba6013d3..c58a2a30ac2 100644 --- a/.github/workflows/snapshots.yaml +++ b/.github/workflows/snapshots.yaml @@ -40,14 +40,6 @@ jobs: uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: '3.10' - - name: Set up Node - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 - with: - node-version: 16 - - name: Set up Ruby - uses: ruby/setup-ruby@3ff19f5e2baf30647122352b96108b1fbe250c64 # v1.299.0 - with: - ruby-version: '2.7' - name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: diff --git a/dev-tools/gitact/gitact-test.sh b/dev-tools/gitact/gitact-test.sh new file mode 100755 index 00000000000..f41901a116b --- /dev/null +++ b/dev-tools/gitact/gitact-test.sh @@ -0,0 +1,60 @@ +#!/bin/bash +# 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 +# +# 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. + +# Test-only script for CI. Expects pre-built artifacts in the local Maven +# repository (provided by the build job via upload/download-artifact). + +echo "Python3 version: " $(python3 -V 2>&1) +echo "Maven version : " $(mvn -v) + +set -x + +STORM_SRC_ROOT_DIR=$1 + +THIS_SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +cd "${STORM_SRC_ROOT_DIR}" || (echo "Cannot cd to ${STORM_SRC_ROOT_DIR}"; exit 1) + +if [ "$2" == "Integration-Test" ] + then + exec ./integration-test/run-it.sh +elif [ "$2" == "Check-Updated-License-Files" ] + then + exec python3 dev-tools/validate-license-files.py --skip-build-storm +elif [ "$2" == "Client" ] +then + TEST_MODULES=storm-client +elif [ "$2" == "Server" ] +then + TEST_MODULES=storm-server,storm-webapp +elif [ "$2" == "Core" ] +then + TEST_MODULES=storm-core +elif [ "$2" == "External" ] +then + TEST_MODULES='!storm-client,!storm-server,!storm-core,!storm-webapp,!storm-shaded-deps' +fi + +export STORM_TEST_TIMEOUT_MS=150000 +export MAVEN_OPTS="-Xmx2048m" + +mvn --batch-mode test -fae -Pnative,all-tests,examples,externals -pl "$TEST_MODULES" +BUILD_RET_VAL=$? + +for dir in $(find . -type d -and -wholename \*/target/\*-reports) +do + echo "Looking for errors in ${dir}" + python3 "${THIS_SCRIPT_DIR}"/print-errors-from-test-reports.py "${dir}" +done + +exit ${BUILD_RET_VAL} From 91534838d26dc03dacad61d36e1e0c26215f40a0 Mon Sep 17 00:00:00 2001 From: Richard Zowalla Date: Wed, 1 Apr 2026 20:54:23 +0200 Subject: [PATCH 2/4] Adjust rat check --- .github/workflows/maven.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yaml b/.github/workflows/maven.yaml index efb598c5b2f..f1c752afc89 100644 --- a/.github/workflows/maven.yaml +++ b/.github/workflows/maven.yaml @@ -48,7 +48,7 @@ jobs: - name: Build project (compile + install, skip tests) run: /bin/bash ./dev-tools/gitact/gitact-install.sh `pwd` - name: RAT license check - run: mvn --batch-mode apache-rat:check -Prat + run: mvn --batch-mode test -Prat -DskipTests -Dcheckstyle.skip -Dpmd.skip - name: Upload Storm artifacts uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: From 201e74e8939239cac840b5ff6db9a3c992b4bbfa Mon Sep 17 00:00:00 2001 From: Richard Zowalla Date: Wed, 1 Apr 2026 21:11:15 +0200 Subject: [PATCH 3/4] Adjust rat check --- .github/workflows/maven.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/maven.yaml b/.github/workflows/maven.yaml index f1c752afc89..a43c71a7c01 100644 --- a/.github/workflows/maven.yaml +++ b/.github/workflows/maven.yaml @@ -48,7 +48,9 @@ jobs: - name: Build project (compile + install, skip tests) run: /bin/bash ./dev-tools/gitact/gitact-install.sh `pwd` - name: RAT license check - run: mvn --batch-mode test -Prat -DskipTests -Dcheckstyle.skip -Dpmd.skip + run: | + rm -f install.txt storm-shaded-deps/install-shade.txt + mvn --batch-mode test -Prat -DskipTests -Dcheckstyle.skip -Dpmd.skip - name: Upload Storm artifacts uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: From b4dffae9d8110a222152f062eeb8541b94126523 Mon Sep 17 00:00:00 2001 From: Richard Zowalla Date: Wed, 1 Apr 2026 21:20:42 +0200 Subject: [PATCH 4/4] Adjust rat check --- .github/workflows/maven.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yaml b/.github/workflows/maven.yaml index a43c71a7c01..597e5872fed 100644 --- a/.github/workflows/maven.yaml +++ b/.github/workflows/maven.yaml @@ -50,7 +50,7 @@ jobs: - name: RAT license check run: | rm -f install.txt storm-shaded-deps/install-shade.txt - mvn --batch-mode test -Prat -DskipTests -Dcheckstyle.skip -Dpmd.skip + mvn --batch-mode apache-rat:check -Prat - name: Upload Storm artifacts uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: