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
