# # Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # name: 'Run tests' on: workflow_call: inputs: platform: required: true type: string bootjdk-platform: required: true type: string runs-on: required: true type: string xcode-toolset-version: required: false type: string env: # These are needed to make the MSYS2 bash work properly MSYS2_PATH_TYPE: minimal CHERE_INVOKING: 1 jobs: test: name: test runs-on: ${{ inputs.runs-on }} defaults: run: shell: bash strategy: fail-fast: false matrix: test-name: - 'jdk/tier1 part 1' - 'jdk/tier1 part 2' - 'jdk/tier1 part 3' - 'langtools/tier1' - 'hs/tier1 common' - 'hs/tier1 compiler part 1' - 'hs/tier1 compiler part 2' - 'hs/tier1 compiler part 3' - 'hs/tier1 compiler not-xcomp' - 'hs/tier1 gc' - 'hs/tier1 runtime' - 'hs/tier1 serviceability' - 'lib-test/tier1' include: - test-name: 'jdk/tier1 part 1' test-suite: 'test/jdk/:tier1_part1' - test-name: 'jdk/tier1 part 2' test-suite: 'test/jdk/:tier1_part2' - test-name: 'jdk/tier1 part 3' test-suite: 'test/jdk/:tier1_part3' - test-name: 'langtools/tier1' test-suite: 'test/langtools/:tier1' - test-name: 'hs/tier1 common' test-suite: 'test/hotspot/jtreg/:tier1_common' debug-suffix: -debug - test-name: 'hs/tier1 compiler part 1' test-suite: 'test/hotspot/jtreg/:tier1_compiler_1' debug-suffix: -debug - test-name: 'hs/tier1 compiler part 2' test-suite: 'test/hotspot/jtreg/:tier1_compiler_2' debug-suffix: -debug - test-name: 'hs/tier1 compiler part 3' test-suite: 'test/hotspot/jtreg/:tier1_compiler_3' debug-suffix: -debug - test-name: 'hs/tier1 compiler not-xcomp' test-suite: 'test/hotspot/jtreg/:tier1_compiler_not_xcomp' debug-suffix: -debug - test-name: 'hs/tier1 gc' test-suite: 'test/hotspot/jtreg/:tier1_gc' debug-suffix: -debug - test-name: 'hs/tier1 runtime' test-suite: 'test/hotspot/jtreg/:tier1_runtime' debug-suffix: -debug - test-name: 'hs/tier1 serviceability' test-suite: 'test/hotspot/jtreg/:tier1_serviceability' debug-suffix: -debug - test-name: 'lib-test/tier1' test-suite: 'test/lib-test/:tier1' debug-suffix: -debug steps: - name: 'Checkout the JDK source' uses: actions/checkout@v4 - name: 'Get MSYS2' uses: ./.github/actions/get-msys2 if: runner.os == 'Windows' - name: 'Get the BootJDK' id: bootjdk uses: ./.github/actions/get-bootjdk with: platform: ${{ inputs.bootjdk-platform }} - name: 'Get JTReg' id: jtreg uses: ./.github/actions/get-jtreg - name: 'Get bundles' id: bundles uses: ./.github/actions/get-bundles with: platform: ${{ inputs.platform }} debug-suffix: ${{ matrix.debug-suffix }} - name: 'Install dependencies' run: | # On macOS we need to install some dependencies for testing brew install make sudo xcode-select --switch /Applications/Xcode_${{ inputs.xcode-toolset-version }}.app/Contents/Developer # This will make GNU make available as 'make' and not only as 'gmake' echo '/usr/local/opt/make/libexec/gnubin' >> $GITHUB_PATH if: runner.os == 'macOS' - name: 'Set PATH' id: path run: | # We need a minimal PATH on Windows # Set PATH to "", so just GITHUB_PATH is included if [[ '${{ runner.os }}' == 'Windows' ]]; then echo "value=" >> $GITHUB_OUTPUT else echo "value=$PATH" >> $GITHUB_OUTPUT fi - name: 'Run tests' id: run-tests run: > make test-prebuilt TEST='${{ matrix.test-suite }}' BOOT_JDK=${{ steps.bootjdk.outputs.path }} JT_HOME=${{ steps.jtreg.outputs.path }} JDK_IMAGE_DIR=${{ steps.bundles.outputs.jdk-path }} SYMBOLS_IMAGE_DIR=${{ steps.bundles.outputs.symbols-path }} TEST_IMAGE_DIR=${{ steps.bundles.outputs.tests-path }} JTREG='JAVA_OPTIONS=-XX:-CreateCoredumpOnCrash;VERBOSE=fail,error,time;KEYWORDS=!headful' && bash ./.github/scripts/gen-test-summary.sh "$GITHUB_STEP_SUMMARY" "$GITHUB_OUTPUT" env: PATH: ${{ steps.path.outputs.value }} # This is a separate step, since if the markdown from a step gets bigger than # 1024 kB it is skipped, but then the short summary above is still generated - name: 'Generate test report' run: bash ./.github/scripts/gen-test-results.sh "$GITHUB_STEP_SUMMARY" if: always() - name: 'Package test results' id: package run: | # Package test-results and relevant parts of test-support mkdir results if [[ -d build/run-test-prebuilt/test-results ]]; then cd build/run-test-prebuilt/test-results/ zip -r -9 "$GITHUB_WORKSPACE/results/test-results.zip" . cd $GITHUB_WORKSPACE else echo '::warning ::Missing test-results directory' fi if [[ -d build/run-test-prebuilt/test-support ]]; then cd build/run-test-prebuilt/test-support/ zip -r -9 "$GITHUB_WORKSPACE/results/test-support.zip" . -i *.jtr -i */hs_err*.log -i */replay*.log cd $GITHUB_WORKSPACE else echo '::warning ::Missing test-support directory' fi artifact_name="results-${{ inputs.platform }}-$(echo ${{ matrix.test-name }} | tr '/ ' '__')" echo "artifact-name=$artifact_name" >> $GITHUB_OUTPUT if: always() - name: 'Upload test results' uses: actions/upload-artifact@v4 with: path: results name: ${{ steps.package.outputs.artifact-name }} if: always() # This is the best way I found to abort the job with an error message - name: 'Notify about test failures' uses: actions/github-script@v7 with: script: core.setFailed('${{ steps.run-tests.outputs.error-message }}') if: steps.run-tests.outputs.failure == 'true'