| # | |
| # Copyright (c) 2022, 2024, 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 | |
| dry-run: | |
| required: false | |
| type: boolean | |
| default: false | |
| debug-suffix: | |
| required: false | |
| type: string | |
| static-suffix: | |
| 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 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: ${{ inputs.debug-suffix }} | |
| - test-name: 'hs/tier1 compiler part 1' | |
| test-suite: 'test/hotspot/jtreg/:tier1_compiler_1' | |
| debug-suffix: ${{ inputs.debug-suffix }} | |
| - test-name: 'hs/tier1 compiler part 2' | |
| test-suite: 'test/hotspot/jtreg/:tier1_compiler_2' | |
| debug-suffix: ${{ inputs.debug-suffix }} | |
| - test-name: 'hs/tier1 compiler part 3' | |
| test-suite: 'test/hotspot/jtreg/:tier1_compiler_3' | |
| debug-suffix: ${{ inputs.debug-suffix }} | |
| - test-name: 'hs/tier1 gc' | |
| test-suite: 'test/hotspot/jtreg/:tier1_gc' | |
| debug-suffix: ${{ inputs.debug-suffix }} | |
| - test-name: 'hs/tier1 runtime' | |
| test-suite: 'test/hotspot/jtreg/:tier1_runtime' | |
| debug-suffix: ${{ inputs.debug-suffix }} | |
| - test-name: 'hs/tier1 serviceability' | |
| test-suite: 'test/hotspot/jtreg/:tier1_serviceability' | |
| debug-suffix: ${{ inputs.debug-suffix }} | |
| - test-name: 'lib-test/tier1' | |
| test-suite: 'test/lib-test/:tier1' | |
| debug-suffix: ${{ inputs.debug-suffix }} | |
| 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 }} | |
| static-suffix: ${{ inputs.static-suffix }} | |
| if: ${{ inputs.dry-run == false }} | |
| - 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 | |
| if [[ '${{ inputs.static-suffix }}' == '-static' ]]; then | |
| echo "static-hotspot-problemlist-path=`pwd`/test/hotspot/jtreg/ProblemList-StaticJdk.txt" >> $GITHUB_OUTPUT | |
| echo "static-jdk-problemlist-path=`pwd`/test/jdk/ProblemList-StaticJdk.txt" >> $GITHUB_OUTPUT | |
| echo "static-langtools-problemlist-path=`pwd`/test/langtools/ProblemList-StaticJdk.txt" >> $GITHUB_OUTPUT | |
| echo "static-lib-test-problemlist-path=`pwd`/test/lib-test/ProblemList-StaticJdk.txt" >> $GITHUB_OUTPUT | |
| fi | |
| - name: 'Set Extra Options' | |
| id: extra-options | |
| run: | | |
| if [[ '${{ inputs.static-suffix }}' == '-static' ]]; then | |
| echo "test-jdk=JDK_UNDER_TEST=${{ steps.bundles.outputs.static-jdk-path }}" >> $GITHUB_OUTPUT | |
| echo "compile-jdk=JDK_FOR_COMPILE=${{ steps.bundles.outputs.jdk-path }}" >> $GITHUB_OUTPUT | |
| echo "extra-problem-lists=EXTRA_PROBLEM_LISTS=${{ steps.path.outputs.static-hotspot-problemlist-path }}%20${{ steps.path.outputs.static-jdk-problemlist-path }}%20${{ steps.path.outputs.static-langtools-problemlist-path }}%20${{ steps.path.outputs.static-lib-test-problemlist-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 }} | |
| ${{ steps.extra-options.outputs.test-jdk }} | |
| ${{ steps.extra-options.outputs.compile-jdk }} | |
| JTREG='JAVA_OPTIONS=-XX:-CreateCoredumpOnCrash;VERBOSE=fail,error,time;KEYWORDS=!headful;${{ steps.extra-options.outputs.extra-problem-lists }}' | |
| && bash ./.github/scripts/gen-test-summary.sh "$GITHUB_STEP_SUMMARY" "$GITHUB_OUTPUT" | |
| env: | |
| PATH: ${{ steps.path.outputs.value }} | |
| if: ${{ inputs.dry-run == false }} | |
| # 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 }}${{ inputs.static-suffix }} | 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' |