From 16d45511342c32ac8e8f72fb68dc21ce13339dbe Mon Sep 17 00:00:00 2001 From: Jiangli Zhou Date: Thu, 22 May 2025 15:34:12 +0000 Subject: [PATCH] 8355452: GHA: Test jtreg tier1 on linux-x64 static-jdk Reviewed-by: ihse, shade --- .github/actions/get-bundles/action.yml | 37 +++++++++++++++++++ .github/actions/upload-bundles/action.yml | 15 ++++++-- .github/workflows/build-linux.yml | 4 +++ .github/workflows/main.yml | 21 ++++++++--- .github/workflows/test.yml | 44 +++++++++++++++++------ 5 files changed, 105 insertions(+), 16 deletions(-) diff --git a/.github/actions/get-bundles/action.yml b/.github/actions/get-bundles/action.yml index aaec9a6d19f..270d15159a0 100644 --- a/.github/actions/get-bundles/action.yml +++ b/.github/actions/get-bundles/action.yml @@ -32,10 +32,16 @@ inputs: debug-suffix: description: 'File name suffix denoting debug level, possibly empty' required: false + static-suffix: + description: 'Static bundle file name suffix' + required: false outputs: jdk-path: description: 'Path to the installed JDK bundle' value: ${{ steps.path-name.outputs.jdk }} + static-jdk-path: + description: 'Path to the installed static JDK bundle' + value: ${{ steps.path-name.outputs.static_jdk }} symbols-path: description: 'Path to the installed symbols bundle' value: ${{ steps.path-name.outputs.symbols }} @@ -61,6 +67,15 @@ runs: path: bundles if: steps.download-bundles.outcome == 'failure' + - name: 'Download static bundles artifact' + id: download-static-bundles + uses: actions/download-artifact@v4 + with: + name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }} + path: bundles + continue-on-error: true + if: ${{ inputs.static-suffix == '-static' }} + - name: 'Unpack bundles' run: | if [[ -e bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.zip ]]; then @@ -75,6 +90,20 @@ runs: tar -xf bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz -C bundles/jdk fi + if [[ '${{ inputs.static-suffix }}' == '-static' ]]; then + if [[ -e bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.zip ]]; then + echo 'Unpacking static jdk bundle...' + mkdir -p bundles/static-jdk + unzip -q bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.zip -d bundles/static-jdk + fi + + if [[ -e bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.tar.gz ]]; then + echo 'Unpacking static jdk bundle...' + mkdir -p bundles/static-jdk + tar -xf bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.tar.gz -C bundles/static-jdk + fi + fi + if [[ -e bundles/symbols-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz ]]; then echo 'Unpacking symbols bundle...' mkdir -p bundles/symbols @@ -106,4 +135,12 @@ runs: echo "jdk=$jdk_dir" >> $GITHUB_OUTPUT echo "symbols=$symbols_dir" >> $GITHUB_OUTPUT echo "tests=$tests_dir" >> $GITHUB_OUTPUT + + if [[ '${{ inputs.static-suffix }}' == '-static' ]]; then + static_jdk_dir="$GITHUB_WORKSPACE/$(dirname $(find bundles/static-jdk -name bin -type d))" + if [[ '${{ runner.os }}' == 'Windows' ]]; then + static_jdk_dir="$(cygpath $static_jdk_dir)" + fi + echo "static_jdk=$static_jdk_dir" >> $GITHUB_OUTPUT + fi shell: bash diff --git a/.github/actions/upload-bundles/action.yml b/.github/actions/upload-bundles/action.yml index 30f4ac03c1e..dfa994baac0 100644 --- a/.github/actions/upload-bundles/action.yml +++ b/.github/actions/upload-bundles/action.yml @@ -35,6 +35,9 @@ inputs: bundle-suffix: description: 'Bundle name suffix, possibly empty' required: false + static-suffix: + description: 'Static JDK bundle name suffix, possibly empty' + required: false runs: using: composite @@ -46,6 +49,8 @@ runs: # Rename bundles to consistent names jdk_bundle_zip="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}.zip 2> /dev/null || true)" jdk_bundle_tar_gz="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)" + static_jdk_bundle_zip="$(ls build/*/bundles/static-jdk-*_bin${{ inputs.debug-suffix }}.zip 2> /dev/null || true)" + static_jdk_bundle_tar_gz="$(ls build/*/bundles/static-jdk-*_bin${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)" symbols_bundle="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}-symbols.tar.gz 2> /dev/null || true)" tests_bundle="$(ls build/*/bundles/jdk-*_bin-tests${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)" static_libs_bundle="$(ls build/*/bundles/jdk-*_bin-static-libs${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)" @@ -58,6 +63,12 @@ runs: if [[ "$jdk_bundle_tar_gz" != "" ]]; then mv "$jdk_bundle_tar_gz" "bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz" fi + if [[ "$static_jdk_bundle_zip" != "" ]]; then + mv "$static_jdk_bundle_zip" "bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.zip" + fi + if [[ "$static_jdk_bundle_tar_gz" != "" ]]; then + mv "$static_jdk_bundle_tar_gz" "bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.tar.gz" + fi if [[ "$symbols_bundle" != "" ]]; then mv "$symbols_bundle" "bundles/symbols-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz" fi @@ -68,7 +79,7 @@ runs: mv "$static_libs_bundle" "bundles/static-libs-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz" fi - if [[ "$jdk_bundle_zip$jdk_bundle_tar_gz$symbols_bundle$tests_bundle$static_libs_bundle" != "" ]]; then + if [[ "$jdk_bundle_zip$jdk_bundle_tar_gz$static_jdk_bundle_zip$static_jdk_bundle_tar_gz$symbols_bundle$tests_bundle$static_libs_bundle" != "" ]]; then echo 'bundles-found=true' >> $GITHUB_OUTPUT else echo 'bundles-found=false' >> $GITHUB_OUTPUT @@ -78,7 +89,7 @@ runs: - name: 'Upload bundles artifact' uses: actions/upload-artifact@v4 with: - name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.bundle-suffix }} + name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}${{ inputs.bundle-suffix }} path: bundles retention-days: 1 if: steps.bundles.outputs.bundles-found == 'true' diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index 101668b2bd5..9c991eed419 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -64,6 +64,9 @@ on: bundle-suffix: required: false type: string + static-suffix: + required: false + type: string jobs: build-linux: @@ -143,3 +146,4 @@ jobs: platform: ${{ inputs.platform }} debug-suffix: "${{ matrix.debug-level == 'debug' && '-debug' || '' }}" bundle-suffix: ${{ inputs.bundle-suffix }} + static-suffix: ${{ inputs.static-suffix }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8dce1d214dc..6ca64bb82d0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -231,16 +231,14 @@ jobs: uses: ./.github/workflows/build-linux.yml with: platform: linux-x64 - make-target: 'static-jdk-image' + make-target: 'static-jdk-bundles' # There are issues with fastdebug static build in GHA due to space limit. # Only do release build for now. debug-levels: '[ "release" ]' gcc-major-version: '10' configure-arguments: ${{ github.event.inputs.configure-arguments }} make-arguments: ${{ github.event.inputs.make-arguments }} - # It currently doesn't produce any bundles, but probably will do in - # the future. - bundle-suffix: "-static" + static-suffix: "-static" if: needs.prepare.outputs.linux-x64 == 'true' build-linux-x64-static-libs: @@ -361,6 +359,19 @@ jobs: platform: linux-x64 bootjdk-platform: linux-x64 runs-on: ubuntu-22.04 + debug-suffix: -debug + + test-linux-x64-static: + name: linux-x64-static + needs: + - build-linux-x64 + - build-linux-x64-static + uses: ./.github/workflows/test.yml + with: + platform: linux-x64 + bootjdk-platform: linux-x64 + runs-on: ubuntu-22.04 + static-suffix: "-static" test-macos-aarch64: name: macos-aarch64 @@ -372,6 +383,7 @@ jobs: bootjdk-platform: macos-aarch64 runs-on: macos-14 xcode-toolset-version: '15.4' + debug-suffix: -debug test-windows-x64: name: windows-x64 @@ -382,3 +394,4 @@ jobs: platform: windows-x64 bootjdk-platform: windows-x64 runs-on: windows-2019 + debug-suffix: -debug diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 99aaf9650a0..665ae224372 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -40,6 +40,12 @@ on: xcode-toolset-version: required: false type: string + debug-suffix: + required: false + type: string + static-suffix: + required: false + type: string env: # These are needed to make the MSYS2 bash work properly @@ -86,35 +92,35 @@ jobs: - test-name: 'hs/tier1 common' test-suite: 'test/hotspot/jtreg/:tier1_common' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 compiler part 1' test-suite: 'test/hotspot/jtreg/:tier1_compiler_1' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 compiler part 2' test-suite: 'test/hotspot/jtreg/:tier1_compiler_2' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 compiler part 3' test-suite: 'test/hotspot/jtreg/:tier1_compiler_3' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 gc' test-suite: 'test/hotspot/jtreg/:tier1_gc' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 runtime' test-suite: 'test/hotspot/jtreg/:tier1_runtime' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 serviceability' test-suite: 'test/hotspot/jtreg/:tier1_serviceability' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'lib-test/tier1' test-suite: 'test/lib-test/:tier1' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} steps: - name: 'Checkout the JDK source' @@ -140,6 +146,7 @@ jobs: with: platform: ${{ inputs.platform }} debug-suffix: ${{ matrix.debug-suffix }} + static-suffix: ${{ inputs.static-suffix }} - name: 'Install dependencies' run: | @@ -160,6 +167,21 @@ jobs: 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 @@ -171,7 +193,9 @@ jobs: 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' + ${{ 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 }} @@ -204,7 +228,7 @@ jobs: echo '::warning ::Missing test-support directory' fi - artifact_name="results-${{ inputs.platform }}-$(echo ${{ matrix.test-name }} | tr '/ ' '__')" + artifact_name="results-${{ inputs.platform }}-$(echo ${{ matrix.test-name }}${{ inputs.static-suffix }} | tr '/ ' '__')" echo "artifact-name=$artifact_name" >> $GITHUB_OUTPUT if: always()