1 # 2 # Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. 3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 # 5 # This code is free software; you can redistribute it and/or modify it 6 # under the terms of the GNU General Public License version 2 only, as 7 # published by the Free Software Foundation. Oracle designates this 8 # particular file as subject to the "Classpath" exception as provided 9 # by Oracle in the LICENSE file that accompanied this code. 10 # 11 # This code is distributed in the hope that it will be useful, but WITHOUT 12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 # version 2 for more details (a copy is included in the LICENSE file that 15 # accompanied this code). 16 # 17 # You should have received a copy of the GNU General Public License version 18 # 2 along with this work; if not, write to the Free Software Foundation, 19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 # 21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 # or visit www.oracle.com if you need additional information or have any 23 # questions. 24 # 25 26 name: 'Run tests' 27 28 on: 29 workflow_call: 30 inputs: 31 platform: 32 required: true 33 type: string 34 bootjdk-platform: 35 required: true 36 type: string 37 runs-on: 38 required: true 39 type: string 40 xcode-toolset-version: 41 required: false 42 type: string 43 44 env: 45 # These are needed to make the MSYS2 bash work properly 46 MSYS2_PATH_TYPE: minimal 47 CHERE_INVOKING: 1 48 49 jobs: 50 test: 51 name: test 52 runs-on: ${{ inputs.runs-on }} 53 defaults: 54 run: 55 shell: bash 56 57 strategy: 58 fail-fast: false 59 matrix: 60 test-name: 61 - 'jdk/tier1 part 1' 62 - 'jdk/tier1 part 2' 63 - 'jdk/tier1 part 3' 64 - 'langtools/tier1' 65 - 'hs/tier1 common' 66 - 'hs/tier1 compiler part 1' 67 - 'hs/tier1 compiler part 2' 68 - 'hs/tier1 compiler part 3' 69 - 'hs/tier1 compiler not-xcomp' 70 - 'hs/tier1 gc' 71 - 'hs/tier2_gc_shenandoah shenandoah tier2' 72 - 'hs/tier3_gc_shenandoah shenandoah tier3' 73 - 'hs/tier1 runtime' 74 - 'hs/tier1 serviceability' 75 - 'lib-test/tier1' 76 77 include: 78 - test-name: 'jdk/tier1 part 1' 79 test-suite: 'test/jdk/:tier1_part1' 80 81 - test-name: 'jdk/tier1 part 2' 82 test-suite: 'test/jdk/:tier1_part2' 83 84 - test-name: 'jdk/tier1 part 3' 85 test-suite: 'test/jdk/:tier1_part3' 86 87 - test-name: 'langtools/tier1' 88 test-suite: 'test/langtools/:tier1' 89 90 - test-name: 'hs/tier1 common' 91 test-suite: 'test/hotspot/jtreg/:tier1_common' 92 debug-suffix: -debug 93 94 - test-name: 'hs/tier1 compiler part 1' 95 test-suite: 'test/hotspot/jtreg/:tier1_compiler_1' 96 debug-suffix: -debug 97 98 - test-name: 'hs/tier1 compiler part 2' 99 test-suite: 'test/hotspot/jtreg/:tier1_compiler_2' 100 debug-suffix: -debug 101 102 - test-name: 'hs/tier1 compiler part 3' 103 test-suite: 'test/hotspot/jtreg/:tier1_compiler_3' 104 debug-suffix: -debug 105 106 - test-name: 'hs/tier1 compiler not-xcomp' 107 test-suite: 'test/hotspot/jtreg/:tier1_compiler_not_xcomp' 108 debug-suffix: -debug 109 110 - test-name: 'hs/tier1 gc' 111 test-suite: 'test/hotspot/jtreg/:tier1_gc' 112 debug-suffix: -debug 113 114 - test-name: 'hs/tier2_gc_shenandoah shenandoah tier2' 115 test-suite: 'test/hotspot/jtreg/:tier2_gc_shenandoah' 116 debug-suffix: -debug 117 118 - test-name: 'hs/tier3_gc_shenandoah shenandoah tier3' 119 test-suite: 'test/hotspot/jtreg/:tier3_gc_shenandoah' 120 debug-suffix: -debug 121 122 - test-name: 'hs/tier1 runtime' 123 test-suite: 'test/hotspot/jtreg/:tier1_runtime' 124 debug-suffix: -debug 125 126 - test-name: 'hs/tier1 serviceability' 127 test-suite: 'test/hotspot/jtreg/:tier1_serviceability' 128 debug-suffix: -debug 129 130 - test-name: 'lib-test/tier1' 131 test-suite: 'test/lib-test/:tier1' 132 debug-suffix: -debug 133 134 steps: 135 - name: 'Checkout the JDK source' 136 uses: actions/checkout@v4 137 138 - name: 'Get MSYS2' 139 uses: ./.github/actions/get-msys2 140 if: runner.os == 'Windows' 141 142 - name: 'Get the BootJDK' 143 id: bootjdk 144 uses: ./.github/actions/get-bootjdk 145 with: 146 platform: ${{ inputs.bootjdk-platform }} 147 148 - name: 'Get JTReg' 149 id: jtreg 150 uses: ./.github/actions/get-jtreg 151 152 - name: 'Get bundles' 153 id: bundles 154 uses: ./.github/actions/get-bundles 155 with: 156 platform: ${{ inputs.platform }} 157 debug-suffix: ${{ matrix.debug-suffix }} 158 159 - name: 'Install dependencies' 160 run: | 161 # On macOS we need to install some dependencies for testing 162 brew install make 163 sudo xcode-select --switch /Applications/Xcode_${{ inputs.xcode-toolset-version }}.app/Contents/Developer 164 # This will make GNU make available as 'make' and not only as 'gmake' 165 echo '/usr/local/opt/make/libexec/gnubin' >> $GITHUB_PATH 166 if: runner.os == 'macOS' 167 168 - name: 'Set PATH' 169 id: path 170 run: | 171 # We need a minimal PATH on Windows 172 # Set PATH to "", so just GITHUB_PATH is included 173 if [[ '${{ runner.os }}' == 'Windows' ]]; then 174 echo "value=" >> $GITHUB_OUTPUT 175 else 176 echo "value=$PATH" >> $GITHUB_OUTPUT 177 fi 178 179 - name: 'Run tests' 180 id: run-tests 181 run: > 182 make test-prebuilt 183 TEST='${{ matrix.test-suite }}' 184 BOOT_JDK=${{ steps.bootjdk.outputs.path }} 185 JT_HOME=${{ steps.jtreg.outputs.path }} 186 JDK_IMAGE_DIR=${{ steps.bundles.outputs.jdk-path }} 187 SYMBOLS_IMAGE_DIR=${{ steps.bundles.outputs.symbols-path }} 188 TEST_IMAGE_DIR=${{ steps.bundles.outputs.tests-path }} 189 JTREG='JAVA_OPTIONS=-XX:-CreateCoredumpOnCrash;VERBOSE=fail,error,time;KEYWORDS=!headful' 190 && bash ./.github/scripts/gen-test-summary.sh "$GITHUB_STEP_SUMMARY" "$GITHUB_OUTPUT" 191 env: 192 PATH: ${{ steps.path.outputs.value }} 193 194 # This is a separate step, since if the markdown from a step gets bigger than 195 # 1024 kB it is skipped, but then the short summary above is still generated 196 - name: 'Generate test report' 197 run: bash ./.github/scripts/gen-test-results.sh "$GITHUB_STEP_SUMMARY" 198 if: always() 199 200 - name: 'Package test results' 201 id: package 202 run: | 203 # Package test-results and relevant parts of test-support 204 mkdir results 205 206 if [[ -d build/run-test-prebuilt/test-results ]]; then 207 cd build/run-test-prebuilt/test-results/ 208 zip -r -9 "$GITHUB_WORKSPACE/results/test-results.zip" . 209 cd $GITHUB_WORKSPACE 210 else 211 echo '::warning ::Missing test-results directory' 212 fi 213 214 if [[ -d build/run-test-prebuilt/test-support ]]; then 215 cd build/run-test-prebuilt/test-support/ 216 zip -r -9 "$GITHUB_WORKSPACE/results/test-support.zip" . -i *.jtr -i */hs_err*.log -i */replay*.log 217 cd $GITHUB_WORKSPACE 218 else 219 echo '::warning ::Missing test-support directory' 220 fi 221 222 artifact_name="results-${{ inputs.platform }}-$(echo ${{ matrix.test-name }} | tr '/ ' '__')" 223 echo "artifact-name=$artifact_name" >> $GITHUB_OUTPUT 224 if: always() 225 226 - name: 'Upload test results' 227 uses: actions/upload-artifact@v4 228 with: 229 path: results 230 name: ${{ steps.package.outputs.artifact-name }} 231 if: always() 232 233 # This is the best way I found to abort the job with an error message 234 - name: 'Notify about test failures' 235 uses: actions/github-script@v7 236 with: 237 script: core.setFailed('${{ steps.run-tests.outputs.error-message }}') 238 if: steps.run-tests.outputs.failure == 'true'