Skip to content

Desperate logging

Desperate logging #658

name: Quarkus CI
on:
push:
branches-ignore:
- 'dependabot/**'
# paths-ignore in ci-fork-mvn-cache.yml should match
paths-ignore:
- '.gitignore'
- '.dockerignore'
- '*.md'
- '*.adoc'
- '*.txt'
- 'adr/**'
- 'jakarta/**'
- 'docs/**'
- '.github/ISSUE_TEMPLATE/**'
- '.github/*.yml'
- '.github/*.java'
- '.github/*.conf'
- '.github/workflows/doc-build.yml'
- '.github/workflows/preview.yml'
- '.sdkmanrc'
- '.justfile'
pull_request:
types: [ opened, synchronize, reopened, ready_for_review ]
paths-ignore:
- '.gitignore'
- '.dockerignore'
- '*.md'
- '*.adoc'
- '*.txt'
- 'adr/**'
- 'jakarta/**'
- 'docs/**'
- '.github/ISSUE_TEMPLATE/**'
- '.github/*.yml'
- '.github/*.java'
- '.github/*.conf'
- '.github/workflows/doc-build.yml'
- '.github/workflows/preview.yml'
- '.sdkmanrc'
- '.justfile'
workflow_dispatch:
concurrency:
group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}"
cancel-in-progress: ${{ github.event_name == 'pull_request' || github.repository != 'quarkusio/quarkus' }}
env:
# Workaround testsuite locale issue
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"
JVM_TEST_MAVEN_ARGS: "-Dtest-containers -Dstart-containers -Dquarkus.test.hang-detection-timeout=300"
# Important: keep these selectors in sync with the grep commands in the calc_run_flags job!
# This may be a lot better with maven 4, but with maven 3, excluding a project does not exclude its children, and it's not possible to include a project and explicitly exclude some children; compensate by doing excludes the low-tech way, at the shell level
JVM_TEST_INTEGRATION_TESTS_SELECTOR: "-f integration-tests -pl !gradle -pl !maven -pl !devmode -pl !devtools"
JVM_TEST_NORMAL_TESTS_SELECTOR: "-pl !docs -Dno-test-modules"
PTS_MAVEN_ARGS: "-Ddevelocity.pts.enabled=${{ github.event_name == 'pull_request' && github.base_ref == 'main' && 'true' || 'false' }}"
DB_USER: hibernate_orm_test
DB_PASSWORD: hibernate_orm_test
DB_NAME: hibernate_orm_test
PULL_REQUEST_NUMBER: ${{ github.event.number }}
defaults:
run:
shell: bash
jobs:
# This is a hack to work around a GitHub API limitation:
# when the PR is coming from another fork, the pull_requests field of the
# workflow_run payload is empty.
# For more details, see
# https://github.jparrowsec.cnmunity/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
configure:
name: "Configure jobs"
runs-on: ubuntu-latest
outputs:
config: ${{ steps.configure.outputs.config }}
m2-monthly-branch-cache-key: ${{ steps.cache-key.outputs.m2-monthly-branch-cache-key }}
m2-monthly-cache-key: ${{ steps.cache-key.outputs.m2-monthly-cache-key }}
m2-cache-key: ${{ steps.cache-key.outputs.m2-cache-key }}
quarkus-metadata-cache-key: ${{ steps.cache-key.outputs.quarkus-metadata-cache-key }}
quarkus-metadata-cache-key-default: ${{ steps.cache-key.outputs.quarkus-metadata-cache-key-default }}
steps:
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
- name: Generate cache key
id: cache-key
run: |
CURRENT_BRANCH="${{ github.repository != 'quarkusio/quarkus' && 'fork' || github.base_ref || github.ref_name }}"
CURRENT_MONTH=$(/bin/date -u "+%Y-%m")
CURRENT_DAY=$(/bin/date -u "+%d")
ROOT_CACHE_KEY="m2-cache"
echo "m2-monthly-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}" >> $GITHUB_OUTPUT
echo "m2-monthly-branch-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}" >> $GITHUB_OUTPUT
echo "m2-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}-${CURRENT_DAY}" >> $GITHUB_OUTPUT
CURRENT_WEEK=$(/bin/date -u "+%Y-%U")
echo "quarkus-metadata-cache-key=quarkus-metadata-cache-${CURRENT_WEEK}-${{ github.ref_name }}" >> $GITHUB_OUTPUT
echo "quarkus-metadata-cache-key-default=quarkus-metadata-cache-${CURRENT_WEEK}-${{ github.event.repository.default_branch }}" >> $GITHUB_OUTPUT
- name: Configure Runs-On
id: configure
uses: quarkusio/runs-on-action@main
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
main-repository: quarkusio/quarkus
runs-on: true
populate-cache:
name: "Populate cache"
needs: [ configure ]
runs-on: ubuntu-latest
if: github.repository == 'quarkusio/quarkus' && github.event_name == 'push'
steps:
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache Maven Repository
id: cache-maven
uses: quarkusio/cache-action@v4
with:
path: ~/.m2/repository
# A new cache will be stored daily. After that first store of the day, cache save actions will fail because the cache is immutable but it's not a problem.
# The whole cache is dropped monthly to prevent unlimited growth.
# The cache is per branch but in case we don't find a branch for a given branch, we will get a cache from another branch.
key: ${{ needs.configure.outputs.m2-cache-key }}
restore-keys: |
${{ needs.configure.outputs.m2-monthly-branch-cache-key }}-
${{ needs.configure.outputs.m2-monthly-cache-key }}-
runs-on: false
- name: Populate the cache
run: |
./mvnw -T2C $COMMON_MAVEN_ARGS dependency:go-offline
populate-cache-runs-on:
name: "Populate cache on RunsOn"
needs: [ configure ]
runs-on: ${{ fromJson(needs.configure.outputs.config).runners['ubuntu-latest'].runsOn || 'ubuntu-latest' }}
if: fromJson(needs.configure.outputs.config).runners['ubuntu-latest'] && github.repository == 'quarkusio/quarkus' && github.event_name == 'push'
steps:
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache Maven Repository
id: cache-maven
uses: quarkusio/cache-action@v4
with:
path: ~/.m2/repository
# A new cache will be stored daily. After that first store of the day, cache save actions will fail because the cache is immutable but it's not a problem.
# The whole cache is dropped monthly to prevent unlimited growth.
# The cache is per branch but in case we don't find a branch for a given branch, we will get a cache from another branch.
key: ${{ needs.configure.outputs.m2-cache-key }}
restore-keys: |
${{ needs.configure.outputs.m2-monthly-branch-cache-key }}-
${{ needs.configure.outputs.m2-monthly-cache-key }}-
runs-on: true
- name: Populate the cache
run: |
./mvnw -T2C $COMMON_MAVEN_ARGS dependency:go-offline
build-jdk17:
name: "Initial JDK 17 Build"
needs: [ configure, populate-cache, populate-cache-runs-on ]
runs-on: ${{ fromJson(needs.configure.outputs.config).runners['ubuntu-latest'].runsOn || 'ubuntu-latest' }}
# Skip main in forks
# Skip draft PRs, rerun as soon as its removed
if: ${{ !cancelled() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main')) && (
github.event_name != 'pull_request' || (
github.event.pull_request.draft == false &&
github.event.pull_request.state != 'closed' &&
github.event.action != 'edited'
)
) }}
env:
RUNS_ON_ENABLED: ${{ fromJson(needs.configure.outputs.config).runners['ubuntu-latest'].runsOn && 'true' || 'false' }}
outputs:
gib_args: ${{ steps.get-gib-args.outputs.gib_args }}
gib_impacted: ${{ steps.get-gib-impacted.outputs.impacted_modules }}
steps:
- name: Gradle Enterprise environment
run: |
echo "GE_TAGS=jdk-17" >> "$GITHUB_ENV"
echo "GE_CUSTOM_VALUES=gh-job-name=Initial JDK 17 Build" >> "$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: quarkusio/cache-action/restore@v4
with:
path: ~/.m2/repository
key: ${{ needs.configure.outputs.m2-cache-key }}
restore-keys: |
${{ needs.configure.outputs.m2-monthly-branch-cache-key }}-
${{ needs.configure.outputs.m2-monthly-cache-key }}-
runs-on: ${{ env.RUNS_ON_ENABLED }}
- name: Cache Develocity local cache
uses: quarkusio/cache-action@v4
if: github.event_name == 'pull_request'
with:
path: ~/.m2/.develocity/build-cache
key: develocity-cache-Initial JDK 17 Build-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}
restore-keys: |
develocity-cache-Initial JDK 17 Build-${{ github.event.pull_request.number }}-
runs-on: ${{ env.RUNS_ON_ENABLED }}
- name: Verify native-tests.json
run: ./.github/verify-tests-json.sh native-tests.json integration-tests/
- name: Verify virtual-threads-tests.json
run: ./.github/verify-tests-json.sh virtual-threads-tests.json integration-tests/virtual-threads/
- name: Setup Develocity Build Scan capture
uses: gradle/develocity-actions/[email protected]
with:
capture-strategy: ON_DEMAND
job-name: "Initial JDK 17 Build"
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
run: |
./mvnw -T1C $COMMON_MAVEN_ARGS -DskipTests -DskipITs -DskipDocs -Dinvoker.skip -Dskip.gradle.tests -Djbang.skip -Dtruststore.skip -Dno-format -Dtcks -Prelocations clean install
- name: Verify extension dependencies
run: ./update-extension-dependencies.sh $COMMON_MAVEN_ARGS
- name: Get GIB arguments
id: get-gib-args
env:
PULL_REQUEST_BASE: ${{ github.event.pull_request.base.ref }}
run: |
# See also: https://github.com/gitflow-incremental-builder/gitflow-incremental-builder#configuration (GIB)
# Common GIB_ARGS for all CI cases (hint: see also root pom.xml):
# - disableSelectedProjectsHandling: required to detect changes in jobs that use -pl
# - untracked: to ignore files created by jobs (and uncommitted to be consistent)
GIB_ARGS="-Dincremental -Dgib.disableSelectedProjectsHandling -Dgib.untracked=false -Dgib.uncommitted=false"
if [ -n "$PULL_REQUEST_BASE" ]
then
# The PR defines a clear merge target so just use that branch for reference, *unless*:
# - the current branch is a backport branch targeting some released branch like 1.10 (merge target is not main)
GIB_ARGS+=" -Dgib.referenceBranch=origin/$PULL_REQUEST_BASE -Dgib.disableIfReferenceBranchMatches='origin/\d+\.\d+'"
else
# No PR means the merge target is uncertain so fetch & use main of quarkusio/quarkus, *unless*:
# - the current branch is main or some released branch like 1.10
# - the current branch is a backport branch which is going to target some released branch like 1.10 (merge target is not main)
GIB_ARGS+=" -Dgib.referenceBranch=refs/remotes/quarkusio/main -Dgib.fetchReferenceBranch -Dgib.disableIfBranchMatches='main|\d+\.\d+|.*backport.*'"
fi
echo "GIB_ARGS: $GIB_ARGS"
echo "gib_args=${GIB_ARGS}" >> $GITHUB_OUTPUT
- name: Get GIB impacted modules
id: get-gib-impacted
# mvnw just for creating gib-impacted.log ("validate" should not waste much time if not incremental at all, e.g. on main)
run: |
./mvnw -q -T1C $COMMON_MAVEN_ARGS -Dscan=false -Dtcks -Dquickly-ci ${{ steps.get-gib-args.outputs.gib_args }} -Dgib.logImpactedTo=gib-impacted.log validate
if [ -f gib-impacted.log ]
then
GIB_IMPACTED=$(cat gib-impacted.log)
else
GIB_IMPACTED='_all_'
fi
echo "GIB_IMPACTED: ${GIB_IMPACTED}"
# three steps to retain linefeeds in output for other jobs
# (see https://github.com/github/docs/issues/21529 and https://github.com/orgs/community/discussions/26288#discussioncomment-3876281)
echo 'impacted_modules<<EOF' >> $GITHUB_OUTPUT
echo "${GIB_IMPACTED}" >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT
- name: Tar .m2 content pushed to subsequent jobs
run: tar -czf m2-content.tgz -C ~ .m2/repository/io/quarkus .m2/.develocity/build-cache
- name: Upload .m2 content pushed to subsequent jobs
uses: actions/upload-artifact@v4
with:
name: m2-content
path: m2-content.tgz
retention-days: 7
- name: Delete snapshots artifacts from cache
run: find ~/.m2 -name \*-SNAPSHOT -type d -exec rm -rf {} +
- name: Prepare build reports archive
if: always()
run: |
7z a -tzip build-reports.zip -r \
'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 }}-Initial JDK 17 Build"
path: |
build-reports.zip
retention-days: 7
calculate-test-jobs:
name: Calculate Test Jobs
runs-on: ubuntu-latest
# Skip main in forks
if: ${{ !cancelled() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main')) }}
needs: build-jdk17
env:
GIB_IMPACTED_MODULES: ${{ needs.build-jdk17.outputs.gib_impacted }}
outputs:
native_matrix: ${{ steps.calc-native-matrix.outputs.matrix }}
jvm_matrix: ${{ steps.calc-jvm-matrix.outputs.matrix }}
virtual_threads_matrix: ${{ steps.calc-virtual-threads-matrix.outputs.matrix }}
run_jvm: ${{ steps.calc-run-flags.outputs.run_jvm }}
run_devtools: ${{ steps.calc-run-flags.outputs.run_devtools }}
run_gradle: ${{ steps.calc-run-flags.outputs.run_gradle }}
run_maven: ${{ steps.calc-run-flags.outputs.run_maven }}
run_kubernetes: ${{ steps.calc-run-flags.outputs.run_kubernetes }}
run_quickstarts: ${{ steps.calc-run-flags.outputs.run_quickstarts }}
run_tcks: ${{ steps.calc-run-flags.outputs.run_tcks }}
steps:
- uses: actions/checkout@v4
- name: Calculate matrix from native-tests.json
id: calc-native-matrix
run: |
echo "GIB_IMPACTED_MODULES: ${GIB_IMPACTED_MODULES}"
json=$(.github/filter-native-tests-json.sh "${GIB_IMPACTED_MODULES}" | tr -d '\n')
echo "${json}"
echo "matrix=${json}" >> $GITHUB_OUTPUT
- name: Calculate matrix from matrix-jvm-tests.json
id: calc-jvm-matrix
run: |
json=$(.github/filter-jvm-tests-json.sh)
echo "${json}"
echo "matrix=${json}" >> $GITHUB_OUTPUT
- name: Calculate matrix from virtual-threads-tests.json
id: calc-virtual-threads-matrix
run: |
echo "GIB_IMPACTED_MODULES: ${GIB_IMPACTED_MODULES}"
json=$(.github/filter-virtual-threads-tests-json.sh "${GIB_IMPACTED_MODULES}" | tr -d '\n')
echo "${json}"
echo "matrix=${json}" >> $GITHUB_OUTPUT
- name: Calculate run flags
id: calc-run-flags
run: |
run_jvm=true; run_devtools=true; run_gradle=true; run_maven=true; run_kubernetes=true; run_quickstarts=true; run_tcks=true
if [ -z "${GIB_IMPACTED_MODULES}" ]
then
run_jvm=false; run_devtools=false; run_gradle=false; run_maven=false; run_kubernetes=false; run_quickstarts=false; run_tcks=false
elif [ "${GIB_IMPACTED_MODULES}" != '_all_' ]
then
# Important: keep -pl ... in actual jobs in sync with the following grep commands!
# do not use grep -q as it can exit before echo has finished outputting and cause broken pipes
if ! (echo -n "${GIB_IMPACTED_MODULES}" | grep -Pv 'integration-tests/(devtools|gradle|maven|devmode|kubernetes/.*)|tcks/.*' > /dev/null); then run_jvm=false; fi
if ! (echo -n "${GIB_IMPACTED_MODULES}" | grep 'integration-tests/devtools' > /dev/null); then run_devtools=false; fi
if ! (echo -n "${GIB_IMPACTED_MODULES}" | grep 'integration-tests/gradle' > /dev/null); then run_gradle=false; fi
if ! (echo -n "${GIB_IMPACTED_MODULES}" | grep -P 'integration-tests/(maven|devmode)' > /dev/null); then run_maven=false; fi
if ! (echo -n "${GIB_IMPACTED_MODULES}" | grep -P 'integration-tests/kubernetes/.*' > /dev/null); then run_kubernetes=false; fi
if ! (echo -n "${GIB_IMPACTED_MODULES}" | grep -Pv '(docs|integration-tests|tcks)/.*' > /dev/null); then run_quickstarts=false; fi
if ! (echo -n "${GIB_IMPACTED_MODULES}" | grep 'tcks/.*' > /dev/null); then run_tcks=false; fi
fi
echo "run_jvm=${run_jvm}, run_devtools=${run_devtools}, run_gradle=${run_gradle}, run_maven=${run_maven}, run_kubernetes=${run_kubernetes}, run_quickstarts=${run_quickstarts}, run_tcks=${run_tcks}"
echo "run_jvm=${run_jvm}" >> $GITHUB_OUTPUT
echo "run_devtools=${run_devtools}" >> $GITHUB_OUTPUT
echo "run_gradle=${run_gradle}" >> $GITHUB_OUTPUT
echo "run_maven=${run_maven}" >> $GITHUB_OUTPUT
echo "run_kubernetes=${run_kubernetes}" >> $GITHUB_OUTPUT
echo "run_quickstarts=${run_quickstarts}" >> $GITHUB_OUTPUT
echo "run_tcks=${run_tcks}" >> $GITHUB_OUTPUT
jvm-tests:
name: ${{ matrix.java.name }}
runs-on: ${{ fromJson(needs.configure.outputs.config).runners[matrix.java.os-name].runsOn || matrix.java.os-name }}
needs: [ configure, build-jdk17, calculate-test-jobs ]
# Skip main in forks
if: ${{ !cancelled() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && (needs.calculate-test-jobs.outputs.run_jvm == 'true' && (github.repository == 'quarkusio/quarkus' || !endsWith(github.ref, '/main'))) }}
timeout-minutes: 400
env:
MAVEN_OPTS: ${{ matrix.java.maven_opts }}
JAVA_VERSION_GRADLE: ${{ matrix.java.java-version-gradle || matrix.java.java-version }}
RUNS_ON_ENABLED: ${{ fromJson(needs.configure.outputs.config).runners[matrix.java.os-name].runsOn && 'true' || 'false' }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.calculate-test-jobs.outputs.jvm_matrix) }}
steps:
- name: Gradle Enterprise environment
run: |
echo "GE_TAGS=jdk-${{matrix.java.java-version}}" >> "$GITHUB_ENV"
echo "GE_CUSTOM_VALUES=gh-job-name=${{ 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
- 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
- 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
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: quarkusio/cache-action/restore@v4
with:
path: ~/.m2/repository
key: ${{ needs.configure.outputs.m2-cache-key }}
restore-keys: |
${{ needs.configure.outputs.m2-monthly-branch-cache-key }}-
${{ needs.configure.outputs.m2-monthly-cache-key }}-
runs-on: ${{ env.RUNS_ON_ENABLED }}
- 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: quarkusio/cache-action@v4
if: github.event_name == 'pull_request'
with:
path: ~/.m2/.develocity/build-cache
key: develocity-cache-${{matrix.java.name}}-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}
restore-keys: |
develocity-cache-${{matrix.java.name}}-${{ github.event.pull_request.number }}-
runs-on: ${{ env.RUNS_ON_ENABLED }}
- name: Setup Develocity Build Scan capture
uses: gradle/develocity-actions/[email protected]
with:
capture-strategy: ON_DEMAND
job-name: "${{ 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
run: |
if [[ "${{ matrix.java.category }}" == *"Integration"* ]]; then
PL=$JVM_TEST_INTEGRATION_TESTS_SELECTOR
WORKAROUND=""
./mvnw $COMMON_MAVEN_ARGS $COMMON_TEST_MAVEN_ARGS $PTS_MAVEN_ARGS -pl integration-tests/grpc-cli clean install -Dsurefire.timeout=1200 -Dno-test-kubernetes ${{ matrix.java.maven_args }} $WORKAROUND
else
PL=$JVM_TEST_NORMAL_TESTS_SELECTOR
WORKAROUND="${{ needs.build-jdk17.outputs.gib_args }}"
fi
# Despite the pre-calculated run_jvm flag, GIB has to be re-run here to figure out the exact submodules to build.
- 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-${{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 }}-${{ 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 }}-${{ 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() }}
with:
name: "build-logs-${{ matrix.java.name }}"
path: |
**/build.log
retention-days: 7
build-report:
runs-on: ubuntu-latest
name: Build report
needs: [ build-jdk17,jvm-tests ]
if: always()
steps:
- uses: actions/download-artifact@v4
with:
path: build-reports-artifacts
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Produce report and add it as job summary
uses: quarkusio/action-build-reporter@main
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
build-reports-artifacts-path: build-reports-artifacts