From c9bdb7b8b83c4f1d0f804d079736c4c5c75a7394 Mon Sep 17 00:00:00 2001 From: Foivos Zakkak Date: Tue, 17 Oct 2023 10:14:25 +0300 Subject: [PATCH] TEST ME DON'T MERGE ME --- .github/workflows/ci-actions-incremental.yml | 1034 ++---------------- 1 file changed, 80 insertions(+), 954 deletions(-) diff --git a/.github/workflows/ci-actions-incremental.yml b/.github/workflows/ci-actions-incremental.yml index b1198cd0cd23a..ec7469b7301db 100644 --- a/.github/workflows/ci-actions-incremental.yml +++ b/.github/workflows/ci-actions-incremental.yml @@ -52,7 +52,7 @@ env: LANG: en_US.UTF-8 COMMON_MAVEN_ARGS: "-e -B --settings .github/mvn-settings.xml --fail-at-end" COMMON_TEST_MAVEN_ARGS: "-Dformat.skip -Denforcer.skip -DskipDocs -Dforbiddenapis.skip -DskipExtensionValidation -DskipCodestartValidation" - NATIVE_TEST_MAVEN_ARGS: "-Dtest-containers -Dstart-containers -Dquarkus.native.native-image-xmx=6g -Dnative -Dnative.surefire.skip -Dno-descriptor-tests clean install -DskipDocs" + NATIVE_TEST_MAVEN_ARGS: "-Dtest-containers -Dstart-containers -Dquarkus.native.native-image-xmx=13g -Dnative -Dnative.surefire.skip -Dno-descriptor-tests clean install -DskipDocs -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel-builder-image:jdk-23" JVM_TEST_MAVEN_ARGS: "-Dtest-containers -Dstart-containers -Dquarkus.test.hang-detection-timeout=60" PTS_MAVEN_ARGS: "-Ddevelocity.pts.enabled=${{ github.event_name == 'pull_request' && github.base_ref == 'main' && 'true' || 'false' }}" DB_USER: hibernate_orm_test @@ -70,28 +70,28 @@ jobs: # workflow_run payload is empty. # For more details, see # https://github.community/t/pull-request-attribute-empty-in-workflow-run-event-object-for-pr-from-forked-repo/154682 - attach-pr-number: - runs-on: ubuntu-latest - name: Attach pull request number - if: github.event_name == 'pull_request' - steps: - - name: Create file - run: | - echo -n ${{ github.event.number }} > pull-request-number - - name: Upload pull request number - uses: actions/upload-artifact@v4 - with: - name: pull-request-number-${{ github.event.number }} - path: pull-request-number - retention-days: 1 - ci-sanity-check: - name: "CI Sanity Check" - runs-on: ubuntu-latest - # Skip main in forks - if: "github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main')" - steps: - - name: Build - run: sleep 30 +# attach-pr-number: +# runs-on: ubuntu-latest +# name: Attach pull request number +# if: github.event_name == 'pull_request' +# steps: +# - name: Create file +# run: | +# echo -n ${{ github.event.number }} > pull-request-number +# - name: Upload pull request number +# uses: actions/upload-artifact@v4 +# with: +# name: pull-request-number-${{ github.event.number }} +# path: pull-request-number +# retention-days: 1 +# ci-sanity-check: +# name: "CI Sanity Check" +# runs-on: ubuntu-latest +# # Skip main in forks +# if: "github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main')" +# steps: +# - name: Build +# run: sleep 30 build-jdk17: name: "Initial JDK 17 Build" runs-on: ubuntu-latest @@ -335,195 +335,59 @@ jobs: echo "run_quickstarts=${run_quickstarts}" >> $GITHUB_OUTPUT echo "run_tcks=${run_tcks}" >> $GITHUB_OUTPUT - jvm-tests: - name: JVM Tests - JDK ${{matrix.java.name}} - runs-on: ${{ matrix.java.os-name }} + native-tests: + name: Native Tests - ${{matrix.category}} needs: [build-jdk17, calculate-test-jobs] - # Skip main in forks - if: "needs.calculate-test-jobs.outputs.run_jvm == 'true' && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main'))" - timeout-minutes: 400 + runs-on: ${{matrix.os-name}} env: - MAVEN_OPTS: ${{ matrix.java.maven_opts }} - JAVA_VERSION_GRADLE: ${{ matrix.java.java-version-gradle || matrix.java.java-version }} + # leave more space for the actual native compilation and execution + MAVEN_OPTS: -Xmx1g + # Skip main in forks + if: "needs.calculate-test-jobs.outputs.native_matrix != '{}' && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main'))" + # Ignore the following YAML Schema error + timeout-minutes: ${{matrix.timeout}} strategy: + max-parallel: 12 fail-fast: false - matrix: ${{ fromJson(needs.calculate-test-jobs.outputs.jvm_matrix) }} - + matrix: ${{ fromJson(needs.calculate-test-jobs.outputs.native_matrix) }} steps: - name: Gradle Enterprise environment run: | - echo "GE_TAGS=jdk-${{matrix.java.name}}" >> "$GITHUB_ENV" - echo "GE_CUSTOM_VALUES=gh-job-name=JVM Tests - JDK ${{matrix.java.name}}" >> "$GITHUB_ENV" - - name: Stop mysql - if: "!startsWith(matrix.java.os-name, 'windows') && !startsWith(matrix.java.os-name, 'macos')" - run: | - ss -ln - sudo service mysql stop || true + category=$(echo -n '${{matrix.category}}' | tr '[:upper:]' '[:lower:]' | tr -c '[:alnum:]-' '-' | sed -E 's/-+/-/g') + echo "GE_TAGS=native-${category}" >> "$GITHUB_ENV" + echo "GE_CUSTOM_VALUES=gh-job-name=Native Tests - ${{matrix.category}}" >> "$GITHUB_ENV" - name: Support longpaths on Windows - if: "startsWith(matrix.java.os-name, 'windows')" + if: "startsWith(matrix.os-name, 'windows')" run: git config --global core.longpaths true - uses: actions/checkout@v4 - with: - # this is important for GIB to work - fetch-depth: 0 - - name: Add quarkusio remote for GIB - run: git remote show quarkusio &> /dev/null || git remote add quarkusio https://github.com/quarkusio/quarkus.git - - - name: apt clean - if: "!startsWith(matrix.java.os-name, 'windows') && !startsWith(matrix.java.os-name, 'macos')" - run: sudo apt-get clean - - name: Reclaim Disk Space - if: "!startsWith(matrix.java.os-name, 'windows') && !startsWith(matrix.java.os-name, 'macos')" run: .github/ci-prerequisites.sh - - - name: Set up JDK ${{ env.JAVA_VERSION_GRADLE }} for Gradle (if needed) - if: ${{ env.JAVA_VERSION_GRADLE != matrix.java.java-version }} + if: ${{ !startsWith(matrix.os-name, 'windows') }} + - name: Set up JDK 17 uses: actions/setup-java@v4 with: distribution: temurin - java-version: ${{ matrix.java.java-version-gradle }} - architecture: ${{ matrix.java.architecture || 'x64' }} - - - name: Set up GRADLE_JAVA_HOME (if needed) - if: ${{ env.JAVA_VERSION_GRADLE != matrix.java.java-version }} - run: | - JAVA_HOME_ARCHITECTURE=$(echo "${{ matrix.java.architecture || 'x64' }}" | tr [:lower:] [:upper:]) - GRADLE_JAVA_HOME_VARIABLE="JAVA_HOME_${JAVA_VERSION_GRADLE}_${JAVA_HOME_ARCHITECTURE}" - echo "GRADLE_JAVA_HOME=${!GRADLE_JAVA_HOME_VARIABLE}" >> "$GITHUB_ENV" - - - name: Set up JDK ${{ matrix.java.java-version }} - uses: actions/setup-java@v4 - with: - distribution: ${{ matrix.java.java-distribution || 'temurin' }} - java-version: ${{ matrix.java.java-version }} - architecture: ${{ matrix.java.architecture || 'x64' }} - - - name: Restore Maven Repository - uses: actions/cache/restore@v4 - with: - path: ~/.m2/repository - key: ${{ needs.build-jdk17.outputs.m2-cache-key }} - restore-keys: | - ${{ needs.build-jdk17.outputs.m2-monthly-branch-cache-key }}- - ${{ needs.build-jdk17.outputs.m2-monthly-cache-key }}- - - name: Download previously uploaded .m2 content - uses: actions/download-artifact@v4 - with: - name: m2-content - path: . - - name: Extract previously uploaded .m2 content - run: tar -xzf m2-content.tgz -C ~ - - name: Cache Develocity local cache - uses: actions/cache@v4 - if: github.event_name == 'pull_request' - with: - path: ~/.m2/.develocity/build-cache - key: develocity-cache-JVM Tests - JDK ${{matrix.java.name}}-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }} - restore-keys: | - develocity-cache-JVM Tests - JDK ${{matrix.java.name}}-${{ github.event.pull_request.number }}- - - name: Setup Develocity Build Scan capture - uses: gradle/develocity-actions/setup-maven@v1.3 - with: - capture-strategy: ON_DEMAND - job-name: "JVM Tests - JDK ${{matrix.java.name}}" - add-pr-comment: false - add-job-summary: false - develocity-access-key: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} - develocity-token-expiry: 6 - - name: Build - env: - CAPTURE_BUILD_SCAN: true - # Despite the pre-calculated run_jvm flag, GIB has to be re-run here to figure out the exact submodules to build. - run: ./mvnw $COMMON_MAVEN_ARGS $COMMON_TEST_MAVEN_ARGS $PTS_MAVEN_ARGS clean install -Dsurefire.timeout=1200 -pl !integration-tests/gradle -pl !integration-tests/maven -pl !integration-tests/devmode -pl !integration-tests/devtools -Dno-test-kubernetes -pl !docs ${{ matrix.java.maven_args }} ${{ needs.build-jdk17.outputs.gib_args }} - - name: Clean Gradle temp directory - if: always() - run: devtools/gradle/gradlew --stop && rm -rf devtools/gradle/gradle-extension-plugin/build/tmp - - name: Analyze disk space - if: always() && !startsWith(matrix.java.os-name, 'windows') && !startsWith(matrix.java.os-name, 'macos') - run: .github/ci-disk-usage.sh - - name: Prepare failure archive (if maven failed) - if: failure() - run: find . -name '*-reports' -type d -o -name '*.log' | tar -czf test-reports.tgz -T - - - name: Upload failure Archive (if maven failed) - uses: actions/upload-artifact@v4 - if: failure() - with: - name: test-reports-jvm${{matrix.java.name}} - path: 'test-reports.tgz' - retention-days: 7 - - name: Prepare build reports archive - if: always() - run: | - 7z a -tzip build-reports.zip -r \ - '**/target/*-reports/TEST-*.xml' \ - 'target/build-report.json' \ - 'target/gradle-build-scan-url.txt' \ - LICENSE - - name: Upload build reports - uses: actions/upload-artifact@v4 - if: always() - with: - name: "build-reports-${{ github.run_attempt }}-JVM Tests - JDK ${{matrix.java.name}}" - path: | - build-reports.zip - retention-days: 7 - - name: Upload test-produced debug dumps - uses: actions/upload-artifact@v4 - # We need this as soon as there's a matching file - # -- even in case of success, as some flaky tests won't fail the build - if: always() - with: - name: "debug-${{ github.run_attempt }}-JVM Tests - JDK ${{matrix.java.name}}" - path: "**/target/debug/**" - if-no-files-found: ignore # If we're not currently debugging any test, it's fine. - retention-days: 28 # We don't get notified for flaky tests, so let's give maintainers time to get back to it - - name: Upload build.log (if build failed) - uses: actions/upload-artifact@v4 - if: ${{ failure() || cancelled() }} + java-version: 17 + - name: Install cl.exe + if: startsWith(matrix.os-name, 'windows') + uses: ilammy/msvc-dev-cmd@v1 + - uses: microsoft/setup-msbuild@v2 + if: startsWith(matrix.os-name, 'windows') + - name: Setup GraalVM + id: setup-graalvm + uses: graalvm/setup-graalvm@v1 + if: startsWith(matrix.os-name, 'windows') with: - name: "build-logs-JVM Tests - JDK ${{matrix.java.name}}" - path: | - **/build.log - retention-days: 7 - - maven-tests: - name: Maven Tests - JDK ${{matrix.java.name}} - runs-on: ${{ matrix.java.os-name }} - needs: [build-jdk17, calculate-test-jobs] - env: - MAVEN_OPTS: -Xmx2g -XX:MaxMetaspaceSize=1g - # Skip main in forks - if: "needs.calculate-test-jobs.outputs.run_maven == 'true' && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main'))" - timeout-minutes: 130 - strategy: - fail-fast: false - matrix: - java: - - { - name: "17", - java-version: 17, - os-name: "ubuntu-latest" - } - - { - name: "17 Windows", - java-version: 17, - os-name: "windows-latest" - } - steps: - - name: Gradle Enterprise environment + version: 'mandrel-latest' + java-version: '21' + distribution: 'mandrel' + github-token: ${{ secrets.GITHUB_TOKEN }} + # We do this so we can get better analytics for the downloaded version of the build images + - name: Update Docker Client User Agent run: | - echo "GE_TAGS=jdk-${{matrix.java.name}}" >> "$GITHUB_ENV" - echo "GE_CUSTOM_VALUES=gh-job-name=Maven Tests - JDK ${{matrix.java.name}}" >> "$GITHUB_ENV" - - name: Support longpaths on Windows - if: "startsWith(matrix.java.os-name, 'windows')" - run: git config --global core.longpaths true - - uses: actions/checkout@v4 - with: - # this is important for GIB to work - fetch-depth: 0 - - name: Add quarkusio remote for GIB - run: git remote show quarkusio &> /dev/null || git remote add quarkusio https://github.com/quarkusio/quarkus.git + if [ -f ~/.docker/config.json ]; then + cat <<< $(jq '.HttpHeaders += {"User-Agent": "Quarkus-CI-Docker-Client"}' ~/.docker/config.json) > ~/.docker/config.json + fi - name: Restore Maven Repository uses: actions/cache/restore@v4 with: @@ -539,48 +403,44 @@ jobs: path: . - name: Extract previously uploaded .m2 content run: tar -xzf m2-content.tgz -C ~ - - name: Set up JDK ${{ matrix.java.java-version }} - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: ${{ matrix.java.java-version }} - name: Setup Develocity Build Scan capture uses: gradle/develocity-actions/setup-maven@v1.3 with: capture-strategy: ON_DEMAND - job-name: "Maven Tests - JDK ${{matrix.java.name}}" + job-name: "Native Tests - ${{matrix.category}}" add-pr-comment: false add-job-summary: false develocity-access-key: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} develocity-token-expiry: 6 + - name: Cache Quarkus metadata + uses: actions/cache@v4 + with: + path: '**/.quarkus/quarkus-prod-config-dump' + key: ${{ needs.build-jdk17.outputs.quarkus-metadata-cache-key }} + # The key is restored from default branch if not found, but still branch specific to override the default after first run + restore-keys: ${{ needs.build-jdk17.outputs.quarkus-metadata-cache-key-default }} - name: Build env: + TEST_MODULES: ${{matrix.test-modules}} + CONTAINER_BUILD: ${{startsWith(matrix.os-name, 'windows') && 'false' || 'true'}} CAPTURE_BUILD_SCAN: true - # Important: keep -pl ... in sync with "Calculate run flags"! - # Despite the pre-calculated run_jvm flag, GIB has to be re-run here to figure out the exact submodules to build. - run: ./mvnw $COMMON_MAVEN_ARGS $COMMON_TEST_MAVEN_ARGS $PTS_MAVEN_ARGS $JVM_TEST_MAVEN_ARGS clean install -pl 'integration-tests/maven' -pl 'integration-tests/devmode' ${{ needs.build-jdk17.outputs.gib_args }} + run: ./mvnw $COMMON_MAVEN_ARGS $COMMON_TEST_MAVEN_ARGS $PTS_MAVEN_ARGS -f integration-tests -pl "$TEST_MODULES" $NATIVE_TEST_MAVEN_ARGS -Dquarkus.native.container-build=$CONTAINER_BUILD - name: Prepare failure archive (if maven failed) if: failure() - run: find . -name '*-reports' -type d -o -name '*.log' | tar -czf test-reports.tgz -T - + run: find . -type d -name '*-reports' -o -wholename '*/build/reports/tests/functionalTest' -o -name '*.log' | tar -czf test-reports.tgz -T - - name: Upload failure Archive (if maven failed) uses: actions/upload-artifact@v4 if: failure() with: - name: test-reports-maven-java${{matrix.java.name}} + name: test-reports-native-${{matrix.category}} path: 'test-reports.tgz' retention-days: 7 - # see https://github.com/actions/toolkit/blob/master/packages/artifact/docs/additional-information.md#non-supported-characters - - name: Rename invalid path - if: ${{ failure() || cancelled() }} - run: | - if [ -d 'integration-tests/maven/target/test-classes/projects/qit?fast?jar' ]; then mv 'integration-tests/maven/target/test-classes/projects/qit?fast?jar' 'integration-tests/maven/target/test-classes/projects/qit--fast--jar'; fi - if [ -d 'integration-tests/maven/target/test-classes/projects/qit?legacy?jar' ]; then mv 'integration-tests/maven/target/test-classes/projects/qit?legacy?jar' 'integration-tests/maven/target/test-classes/projects/qit--legacy--jar'; fi - if [ -d 'integration-tests/maven/target/test-classes/projects/qit?uber?jar' ]; then mv 'integration-tests/maven/target/test-classes/projects/qit?uber?jar' 'integration-tests/maven/target/test-classes/projects/qit--uber--jar'; fi - name: Prepare build reports archive if: always() run: | 7z a -tzip build-reports.zip -r \ '**/target/*-reports/TEST-*.xml' \ + '**/build/test-results/test/TEST-*.xml' \ 'target/build-report.json' \ 'target/gradle-build-scan-url.txt' \ LICENSE @@ -588,750 +448,16 @@ jobs: uses: actions/upload-artifact@v4 if: always() with: - name: "build-reports-${{ github.run_attempt }}-Maven Tests - JDK ${{matrix.java.name}}" + name: "build-reports-${{ github.run_attempt }}-Native Tests - ${{matrix.category}}" path: | build-reports.zip retention-days: 7 - - gradle-tests: - name: Gradle Tests - JDK ${{matrix.java.name}} - runs-on: ${{matrix.java.os-name}} - needs: [build-jdk17, calculate-test-jobs] - env: - # leave more space for the actual gradle execution (which is just wrapped by maven) - MAVEN_OPTS: -Xmx1g - # Skip main in forks - if: "needs.calculate-test-jobs.outputs.run_gradle == 'true' && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main'))" - timeout-minutes: 120 - strategy: - fail-fast: false - matrix: - java: - - { - name: "17", - java-version: 17, - os-name: "ubuntu-latest" - } - - { - name: "17 Windows", - java-version: 17, - os-name: "windows-latest" - } - steps: - - name: Gradle Enterprise environment - run: | - echo "GE_TAGS=jdk-${{matrix.java.name}}" >> "$GITHUB_ENV" - echo "GE_CUSTOM_VALUES=gh-job-name=Gradle Tests - JDK ${{matrix.java.name}}" >> "$GITHUB_ENV" - - name: Support longpaths on Windows - if: "startsWith(matrix.java.os-name, 'windows')" - run: git config --global core.longpaths true - - uses: actions/checkout@v4 - - name: Restore Maven Repository - uses: actions/cache/restore@v4 - with: - path: ~/.m2/repository - key: ${{ needs.build-jdk17.outputs.m2-cache-key }} - restore-keys: | - ${{ needs.build-jdk17.outputs.m2-monthly-branch-cache-key }}- - ${{ needs.build-jdk17.outputs.m2-monthly-cache-key }}- - - name: Download previously uploaded .m2 content - uses: actions/download-artifact@v4 - with: - name: m2-content - path: . - - name: Extract previously uploaded .m2 content - run: tar -xzf m2-content.tgz -C ~ - - name: Set up JDK ${{ matrix.java.java-version }} - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: ${{ matrix.java.java-version }} - cache: 'gradle' - - name: Verify dependencies - # runs on Windows as well but would require newline conversion, not worth it - if: "!startsWith(matrix.java.os-name, 'windows')" - run: ./integration-tests/gradle/update-dependencies.sh $COMMON_MAVEN_ARGS -Dscan=false - - name: Setup Develocity Build Scan capture - uses: gradle/develocity-actions/setup-maven@v1.3 - with: - capture-strategy: ON_DEMAND - job-name: "Gradle Tests - JDK ${{matrix.java.name}}" - add-pr-comment: false - add-job-summary: false - develocity-access-key: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} - develocity-token-expiry: 6 - - name: Build - env: - CAPTURE_BUILD_SCAN: true - # Important: keep -pl ... in sync with "Calculate run flags"! - run: ./mvnw $COMMON_MAVEN_ARGS $COMMON_TEST_MAVEN_ARGS $PTS_MAVEN_ARGS $JVM_TEST_MAVEN_ARGS clean install -pl integration-tests/gradle - - name: Prepare build reports archive - if: always() - run: | - 7z a -tzip build-reports.zip -r \ - '**/build/test-results/test/TEST-*.xml' \ - '**/target/*-reports/TEST-*.xml' \ - 'target/build-report.json' \ - 'target/gradle-build-scan-url.txt' \ - LICENSE - - name: Upload build reports + - name: Collect build JSON stats + shell: bash + run: find . -name '*runner*.json' | tar czvf build-stats.tgz -T - + - name: Upload build JSON stats uses: actions/upload-artifact@v4 - if: always() with: - name: "build-reports-${{ github.run_attempt }}-Gradle Tests - JDK ${{matrix.java.name}}" - path: | - build-reports.zip + name: build-stats-${{matrix.category}} + path: 'build-stats.tgz' retention-days: 7 - - devtools-tests: - name: Devtools Tests - JDK ${{matrix.java.name}} - runs-on: ${{matrix.java.os-name}} - needs: [build-jdk17, calculate-test-jobs] - # Skip main in forks - if: "needs.calculate-test-jobs.outputs.run_devtools == 'true' && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main'))" - timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - java: - - { - name: "17", - java-version: 17, - os-name: "ubuntu-latest" - } - - { - name: "21", - java-version: 21, - os-name: "ubuntu-latest" - } - - { - name: "17 Windows", - java-version: 17, - os-name: "windows-latest" - } - steps: - - name: Gradle Enterprise environment - run: | - echo "GE_TAGS=jdk-${{matrix.java.name}}" >> "$GITHUB_ENV" - echo "GE_CUSTOM_VALUES=gh-job-name=Devtools Tests - JDK ${{matrix.java.name}}" >> "$GITHUB_ENV" - - name: Support longpaths on Windows - if: "startsWith(matrix.java.os-name, 'windows')" - run: git config --global core.longpaths true - - uses: actions/checkout@v4 - - name: Restore Maven Repository - uses: actions/cache/restore@v4 - with: - path: ~/.m2/repository - key: ${{ needs.build-jdk17.outputs.m2-cache-key }} - restore-keys: | - ${{ needs.build-jdk17.outputs.m2-monthly-branch-cache-key }}- - ${{ needs.build-jdk17.outputs.m2-monthly-cache-key }}- - - name: Download previously uploaded .m2 content - uses: actions/download-artifact@v4 - with: - name: m2-content - path: . - - name: Extract previously uploaded .m2 content - run: tar -xzf m2-content.tgz -C ~ - - name: Set up JDK ${{ matrix.java.java-version }} - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: ${{ matrix.java.java-version }} - - name: Setup Develocity Build Scan capture - uses: gradle/develocity-actions/setup-maven@v1.3 - with: - capture-strategy: ON_DEMAND - job-name: "Devtools Tests - JDK ${{matrix.java.name}}" - add-pr-comment: false - add-job-summary: false - develocity-access-key: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} - develocity-token-expiry: 6 - - name: Build - env: - CAPTURE_BUILD_SCAN: true - # Important: keep -pl ... in sync with "Calculate run flags"! - run: ./mvnw $COMMON_MAVEN_ARGS $COMMON_TEST_MAVEN_ARGS $PTS_MAVEN_ARGS $JVM_TEST_MAVEN_ARGS clean install -pl 'integration-tests/devtools' - - name: Prepare failure archive (if maven failed) - if: failure() - run: find . -name '*-reports' -type d -o -name '*.log' | tar -czf test-reports.tgz -T - - - name: Upload failure Archive (if maven failed) - uses: actions/upload-artifact@v4 - if: failure() - with: - name: test-reports-devtools-java${{matrix.java.name}} - path: 'test-reports.tgz' - retention-days: 7 - - name: Prepare build reports archive - if: always() - run: | - 7z a -tzip build-reports.zip -r \ - '**/target/*-reports/TEST-*.xml' \ - 'target/build-report.json' \ - 'target/gradle-build-scan-url.txt' \ - LICENSE - - name: Upload build reports - uses: actions/upload-artifact@v4 - if: always() - with: - name: "build-reports-${{ github.run_attempt }}-Devtools Tests - JDK ${{matrix.java.name}}" - path: | - build-reports.zip - retention-days: 7 - - kubernetes-tests: - name: Kubernetes Tests - JDK ${{matrix.java.name}} - runs-on: ${{matrix.java.os-name}} - needs: [build-jdk17, calculate-test-jobs] - # Skip main in forks - if: "needs.calculate-test-jobs.outputs.run_kubernetes == 'true' && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main'))" - timeout-minutes: 40 - strategy: - fail-fast: false - matrix: - java: - - { - name: "17", - java-version: 17, - os-name: "ubuntu-latest" - } - - { - name: "21", - java-version: 21, - os-name: "ubuntu-latest" - } - - { - name: "17 Windows", - java-version: 17, - os-name: "windows-latest" - } - steps: - - name: Gradle Enterprise environment - run: | - echo "GE_TAGS=jdk-${{matrix.java.name}}" >> "$GITHUB_ENV" - echo "GE_CUSTOM_VALUES=gh-job-name=Kubernetes Tests - JDK ${{matrix.java.name}}" >> "$GITHUB_ENV" - - name: Support longpaths on Windows - if: "startsWith(matrix.java.os-name, 'windows')" - run: git config --global core.longpaths true - - uses: actions/checkout@v4 - - name: Restore Maven Repository - uses: actions/cache/restore@v4 - with: - path: ~/.m2/repository - key: ${{ needs.build-jdk17.outputs.m2-cache-key }} - restore-keys: | - ${{ needs.build-jdk17.outputs.m2-monthly-branch-cache-key }}- - ${{ needs.build-jdk17.outputs.m2-monthly-cache-key }}- - - name: Download previously uploaded .m2 content - uses: actions/download-artifact@v4 - with: - name: m2-content - path: . - - name: Extract previously uploaded .m2 content - run: tar -xzf m2-content.tgz -C ~ - - name: Set up JDK ${{ matrix.java.java-version }} - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: ${{ matrix.java.java-version }} - - name: Setup Develocity Build Scan capture - uses: gradle/develocity-actions/setup-maven@v1.3 - with: - capture-strategy: ON_DEMAND - job-name: "Kubernetes Tests - JDK ${{matrix.java.name}}" - add-pr-comment: false - add-job-summary: false - develocity-access-key: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} - develocity-token-expiry: 6 - - name: Build - env: - CAPTURE_BUILD_SCAN: true - # Important: keep -pl ... in sync with "Calculate run flags"! - run: ./mvnw $COMMON_MAVEN_ARGS $COMMON_TEST_MAVEN_ARGS $PTS_MAVEN_ARGS $JVM_TEST_MAVEN_ARGS clean install -f 'integration-tests/kubernetes' - - name: Prepare failure archive (if maven failed) - if: failure() - run: find . -name '*-reports' -type d -o -name '*.log' | tar -czf test-reports.tgz -T - - - name: Upload failure Archive (if maven failed) - uses: actions/upload-artifact@v4 - if: failure() - with: - name: test-reports-kubernetes-java${{matrix.java.name}} - path: 'test-reports.tgz' - retention-days: 7 - - name: Prepare build reports archive - if: always() - run: | - 7z a -tzip build-reports.zip -r \ - '**/target/*-reports/TEST-*.xml' \ - 'target/build-report.json' \ - 'target/gradle-build-scan-url.txt' \ - LICENSE - - name: Upload build reports - uses: actions/upload-artifact@v4 - if: always() - with: - name: "build-reports-${{ github.run_attempt }}-Kubernetes Tests - JDK ${{matrix.java.name}}" - path: | - build-reports.zip - retention-days: 7 - - quickstarts-tests: - name: Quickstarts Compilation - JDK ${{matrix.java.name}} - runs-on: ${{matrix.java.os-name}} - needs: [build-jdk17, calculate-test-jobs] - # Skip main in forks - if: "needs.calculate-test-jobs.outputs.run_quickstarts == 'true' && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main'))" - timeout-minutes: 90 - strategy: - fail-fast: false - matrix: - java: - - { - name: "17", - java-version: 17, - os-name: "ubuntu-latest" - } - steps: - - name: Gradle Enterprise environment - run: | - echo "GE_TAGS=jdk-${{matrix.java.name}}" >> "$GITHUB_ENV" - echo "GE_CUSTOM_VALUES=gh-job-name=Quickstarts Compilation - JDK ${{matrix.java.name}}" >> "$GITHUB_ENV" - - uses: actions/checkout@v4 - - name: Restore Maven Repository - uses: actions/cache/restore@v4 - with: - path: ~/.m2/repository - key: ${{ needs.build-jdk17.outputs.m2-cache-key }} - restore-keys: | - ${{ needs.build-jdk17.outputs.m2-monthly-branch-cache-key }}- - ${{ needs.build-jdk17.outputs.m2-monthly-cache-key }}- - - name: Download previously uploaded .m2 content - uses: actions/download-artifact@v4 - with: - name: m2-content - path: . - - name: Extract previously uploaded .m2 content - run: tar -xzf m2-content.tgz -C ~ - - name: Set up JDK ${{ matrix.java.java-version }} - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: ${{ matrix.java.java-version }} - - name: Setup Develocity Build Scan capture - uses: gradle/develocity-actions/setup-maven@v1.3 - with: - capture-strategy: ON_DEMAND - job-name: "Quickstarts Compilation - JDK ${{matrix.java.name}}" - add-pr-comment: false - add-job-summary: false - develocity-access-key: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} - develocity-token-expiry: 6 - - uses: actions/github-script@v7 - id: get-quickstarts-branch - with: - result-encoding: string - script: | - if (process.env.GITHUB_REPOSITORY != 'quarkusio/quarkus') { - return 'development' - } - - const branch = process.env.GITHUB_BASE_REF ? process.env.GITHUB_BASE_REF : process.env.GITHUB_REF_NAME - if (branch == 'main') { - return 'development' - } else { - return branch - } - - name: Get Quarkus version - id: get-quarkus-version - run: | - echo "quarkus-version=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_OUTPUT - - name: Compile Quickstarts - env: - CAPTURE_BUILD_SCAN: true - run: | - git clone --depth=1 -b ${{ steps.get-quickstarts-branch.outputs.result }} https://github.com/quarkusio/quarkus-quickstarts.git && cd quarkus-quickstarts - QUARKUS_VERSION_ARGS="-Dquarkus.platform.version=${{ steps.get-quarkus-version.outputs.quarkus-version }}" - export LANG=en_US && ./mvnw -e -B -fae --settings .github/mvn-settings.xml clean verify -DskipTests -Dquarkus.platform.group-id=io.quarkus $QUARKUS_VERSION_ARGS - - name: Prepare build reports archive - if: always() - run: | - 7z a -tzip build-reports.zip -r \ - 'quarkus-quickstarts/**/target/*-reports/TEST-*.xml' \ - 'quarkus-quickstarts/target/build-report.json' \ - 'quarkus-quickstarts/LICENSE' \ - - name: Upload build reports - uses: actions/upload-artifact@v4 - if: always() - with: - name: "build-reports-${{ github.run_attempt }}-Quickstarts Compilation - JDK ${{matrix.java.name}}" - path: | - build-reports.zip - retention-days: 7 - - virtual-thread-native-tests: - name: Native Tests - Virtual Thread - ${{matrix.category}} - runs-on: ${{matrix.os-name}} - needs: [build-jdk17, calculate-test-jobs] - # Skip main in forks - if: "needs.calculate-test-jobs.outputs.virtual_threads_matrix != '{}' && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main'))" - timeout-minutes: ${{matrix.timeout}} - strategy: - max-parallel: 12 - fail-fast: false - matrix: ${{ fromJson(needs.calculate-test-jobs.outputs.virtual_threads_matrix) }} - steps: - - name: Gradle Enterprise environment - run: | - category=$(echo -n '${{matrix.category}}' | tr '[:upper:]' '[:lower:]' | tr -c '[:alnum:]-' '-' | sed -E 's/-+/-/g') - echo "GE_TAGS=virtual-thread-native-${category}" >> "$GITHUB_ENV" - echo "GE_CUSTOM_VALUES=gh-job-name=Native Tests - Virtual Thread - ${{matrix.category}}" >> "$GITHUB_ENV" - - uses: actions/checkout@v4 - - name: Restore Maven Repository - uses: actions/cache/restore@v4 - with: - path: ~/.m2/repository - key: ${{ needs.build-jdk17.outputs.m2-cache-key }} - restore-keys: | - ${{ needs.build-jdk17.outputs.m2-monthly-branch-cache-key }}- - ${{ needs.build-jdk17.outputs.m2-monthly-cache-key }}- - - name: Download previously uploaded .m2 content - uses: actions/download-artifact@v4 - with: - name: m2-content - path: . - - name: Extract previously uploaded .m2 content - run: tar -xzf m2-content.tgz -C ~ - - name: Set up JDK 21 - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: 21 - # We do this so we can get better analytics for the downloaded version of the build images - - name: Update Docker Client User Agent - run: | - if [ -f ~/.docker/config.json ]; then - cat <<< $(jq '.HttpHeaders += {"User-Agent": "Quarkus-CI-Docker-Client"}' ~/.docker/config.json) > ~/.docker/config.json - fi - - name: Setup Develocity Build Scan capture - uses: gradle/develocity-actions/setup-maven@v1.3 - with: - capture-strategy: ON_DEMAND - job-name: "Native Tests - Virtual Thread - ${{matrix.category}}" - add-pr-comment: false - add-job-summary: false - develocity-access-key: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} - develocity-token-expiry: 6 - - name: Build - env: - TEST_MODULES: ${{matrix.test-modules}} - CONTAINER_BUILD: ${{startsWith(matrix.os-name, 'windows') && 'false' || 'true'}} - CAPTURE_BUILD_SCAN: true - run: | - export LANG=en_US && ./mvnw $COMMON_MAVEN_ARGS $COMMON_TEST_MAVEN_ARGS $PTS_MAVEN_ARGS -f integration-tests/virtual-threads -pl "$TEST_MODULES" $NATIVE_TEST_MAVEN_ARGS -Dextra-args=--enable-preview -Dquarkus.native.container-build=true - - name: Prepare build reports archive - if: always() - run: | - 7z a -tzip build-reports.zip -r \ - 'integration-tests/virtual-threads/**/target/*-reports/TEST-*.xml' \ - 'integration-tests/virtual-threads/target/build-report.json' \ - 'integration-tests/virtual-threads/target/gradle-build-scan-url.txt' \ - LICENSE - - name: Upload build reports - uses: actions/upload-artifact@v4 - if: always() - with: - name: "build-reports-${{ github.run_attempt }}-Virtual Thread Support Tests Native - ${{matrix.category}}" - path: | - build-reports.zip - retention-days: 7 - - tcks-test: - name: MicroProfile TCKs Tests - needs: [build-jdk17, calculate-test-jobs] - # Skip main in forks - if: "needs.calculate-test-jobs.outputs.run_tcks == 'true' && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main'))" - runs-on: ubuntu-latest - timeout-minutes: 150 - steps: - - name: Gradle Enterprise environment - run: | - echo "GE_TAGS=jdk-17" >> "$GITHUB_ENV" - echo "GE_CUSTOM_VALUES=gh-job-name=MicroProfile TCKs Tests" >> "$GITHUB_ENV" - - uses: actions/checkout@v4 - with: - # this is important for GIB to work - fetch-depth: 0 - - name: Add quarkusio remote - run: git remote show quarkusio &> /dev/null || git remote add quarkusio https://github.com/quarkusio/quarkus.git - - name: Reclaim Disk Space - run: .github/ci-prerequisites.sh - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: 17 - - name: Restore Maven Repository - uses: actions/cache/restore@v4 - with: - path: ~/.m2/repository - key: ${{ needs.build-jdk17.outputs.m2-cache-key }} - restore-keys: | - ${{ needs.build-jdk17.outputs.m2-monthly-branch-cache-key }}- - ${{ needs.build-jdk17.outputs.m2-monthly-cache-key }}- - - name: Download previously uploaded .m2 content - uses: actions/download-artifact@v4 - with: - name: m2-content - path: . - - name: Extract previously uploaded .m2 content - run: tar -xzf m2-content.tgz -C ~ - - name: Setup Develocity Build Scan capture - uses: gradle/develocity-actions/setup-maven@v1.3 - with: - capture-strategy: ON_DEMAND - job-name: "MicroProfile TCKs Tests" - add-pr-comment: false - add-job-summary: false - develocity-access-key: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} - develocity-token-expiry: 6 - - name: Verify - env: - CAPTURE_BUILD_SCAN: true - # Important: keep -pl ... in sync with "Calculate run flags"! - # Despite the pre-calculated run_tcks flag, GIB has to be re-run here to figure out the exact tcks submodules to build. - run: ./mvnw $COMMON_MAVEN_ARGS $COMMON_TEST_MAVEN_ARGS $PTS_MAVEN_ARGS -Dtcks -pl tcks -amd clean install ${{ needs.build-jdk17.outputs.gib_args }} - - name: Verify resteasy-reative dependencies - # note: ideally, this would be run _before_ mvnw but that would required building tcks/resteasy-reactive in two steps - run: ./tcks/resteasy-reactive/update-dependencies.sh $COMMON_MAVEN_ARGS - - name: Prepare failure archive (if maven failed) - if: failure() - run: find . -name '*-reports' -type d -o -name '*.log' | tar -czf test-reports.tgz -T - - - name: Upload failure Archive (if maven failed) - uses: actions/upload-artifact@v4 - if: failure() - with: - name: test-reports-tcks - path: 'test-reports.tgz' - retention-days: 7 - - name: Prepare build reports archive - if: always() - run: | - 7z a -tzip build-reports.zip -r \ - '**/target/*-reports/TEST-*.xml' \ - 'target/build-report.json' \ - 'target/gradle-build-scan-url.txt' \ - LICENSE - - name: Upload build reports - uses: actions/upload-artifact@v4 - if: always() - with: - name: "build-reports-${{ github.run_attempt }}-MicroProfile TCKs Tests" - path: | - build-reports.zip - retention-days: 7 - - native-tests: - name: Native Tests - ${{matrix.category}} - needs: [build-jdk17, calculate-test-jobs] - runs-on: ${{matrix.os-name}} - env: - # leave more space for the actual native compilation and execution - MAVEN_OPTS: -Xmx1g - # Skip main in forks - if: "needs.calculate-test-jobs.outputs.native_matrix != '{}' && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main'))" - # Ignore the following YAML Schema error - timeout-minutes: ${{matrix.timeout}} - strategy: - max-parallel: 12 - fail-fast: false - matrix: ${{ fromJson(needs.calculate-test-jobs.outputs.native_matrix) }} - steps: - - name: Gradle Enterprise environment - run: | - category=$(echo -n '${{matrix.category}}' | tr '[:upper:]' '[:lower:]' | tr -c '[:alnum:]-' '-' | sed -E 's/-+/-/g') - echo "GE_TAGS=native-${category}" >> "$GITHUB_ENV" - echo "GE_CUSTOM_VALUES=gh-job-name=Native Tests - ${{matrix.category}}" >> "$GITHUB_ENV" - - name: Support longpaths on Windows - if: "startsWith(matrix.os-name, 'windows')" - run: git config --global core.longpaths true - - uses: actions/checkout@v4 - - name: Reclaim Disk Space - run: .github/ci-prerequisites.sh - if: ${{ !startsWith(matrix.os-name, 'windows') }} - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: 17 - - name: Install cl.exe - if: startsWith(matrix.os-name, 'windows') - uses: ilammy/msvc-dev-cmd@v1 - - uses: microsoft/setup-msbuild@v2 - if: startsWith(matrix.os-name, 'windows') - - name: Setup GraalVM - id: setup-graalvm - uses: graalvm/setup-graalvm@v1 - if: startsWith(matrix.os-name, 'windows') - with: - version: 'mandrel-latest' - java-version: '21' - distribution: 'mandrel' - github-token: ${{ secrets.GITHUB_TOKEN }} - # We do this so we can get better analytics for the downloaded version of the build images - - name: Update Docker Client User Agent - run: | - if [ -f ~/.docker/config.json ]; then - cat <<< $(jq '.HttpHeaders += {"User-Agent": "Quarkus-CI-Docker-Client"}' ~/.docker/config.json) > ~/.docker/config.json - fi - - name: Restore Maven Repository - uses: actions/cache/restore@v4 - with: - path: ~/.m2/repository - key: ${{ needs.build-jdk17.outputs.m2-cache-key }} - restore-keys: | - ${{ needs.build-jdk17.outputs.m2-monthly-branch-cache-key }}- - ${{ needs.build-jdk17.outputs.m2-monthly-cache-key }}- - - name: Download previously uploaded .m2 content - uses: actions/download-artifact@v4 - with: - name: m2-content - path: . - - name: Extract previously uploaded .m2 content - run: tar -xzf m2-content.tgz -C ~ - - name: Setup Develocity Build Scan capture - uses: gradle/develocity-actions/setup-maven@v1.3 - with: - capture-strategy: ON_DEMAND - job-name: "Native Tests - ${{matrix.category}}" - add-pr-comment: false - add-job-summary: false - develocity-access-key: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} - develocity-token-expiry: 6 - - name: Cache Quarkus metadata - uses: actions/cache@v4 - with: - path: '**/.quarkus/quarkus-prod-config-dump' - key: ${{ needs.build-jdk17.outputs.quarkus-metadata-cache-key }} - # The key is restored from default branch if not found, but still branch specific to override the default after first run - restore-keys: ${{ needs.build-jdk17.outputs.quarkus-metadata-cache-key-default }} - - name: Build - env: - TEST_MODULES: ${{matrix.test-modules}} - CONTAINER_BUILD: ${{startsWith(matrix.os-name, 'windows') && 'false' || 'true'}} - CAPTURE_BUILD_SCAN: true - run: ./mvnw $COMMON_MAVEN_ARGS $COMMON_TEST_MAVEN_ARGS $PTS_MAVEN_ARGS -f integration-tests -pl "$TEST_MODULES" $NATIVE_TEST_MAVEN_ARGS -Dquarkus.native.container-build=$CONTAINER_BUILD - - name: Prepare failure archive (if maven failed) - if: failure() - run: find . -type d -name '*-reports' -o -wholename '*/build/reports/tests/functionalTest' -o -name '*.log' | tar -czf test-reports.tgz -T - - - name: Upload failure Archive (if maven failed) - uses: actions/upload-artifact@v4 - if: failure() - with: - name: test-reports-native-${{matrix.category}} - path: 'test-reports.tgz' - retention-days: 7 - - name: Prepare build reports archive - if: always() - run: | - 7z a -tzip build-reports.zip -r \ - '**/target/*-reports/TEST-*.xml' \ - '**/build/test-results/test/TEST-*.xml' \ - 'target/build-report.json' \ - 'target/gradle-build-scan-url.txt' \ - LICENSE - - name: Upload build reports - uses: actions/upload-artifact@v4 - if: always() - with: - name: "build-reports-${{ github.run_attempt }}-Native Tests - ${{matrix.category}}" - path: | - build-reports.zip - retention-days: 7 - - name: Collect build JSON stats - shell: bash - run: find . -name '*runner*.json' | tar czvf build-stats.tgz -T - - - name: Upload build JSON stats - uses: actions/upload-artifact@v4 - with: - name: build-stats-${{matrix.category}} - path: 'build-stats.tgz' - retention-days: 7 - - native-tests-stats-upload: - name: Upload build stats to collector - if: ${{ always() && github.repository == 'quarkusio/quarkus' && endsWith(github.ref, '/main') && github.event_name != 'pull_request' && needs.native-tests.result != 'skipped' && needs.native-tests.result != 'cancelled' }} - needs: - - native-tests - runs-on: ubuntu-latest - steps: - - uses: actions/download-artifact@v4 - with: - pattern: build-stats-* - path: . - - name: Extract and import build stats - env: - UPLOAD_TOKEN: ${{ secrets.UPLOAD_COLLECTOR_TOKEN }} - COLLECTOR_URL: https://collector.foci.life/api/v1/image-stats - TAG: quarkus-main-ci - shell: bash - run: | - cat > ./runner-info.json <