Update test.yml #24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Run Tests | |
| on: | |
| push: | |
| pull_request: | |
| workflow_dispatch: # allow manual trigger from Actions page | |
| permissions: | |
| contents: read | |
| checks: write | |
| pull-requests: write | |
| jobs: | |
| build-and-test: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| java: ['8', '11', '17'] # JDK used for TEST phase | |
| SERVER_VERSION: ['3.11', '4.0', '4.1', '5.0'] # Cassandra minor versions | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| # ---- Python for ccm ---- | |
| - name: Set up Python 3.9 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.9' | |
| - name: Install ccm | |
| run: | | |
| python -m pip install --upgrade pip | |
| git clone --depth 1 --single-branch -b cassandra-test https://github.com/apache/cassandra-ccm.git | |
| pip install -e ./cassandra-ccm | |
| # ---- Maven ---- | |
| - name: Set up Maven 3.8.8 | |
| uses: stCarolas/setup-maven@v5 | |
| with: | |
| maven-version: '3.8.8' | |
| # ---- Install required Zulu JDKs (8/11/17) and capture their homes ---- | |
| - name: Install Zulu 8 | |
| id: z8 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: zulu | |
| java-version: '8' | |
| cache: maven | |
| - name: Install Zulu 11 | |
| id: z11 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: zulu | |
| java-version: '11' | |
| - name: Install Zulu 17 | |
| id: z17 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: zulu | |
| java-version: '17' | |
| - name: Export JAVA*_HOME variables | |
| run: | | |
| echo "JAVA8_HOME=${{ steps.z8.outputs.path }}" >> "$GITHUB_ENV" | |
| echo "JAVA11_HOME=${{ steps.z11.outputs.path }}" >> "$GITHUB_ENV" | |
| echo "JAVA17_HOME=${{ steps.z17.outputs.path }}" >> "$GITHUB_ENV" | |
| echo "JAVA_HOME=${{ steps.z8.outputs.path }}" >> "$GITHUB_ENV" | |
| # ---- Print env vars before build ---- | |
| - name: Print environment | |
| run: printenv | sort | |
| # ---- Build once with Java 8 (skip tests) ---- | |
| - name: Switch to Zulu 8 for build | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: zulu | |
| java-version: '8' | |
| cache: maven | |
| - name: Build (Java 8, skip tests) | |
| run: mvn -B -V install -DskipTests -Dmaven.javadoc.skip=true | |
| # ---- Test using matrix JDK and resolved latest patch for selected minor ---- | |
| - name: Switch to Zulu ${{ matrix.java }} for tests | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: zulu | |
| java-version: ${{ matrix.java }} | |
| cache: maven | |
| - name: Resolve Cassandra latest patch version | |
| id: cassandra | |
| env: | |
| SERVER_VERSION: ${{ matrix.SERVER_VERSION }} | |
| run: | | |
| PATCH_SERVER_VERSION=$( | |
| curl -s https://downloads.apache.org/cassandra/ \ | |
| | grep -oP '(?<=href=")[0-9]+\.[0-9]+\.[0-9]+(?=)' \ | |
| | sort -rV \ | |
| | uniq -w 3 \ | |
| | grep "^${SERVER_VERSION}\." | |
| ) | |
| echo "Resolved Cassandra ${SERVER_VERSION}.x -> ${PATCH_SERVER_VERSION}" | |
| echo "PATCH_SERVER_VERSION=$PATCH_SERVER_VERSION" >> "$GITHUB_ENV" | |
| - name: List process on port | |
| run: | | |
| lsof -n -i :7100 | |
| kill $(lsof -t -i:7100) | |
| - name: Run tests | |
| env: | |
| TEST_JAVA_MAJOR_VERSION: ${{ matrix.java }} | |
| run: | | |
| echo "JAVA8_HOME=$JAVA8_HOME" | |
| echo "JAVA11_HOME=$JAVA11_HOME" | |
| echo "JAVA17_HOME=$JAVA17_HOME" | |
| echo "Active JAVA_HOME=$JAVA_HOME" | |
| echo "Resolved PATCH_SERVER_VERSION=$PATCH_SERVER_VERSION" | |
| mvn -B -V verify -T 1 \ | |
| -Ptest-jdk-${TEST_JAVA_MAJOR_VERSION} \ | |
| -DtestJavaHome="$JAVA_HOME" \ | |
| -Dccm.version="${PATCH_SERVER_VERSION}" \ | |
| -Dccm.dse=false \ | |
| -Dmaven.javadoc.skip=true \ | |
| -Dsurefire.reportFormat=xml \ | |
| -Dsurefire.useFile=true | |
| # Publish results (skip on forked PRs to avoid 403 on check-runs) | |
| - name: Publish Test Results | |
| uses: EnricoMi/publish-unit-test-result-action@v2 | |
| if: ${{ !cancelled() }} | |
| with: | |
| files: | | |
| **/target/surefire-reports/TEST-*.xml | |
| **/target/failsafe-reports/TEST-*.xml | |
| check_name: "Test Results (Cassandra ${{ matrix.SERVER_VERSION }}, JDK ${{ matrix.java }})" | |
| # ----- Upload ALL startup* logs from ~/.ccm on failure ----- | |
| # Upload ALL startup* logs from either ~/.ccm or /tmp/ccm* (on failure; switch to always() if you want them every run) | |
| - name: Upload CCM startup logs artifact | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ccm-startup-logs-${{ matrix.SERVER_VERSION }}-jdk${{ matrix.java }} | |
| path: | | |
| /tmp/ccm*/**/*.log | |
| if-no-files-found: warn |