| # |
| # Copyright (c) 2017 Angelo Zerr and other contributors as |
| # indicated by the @author tags. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| name: Early Access |
| |
| # trigger on push to branches and PR |
| on: |
| push: |
| branch: |
| pull_request: |
| |
| env: |
| GRAALVM_VERSION: '22.3.1' |
| JAVA_VERSION: '17' |
| |
| jobs: |
| default-build: |
| name: 'Default build (without Graal)' |
| if: startsWith(github.event.head_commit.message, '[release] Release ') != true |
| runs-on: ubuntu-22.04 |
| steps: |
| - name: 'Checkout' |
| uses: actions/checkout@v3 |
| |
| - name: 'Run default (non-native) build' |
| run: ./mvnw verify -Dmrm=false -B -ntp -e |
| |
| - name: 'Upload daemon test logs' |
| if: always() |
| uses: actions/upload-artifact@v3 |
| with: |
| name: daemon-test-logs-default-build |
| path: integration-tests/target/mvnd-tests/**/daemon*.log |
| |
| native-build: |
| name: 'Build with Graal on ${{ matrix.os }}' |
| if: startsWith(github.event.head_commit.message, '[release] Release ') != true |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ ubuntu-22.04, macOS-11, windows-2019 ] |
| runs-on: ${{ matrix.os }} |
| |
| steps: |
| - name: 'Checkout' |
| uses: actions/checkout@v3 |
| |
| - name: 'Set vars' |
| shell: bash |
| run: | |
| OS=$(echo '${{ runner.os }}' | awk '{print tolower($0)}') |
| [[ $OS == 'ubuntu' ]] && echo "OS=linux" >> $GITHUB_ENV || echo "OS=$OS" >> $GITHUB_ENV |
| [[ $OS == 'macos' ]] && echo "OS=darwin" >> $GITHUB_ENV || echo "OS=$OS" >> $GITHUB_ENV |
| echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV |
| |
| - name: 'Set up Graal' |
| uses: graalvm/setup-graalvm@v1 |
| with: |
| version: ${{ env.GRAALVM_VERSION }} |
| java-version: ${{ env.JAVA_VERSION }} |
| components: 'native-image' |
| github-token: ${{ secrets.GITHUB_TOKEN }} |
| |
| - name: 'Maven clean' |
| run: ./mvnw clean -Dmrm=false -B -ntp -e |
| |
| - name: 'Patch Graal libs for only requiring glibc 2.12' |
| if: ${{ env.OS == 'linux' }} |
| shell: bash |
| run: | |
| mkdir -p client/target/graalvm-libs-for-glibc-2.12 |
| |
| : patch common libraries |
| ( find "$GRAALVM_HOME/lib/static/linux-amd64/glibc" -name '*.a' |
| ls -1 /lib/x86_64-linux-gnu/libz.a |
| ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-amd64/libjvm.a" |
| ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-amd64/liblibchelper.a" |
| ) | while IFS= read -r input; do |
| output="client/target/graalvm-libs-for-glibc-2.12/$(basename -- "$input")" |
| objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef -- "$input" "$output" 2>/dev/null |
| done |
| |
| : patch gcc startfile |
| gcc -O3 -Os -Wall -Wextra -Werror -Wconversion -Wsign-conversion -Wcast-qual -pedantic -c -o client/target/dynamic-libc-start.o client/src/main/resources/glibc/dynamic-libc-start.c |
| ld -r /lib/x86_64-linux-gnu/Scrt1.o client/target/dynamic-libc-start.o -o client/target/graalvm-libs-for-glibc-2.12/Scrt1.o |
| objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.12/Scrt1.o 2>/dev/null |
| |
| - name: 'Build native distribution' |
| run: ./mvnw verify -Pnative -Dmrm=false -B -ntp -e |
| |
| - name: 'Verify native binary for only requiring glibc 2.12' |
| if: ${{ env.OS == 'linux' }} |
| shell: bash |
| run: | |
| (( 4 == "$(ldd client/target/mvnd | awk '{print $1}' | sort -u | grep -c 'lib\(c\|dl\|rt\|pthread\)\.so\.[0-9]')" )) || ( ldd client/target/mvnd && false ) |
| err=0 |
| objdump -T client/target/mvnd | grep GLIBC_ | grep -v 'GLIBC_\([01]\|2\.[0-9]\|2\.1[012]\)[^0-9]' || err=$? |
| (( err == 1 )) |
| |
| - name: 'Upload daemon test logs' |
| if: always() |
| uses: actions/upload-artifact@v3 |
| with: |
| name: daemon-test-logs-${{ env.OS }} |
| path: integration-tests/target/mvnd-tests/**/daemon*.log |
| |
| - name: 'Upload m39 artifact' |
| uses: actions/upload-artifact@v3 |
| with: |
| name: mvnd-m39-${{ env.OS }} |
| path: dist-m39/target/maven-mvnd-*.zip |
| |
| - name: 'Upload m40 artifact' |
| uses: actions/upload-artifact@v3 |
| with: |
| name: mvnd-m40-${{ env.OS }} |
| path: dist-m40/target/maven-mvnd-*.zip |