| # |
| # 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: 'OpenJDK GHA Sanity Checks' |
| |
| on: |
| push: |
| branches-ignore: |
| - master |
| - pr/* |
| workflow_dispatch: |
| inputs: |
| platforms: |
| description: 'Platform(s) to execute on (comma separated, e.g. "linux-x64, macos, aarch64")' |
| required: true |
| default: 'linux-x64, linux-x86, linux-x64-variants, linux-cross-compile, macos-x64, macos-aarch64, windows-x64, windows-aarch64, docs' |
| configure-arguments: |
| description: 'Additional configure arguments' |
| required: false |
| make-arguments: |
| description: 'Additional make arguments' |
| required: false |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.ref }} |
| cancel-in-progress: true |
| |
| jobs: |
| |
| ### |
| ### Determine platforms to include |
| ### |
| |
| select: |
| name: 'Select platforms' |
| runs-on: ubuntu-22.04 |
| outputs: |
| linux-x64: ${{ steps.include.outputs.linux-x64 }} |
| linux-x86: ${{ steps.include.outputs.linux-x86 }} |
| linux-x64-variants: ${{ steps.include.outputs.linux-x64-variants }} |
| linux-cross-compile: ${{ steps.include.outputs.linux-cross-compile }} |
| macos-x64: ${{ steps.include.outputs.macos-x64 }} |
| macos-aarch64: ${{ steps.include.outputs.macos-aarch64 }} |
| windows-x64: ${{ steps.include.outputs.windows-x64 }} |
| windows-aarch64: ${{ steps.include.outputs.windows-aarch64 }} |
| docs: ${{ steps.include.outputs.docs }} |
| |
| steps: |
| # This function must be inlined in main.yml, or we'd be forced to checkout the repo |
| - name: 'Check what jobs to run' |
| id: include |
| run: | |
| # Determine which platform jobs to run |
| |
| # Returns 'true' if the input platform list matches any of the platform monikers given as argument, |
| # 'false' otherwise. |
| # arg $1: platform name or names to look for |
| function check_platform() { |
| if [[ $GITHUB_EVENT_NAME == workflow_dispatch ]]; then |
| input='${{ github.event.inputs.platforms }}' |
| elif [[ $GITHUB_EVENT_NAME == push ]]; then |
| if [[ '${{ !secrets.JDK_SUBMIT_FILTER || startsWith(github.ref, 'refs/heads/submit/') }}' == 'false' ]]; then |
| # If JDK_SUBMIT_FILTER is set, and this is not a "submit/" branch, don't run anything |
| >&2 echo 'JDK_SUBMIT_FILTER is set and not a "submit/" branch' |
| echo 'false' |
| return |
| else |
| input='${{ secrets.JDK_SUBMIT_PLATFORMS }}' |
| fi |
| fi |
| |
| normalized_input="$(echo ,$input, | tr -d ' ')" |
| if [[ "$normalized_input" == ",," ]]; then |
| # For an empty input, assume all platforms should run |
| echo 'true' |
| return |
| else |
| # Check for all acceptable platform names |
| for part in $* ; do |
| if echo "$normalized_input" | grep -q -e ",$part," ; then |
| echo 'true' |
| return |
| fi |
| done |
| fi |
| |
| echo 'false' |
| } |
| |
| echo "linux-x64=$(check_platform linux-x64 linux x64)" >> $GITHUB_OUTPUT |
| echo "linux-x86=$(check_platform linux-x86 linux x86)" >> $GITHUB_OUTPUT |
| echo "linux-x64-variants=$(check_platform linux-x64-variants variants)" >> $GITHUB_OUTPUT |
| echo "linux-cross-compile=$(check_platform linux-cross-compile cross-compile)" >> $GITHUB_OUTPUT |
| echo "macos-x64=$(check_platform macos-x64 macos x64)" >> $GITHUB_OUTPUT |
| echo "macos-aarch64=$(check_platform macos-aarch64 macos aarch64)" >> $GITHUB_OUTPUT |
| echo "windows-x64=$(check_platform windows-x64 windows x64)" >> $GITHUB_OUTPUT |
| echo "windows-aarch64=$(check_platform windows-aarch64 windows aarch64)" >> $GITHUB_OUTPUT |
| echo "docs=$(check_platform docs)" >> $GITHUB_OUTPUT |
| |
| ### |
| ### Build jobs |
| ### |
| |
| build-linux-x64: |
| name: linux-x64 |
| needs: select |
| uses: ./.github/workflows/build-linux.yml |
| with: |
| platform: linux-x64 |
| gcc-major-version: '10' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.linux-x64 == 'true' |
| |
| build-linux-x86: |
| name: linux-x86 |
| needs: select |
| uses: ./.github/workflows/build-linux.yml |
| with: |
| platform: linux-x86 |
| gcc-major-version: '10' |
| gcc-package-suffix: '-multilib' |
| apt-architecture: 'i386' |
| # Some multilib libraries do not have proper inter-dependencies, so we have to |
| # install their dependencies manually. |
| apt-extra-packages: 'libfreetype-dev:i386 libtiff-dev:i386 libcupsimage2-dev:i386 libc6-i386 libgcc-s1:i386 libstdc++6:i386' |
| extra-conf-options: '--with-target-bits=32' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.linux-x86 == 'true' |
| |
| build-linux-x64-hs-nopch: |
| name: linux-x64-hs-nopch |
| needs: select |
| uses: ./.github/workflows/build-linux.yml |
| with: |
| platform: linux-x64 |
| make-target: 'hotspot' |
| debug-levels: '[ "debug" ]' |
| gcc-major-version: '10' |
| extra-conf-options: '--disable-precompiled-headers' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.linux-x64-variants == 'true' |
| |
| build-linux-x64-hs-zero: |
| name: linux-x64-hs-zero |
| needs: select |
| uses: ./.github/workflows/build-linux.yml |
| with: |
| platform: linux-x64 |
| make-target: 'hotspot' |
| debug-levels: '[ "debug" ]' |
| gcc-major-version: '10' |
| extra-conf-options: '--with-jvm-variants=zero --disable-precompiled-headers' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.linux-x64-variants == 'true' |
| |
| build-linux-x64-hs-minimal: |
| name: linux-x64-hs-minimal |
| needs: select |
| uses: ./.github/workflows/build-linux.yml |
| with: |
| platform: linux-x64 |
| make-target: 'hotspot' |
| debug-levels: '[ "debug" ]' |
| gcc-major-version: '10' |
| extra-conf-options: '--with-jvm-variants=minimal --disable-precompiled-headers' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.linux-x64-variants == 'true' |
| |
| build-linux-x64-hs-optimized: |
| name: linux-x64-hs-optimized |
| needs: select |
| uses: ./.github/workflows/build-linux.yml |
| with: |
| platform: linux-x64 |
| make-target: 'hotspot' |
| # Technically this is not the "debug" level, but we can't inject a new matrix state for just this job |
| debug-levels: '[ "debug" ]' |
| gcc-major-version: '10' |
| extra-conf-options: '--with-debug-level=optimized --disable-precompiled-headers' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.linux-x64-variants == 'true' |
| |
| build-linux-cross-compile: |
| name: linux-cross-compile |
| needs: |
| - select |
| uses: ./.github/workflows/build-cross-compile.yml |
| with: |
| gcc-major-version: '10' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.linux-cross-compile == 'true' |
| |
| build-macos-x64: |
| name: macos-x64 |
| needs: select |
| uses: ./.github/workflows/build-macos.yml |
| with: |
| platform: macos-x64 |
| runs-on: 'macos-13' |
| xcode-toolset-version: '14.3.1' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.macos-x64 == 'true' |
| |
| build-macos-aarch64: |
| name: macos-aarch64 |
| needs: select |
| uses: ./.github/workflows/build-macos.yml |
| with: |
| platform: macos-aarch64 |
| runs-on: 'macos-14' |
| xcode-toolset-version: '14.3.1' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.macos-aarch64 == 'true' |
| |
| build-windows-x64: |
| name: windows-x64 |
| needs: select |
| uses: ./.github/workflows/build-windows.yml |
| with: |
| platform: windows-x64 |
| msvc-toolset-version: '14.29' |
| msvc-toolset-architecture: 'x86.x64' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.windows-x64 == 'true' |
| |
| build-windows-aarch64: |
| name: windows-aarch64 |
| needs: select |
| uses: ./.github/workflows/build-windows.yml |
| with: |
| platform: windows-aarch64 |
| msvc-toolset-version: '14.29' |
| msvc-toolset-architecture: 'arm64' |
| make-target: 'hotspot' |
| extra-conf-options: '--openjdk-target=aarch64-unknown-cygwin' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.windows-aarch64 == 'true' |
| |
| build-docs: |
| name: docs |
| needs: select |
| uses: ./.github/workflows/build-linux.yml |
| with: |
| platform: linux-x64 |
| debug-levels: '[ "debug" ]' |
| make-target: 'docs-jdk-bundles' |
| # Make sure we never try to make full docs, since that would require a |
| # build JDK, and we do not need the additional testing of the graphs. |
| extra-conf-options: '--disable-full-docs' |
| gcc-major-version: '10' |
| configure-arguments: ${{ github.event.inputs.configure-arguments }} |
| make-arguments: ${{ github.event.inputs.make-arguments }} |
| if: needs.select.outputs.docs == 'true' |
| |
| ### |
| ### Test jobs |
| ### |
| |
| test-linux-x64: |
| name: linux-x64 |
| needs: |
| - build-linux-x64 |
| uses: ./.github/workflows/test.yml |
| with: |
| platform: linux-x64 |
| bootjdk-platform: linux-x64 |
| runs-on: ubuntu-22.04 |
| |
| test-linux-x86: |
| name: linux-x86 |
| needs: |
| - build-linux-x86 |
| uses: ./.github/workflows/test.yml |
| with: |
| platform: linux-x86 |
| bootjdk-platform: linux-x64 |
| runs-on: ubuntu-22.04 |
| |
| test-macos-x64: |
| name: macos-x64 |
| needs: |
| - build-macos-x64 |
| uses: ./.github/workflows/test.yml |
| with: |
| platform: macos-x64 |
| bootjdk-platform: macos-x64 |
| runs-on: macos-13 |
| |
| test-macos-aarch64: |
| name: macos-aarch64 |
| needs: |
| - build-macos-aarch64 |
| uses: ./.github/workflows/test.yml |
| with: |
| platform: macos-aarch64 |
| bootjdk-platform: macos-aarch64 |
| runs-on: macos-14 |
| |
| test-windows-x64: |
| name: windows-x64 |
| needs: |
| - build-windows-x64 |
| uses: ./.github/workflows/test.yml |
| with: |
| platform: windows-x64 |
| bootjdk-platform: windows-x64 |
| runs-on: windows-2019 |
| |
| # Remove bundles so they are not misconstrued as binary distributions from the JDK project |
| remove-bundles: |
| name: 'Remove bundle artifacts' |
| runs-on: ubuntu-22.04 |
| if: always() |
| needs: |
| - build-linux-x64 |
| - build-linux-x86 |
| - build-linux-x64-hs-nopch |
| - build-linux-x64-hs-zero |
| - build-linux-x64-hs-minimal |
| - build-linux-x64-hs-optimized |
| - build-linux-cross-compile |
| - build-macos-x64 |
| - build-macos-aarch64 |
| - build-windows-x64 |
| - build-windows-aarch64 |
| - test-linux-x64 |
| - test-linux-x86 |
| - test-macos-x64 |
| - test-windows-x64 |
| |
| steps: |
| # Hack to get hold of the api environment variables that are only defined for actions |
| - name: 'Get API configuration' |
| id: api |
| uses: actions/github-script@v7 |
| with: |
| script: 'return { url: process.env["ACTIONS_RUNTIME_URL"], token: process.env["ACTIONS_RUNTIME_TOKEN"] }' |
| |
| - name: 'Remove bundle artifacts' |
| run: | |
| # Find and remove all bundle artifacts |
| ALL_ARTIFACT_URLS="$(curl -s \ |
| -H 'Accept: application/json;api-version=6.0-preview' \ |
| -H 'Authorization: Bearer ${{ fromJson(steps.api.outputs.result).token }}' \ |
| '${{ fromJson(steps.api.outputs.result).url }}_apis/pipelines/workflows/${{ github.run_id }}/artifacts?api-version=6.0-preview')" |
| BUNDLE_ARTIFACT_URLS="$(echo "$ALL_ARTIFACT_URLS" | jq -r -c '.value | map(select(.name|startswith("bundles-"))) | .[].url')" |
| for url in $BUNDLE_ARTIFACT_URLS; do |
| echo "Removing $url" |
| curl -s \ |
| -H 'Accept: application/json;api-version=6.0-preview' \ |
| -H 'Authorization: Bearer ${{ fromJson(steps.api.outputs.result).token }}' \ |
| -X DELETE "$url" \ |
| || echo "Failed to remove bundle" |
| done |