This is an automated email from the ASF dual-hosted git repository.

rzo1 pushed a commit to branch ci-merge-shell-tests-into-build
in repository https://gitbox.apache.org/repos/asf/opennlp.git

commit e964d978af8188b8328bdfc22375bafa32911050
Author: Richard Zowalla <[email protected]>
AuthorDate: Thu Jun 25 15:18:51 2026 +0200

    Merge shell tests into the Java CI pipeline
    
    Run the shell (bats/Pester) tests as a stage after the regular build in
    maven.yml instead of in a separate workflow that rebuilt OpenNLP from
    scratch on each OS.
    
    The binary distribution is pure-Java and platform-independent, so it is
    now built once (Ubuntu/JDK 21), uploaded as an artifact, and reused by the
    per-OS shell-test jobs via needs/download-artifact. This removes three
    redundant Maven builds per run.
    
    actions/upload-artifact and actions/download-artifact are in the actions/*
    namespace, which is automatically allowed under the ASF GitHub Actions
    policy, so no INFRA allowlist change is required.
---
 .github/workflows/maven.yml       | 183 ++++++++++++++++++++++++++++++++++++++
 .github/workflows/shell-tests.yml | 179 -------------------------------------
 2 files changed, 183 insertions(+), 179 deletions(-)

diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 3f32ca2f2..05f36c7cb 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -57,3 +57,186 @@ jobs:
       run: mvn -V clean test verify --show-version --batch-mode 
--no-transfer-progress -Pjacoco -Pci
     - name: Jacoco
       run: mvn jacoco:report
+    # The binary distribution is pure-Java and platform-independent, so we 
build it
+    # once here (Linux/JDK 21) and reuse it for the shell tests below instead 
of
+    # rebuilding it on every OS.
+    - name: Upload OpenNLP distribution
+      if: matrix.os == 'ubuntu-latest' && matrix.java == 21
+      uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # 
v4.6.2
+      with:
+        name: opennlp-distribution
+        path: |
+          opennlp-distr/target/*.tar.gz
+          !opennlp-distr/target/*-src*.tar.gz
+        if-no-files-found: error
+        retention-days: 1
+
+  # Shell tests run against the binary distribution produced by the "build" job
+  # above, so they no longer rebuild OpenNLP themselves.
+  test-unix-shell-ubuntu:
+    name: Shell Tests on Ubuntu
+    needs: build
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # 
v7.0.0
+
+      # Note: bats-core/[email protected] is not allowed to be used (needs an 
INFRA issue)
+      - name: Install Bats (Testing Framework)
+        run: |
+          sudo apt-get update
+          sudo apt-get install -y bats
+
+      - name: Set up JDK 21
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # 
v5.3.0
+        with:
+          distribution: temurin
+          java-version: 21
+
+      - name: Download OpenNLP distribution
+        uses: 
actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+        with:
+          name: opennlp-distribution
+          path: dist
+
+      - name: Find and Extract OpenNLP Distribution
+        run: |
+          # Find the first non-src .tar.gz file in the downloaded artifact
+          TAR_FILE=$(find dist -maxdepth 1 -type f -name "*.tar.gz" ! -name 
"*-src*.tar.gz" | head -n 1)
+
+          # Ensure we found a file
+          if [ -z "$TAR_FILE" ]; then
+            echo "Error: No matching tar.gz file found in dist"
+            exit 1
+          fi
+
+          # Extract the tar.gz file
+          tar -xzf "$TAR_FILE" -C $HOME
+
+          # Get the directory name of the extracted content
+          EXTRACTED_DIR=$(tar -tf "$TAR_FILE" | head -n 1 | cut -f1 -d"/")
+
+          # Set OPENNLP_HOME dynamically
+          echo "OPENNLP_HOME=$HOME/$EXTRACTED_DIR" >> $GITHUB_ENV
+          echo "$HOME/$EXTRACTED_DIR/bin" >> $GITHUB_PATH
+
+      - name: Verify Extraction
+        run: |
+          echo "OPENNLP_HOME: $OPENNLP_HOME"
+          ls -l $OPENNLP_HOME/bin
+
+      - name: Run Bats Tests
+        run: |
+          bats ./opennlp-distr/src/test/sh
+        env:
+          JAVA_HOME: ${{ env.JAVA_HOME }}
+          OPENNLP_HOME: ${{ env.OPENNLP_HOME }}
+
+  test-unix-shell-macos:
+    name: Shell Tests on macOS
+    needs: build
+    runs-on: macos-latest
+
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # 
v7.0.0
+
+      - name: Install Bats (Testing Framework)
+        run: |
+          brew update
+          brew install bats-core
+
+      - name: Set up JDK 21
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # 
v5.3.0
+        with:
+          distribution: temurin
+          java-version: 21
+
+      - name: Download OpenNLP distribution
+        uses: 
actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+        with:
+          name: opennlp-distribution
+          path: dist
+
+      - name: Find and Extract OpenNLP Distribution
+        run: |
+          TAR_FILE=$(find dist -maxdepth 1 -type f -name "*.tar.gz" ! -name 
"*-src*.tar.gz" | head -n 1)
+          if [ -z "$TAR_FILE" ]; then
+            echo "Error: No matching tar.gz file found in dist"
+            exit 1
+          fi
+          tar -xzf "$TAR_FILE" -C $HOME
+          EXTRACTED_DIR=$(tar -tf "$TAR_FILE" | head -n 1 | cut -f1 -d"/")
+          echo "OPENNLP_HOME=$HOME/$EXTRACTED_DIR" >> $GITHUB_ENV
+          echo "$HOME/$EXTRACTED_DIR/bin" >> $GITHUB_PATH
+
+      - name: Verify Extraction
+        run: |
+          echo "OPENNLP_HOME: $OPENNLP_HOME"
+          ls -l $OPENNLP_HOME/bin
+
+      - name: Run Bats Tests
+        run: |
+          bats ./opennlp-distr/src/test/sh
+        env:
+          JAVA_HOME: ${{ env.JAVA_HOME }}
+          OPENNLP_HOME: ${{ env.OPENNLP_HOME }}
+
+  test-windows-shell:
+    name: Shell Tests on Windows
+    needs: build
+    runs-on: windows-latest
+
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # 
v7.0.0
+
+      - name: Install Pester
+        run: |
+          Install-Module -Name Pester -Force -Scope CurrentUser
+          Import-Module Pester
+        shell: pwsh
+
+      - name: Set up JDK 21
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # 
v5.3.0
+        with:
+          distribution: temurin
+          java-version: 21
+
+      - name: Download OpenNLP distribution
+        uses: 
actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+        with:
+          name: opennlp-distribution
+          path: dist
+
+      - name: Run Pester Tests # (one step to avoid environment issues on 
Windows)
+        run: |
+          # Find the first non-src .tar.gz file in the downloaded artifact
+          $TAR_FILE = Get-ChildItem -Path dist -Filter "*.tar.gz" | 
Where-Object { $_.Name -notlike "*-src*" } | Select-Object -First 1
+
+          # Ensure we found a file
+          if (-not $TAR_FILE) {
+            Write-Error "Error: No matching tar.gz file found in dist"
+            exit 1
+          }
+
+          # Extract the tar.gz file to the current directory
+          $Destination = "$(pwd)"
+          tar -xzf $TAR_FILE.FullName -C $Destination
+
+          # Get the directory name of the extracted content (excluding the tar 
path)
+          $EXTRACTED_DIR = (tar -tf $TAR_FILE.FullName | Select-Object -First 
1).Split('/')[0]
+
+          # Set OPENNLP_HOME dynamically in the environment
+          $OPENNLP_HOME_PATH = "$Destination\$EXTRACTED_DIR"
+          Write-Host "OPENNLP_HOME=$OPENNLP_HOME_PATH"  # Debugging
+
+          # Ensure OPENNLP_HOME is recognized in the current session
+          $env:OPENNLP_HOME = $OPENNLP_HOME_PATH
+          $env:PATH = "$env:OPENNLP_HOME\bin;$env:PATH"
+
+          Invoke-Pester -Script 
"./opennlp-distr/src/test/ps/test_opennlp.Tests.ps1" -Output Detailed
+        shell: pwsh
+        env:
+          JAVA_HOME: ${{ env.JAVA_HOME }}
diff --git a/.github/workflows/shell-tests.yml 
b/.github/workflows/shell-tests.yml
deleted file mode 100644
index 28798108d..000000000
--- a/.github/workflows/shell-tests.yml
+++ /dev/null
@@ -1,179 +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.
-
-name: Shell Tests CI
-
-on:
-  push:
-    branches:
-      - main
-  pull_request:
-
-jobs:
-  test-unix-shell-ubuntu:
-    name: Test on Ubuntu
-    runs-on: ubuntu-latest
-
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # 
v7.0.0
-
-      # Note: bats-core/[email protected] is not allowed to be used (needs an 
INFRA issue)
-      - name: Install Bats (Testing Framework)
-        run: |
-          sudo apt-get update
-          sudo apt-get install -y bats
-
-      - name: Set up JDK 21
-        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # 
v5.3.0
-        with:
-          distribution: temurin
-          java-version: 21
-
-      - name: Build with Maven
-        run: mvn -V clean verify --no-transfer-progress -Pci -DskipTests=true
-
-      - name: Find and Extract OpenNLP Distribution
-        run: |
-          # Find the first non-src .tar.gz file in the target directory
-          TAR_FILE=$(find opennlp-distr/target -maxdepth 1 -type f -name 
"*.tar.gz" ! -name "*-src*.tar.gz" | head -n 1)
-          
-          # Ensure we found a file
-          if [ -z "$TAR_FILE" ]; then
-            echo "Error: No matching tar.gz file found in opennlp-distr/target"
-            exit 1
-          fi
-
-          # Extract the tar.gz file
-          tar -xzf "$TAR_FILE" -C $HOME
-
-          # Get the directory name of the extracted content
-          EXTRACTED_DIR=$(tar -tf "$TAR_FILE" | head -n 1 | cut -f1 -d"/")
-
-          # Set OPENNLP_HOME dynamically
-          echo "OPENNLP_HOME=$HOME/$EXTRACTED_DIR" >> $GITHUB_ENV
-          echo "$HOME/$EXTRACTED_DIR/bin" >> $GITHUB_PATH
-
-      - name: Verify Extraction
-        run: |
-          echo "OPENNLP_HOME: $OPENNLP_HOME"
-          ls -l $OPENNLP_HOME/bin
-
-      - name: Run Bats Tests
-        run: |
-          bats ./opennlp-distr/src/test/sh
-        env:
-          JAVA_HOME: ${{ env.JAVA_HOME }}
-          OPENNLP_HOME: ${{ env.OPENNLP_HOME }}
-
-  test-unix-shell-macos:
-    name: Test on macOS
-    runs-on: macos-latest
-
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # 
v7.0.0
-
-      - name: Install Bats (Testing Framework)
-        run: |
-          brew update
-          brew install bats-core
-
-      - name: Set up JDK 21
-        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # 
v5.3.0
-        with:
-          distribution: temurin
-          java-version: 21
-
-      - name: Build with Maven
-        run: mvn -V clean verify --no-transfer-progress -Pci -DskipTests=true
-
-      - name: Find and Extract OpenNLP Distribution
-        run: |
-          TAR_FILE=$(find opennlp-distr/target -maxdepth 1 -type f -name 
"*.tar.gz" ! -name "*-src*.tar.gz" | head -n 1)
-          if [ -z "$TAR_FILE" ]; then
-            echo "Error: No matching tar.gz file found in opennlp-distr/target"
-            exit 1
-          fi
-          tar -xzf "$TAR_FILE" -C $HOME
-          EXTRACTED_DIR=$(tar -tf "$TAR_FILE" | head -n 1 | cut -f1 -d"/")
-          echo "OPENNLP_HOME=$HOME/$EXTRACTED_DIR" >> $GITHUB_ENV
-          echo "$HOME/$EXTRACTED_DIR/bin" >> $GITHUB_PATH
-
-      - name: Verify Extraction
-        run: |
-          echo "OPENNLP_HOME: $OPENNLP_HOME"
-          ls -l $OPENNLP_HOME/bin
-
-      - name: Run Bats Tests
-        run: |
-          bats ./opennlp-distr/src/test/sh
-        env:
-          JAVA_HOME: ${{ env.JAVA_HOME }}
-          OPENNLP_HOME: ${{ env.OPENNLP_HOME }}
-
-  test-windows-shell:
-    name: Test on Windows
-    runs-on: windows-latest
-
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # 
v7.0.0
-
-      - name: Install Pester
-        run: |
-          Install-Module -Name Pester -Force -Scope CurrentUser
-          Import-Module Pester
-        shell: pwsh
-
-      - name: Set up JDK 21
-        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # 
v5.3.0
-        with:
-          distribution: temurin
-          java-version: 21
-
-      - name: Build with Maven
-        run: mvn -V clean verify --no-transfer-progress -Pci -DskipTests=true
-
-      - name: Run Pester Tests # (one step to avoid environment issues on 
Windows)
-        run: |
-          # Find the first non-src .tar.gz file in the target directory
-          $TAR_FILE = Get-ChildItem -Path opennlp-distr/target -Filter 
"*.tar.gz" | Where-Object { $_.Name -notlike "*-src*" } | Select-Object -First 1
-          
-          # Ensure we found a file
-          if (-not $TAR_FILE) {
-            Write-Error "Error: No matching tar.gz file found in 
opennlp-distr/target"
-            exit 1
-          }
-          
-          # Extract the tar.gz file to the current directory
-          $Destination = "$(pwd)"
-          tar -xzf $TAR_FILE.FullName -C $Destination
-          
-          # Get the directory name of the extracted content (excluding the tar 
path)
-          $EXTRACTED_DIR = (tar -tf $TAR_FILE.FullName | Select-Object -First 
1).Split('/')[0]
-          
-          # Set OPENNLP_HOME dynamically in the environment
-          $OPENNLP_HOME_PATH = "$Destination\$EXTRACTED_DIR"
-          Write-Host "OPENNLP_HOME=$OPENNLP_HOME_PATH"  # Debugging
-            
-          # Ensure OPENNLP_HOME is recognized in the current session
-          $env:OPENNLP_HOME = $OPENNLP_HOME_PATH
-          $env:PATH = "$env:OPENNLP_HOME\bin;$env:PATH"
-          
-          Invoke-Pester -Script 
"./opennlp-distr/src/test/ps/test_opennlp.Tests.ps1" -Output Detailed
-        shell: pwsh
-        env:
-          JAVA_HOME: ${{ env.JAVA_HOME }}
\ No newline at end of file

Reply via email to