diff --git a/.github/workflows/ci-report.yml b/.github/workflows/ci-report.yml deleted file mode 100644 index e1faf992097f..000000000000 --- a/.github/workflows/ci-report.yml +++ /dev/null @@ -1,78 +0,0 @@ -name: GH Actions CI reporting - -on: - workflow_run: - workflows: [ "GH Actions CI" ] - types: [ completed ] - -defaults: - run: - shell: bash - -jobs: - publish-build-scans: - name: Publish Develocity build scans - if: github.repository == 'hibernate/hibernate-orm' && github.event.workflow_run.conclusion != 'cancelled' - runs-on: ubuntu-latest - steps: - # Checkout target branch which has trusted code - - name: Check out target branch - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - persist-credentials: false - ref: ${{ github.ref }} - - name: Set up JDK - uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 - with: - distribution: 'temurin' - java-version: '21' - - - name: Generate cache key - id: cache-key - run: | - CURRENT_BRANCH="${{ github.repository != 'hibernate/hibernate-orm' && 'fork' || github.base_ref || github.ref_name }}" - CURRENT_MONTH=$(/bin/date -u "+%Y-%m") - CURRENT_DAY=$(/bin/date -u "+%d") - ROOT_CACHE_KEY="buildtool-cache" - echo "buildtool-monthly-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}" >> $GITHUB_OUTPUT - echo "buildtool-monthly-branch-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}" >> $GITHUB_OUTPUT - echo "buildtool-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}-${CURRENT_DAY}" >> $GITHUB_OUTPUT - - name: Restore Maven/Gradle Dependency/Dist Caches - uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 - with: - path: | - ~/.m2/repository/ - ~/.m2/wrapper/ - ~/.gradle/caches/modules-2 - ~/.gradle/wrapper/ - key: ${{ steps.cache-key.outputs.buildtool-cache-key }} - restore-keys: | - ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}- - ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}- - - - name: Download GitHub Actions artifacts for the Develocity build scans - id: downloadBuildScan - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 - with: - pattern: build-scan-data-* - github-token: ${{ github.token }} - repository: ${{ github.repository }} - run-id: ${{ github.event.workflow_run.id }} - path: /tmp/downloaded-build-scan-data/ - # Don't fail the build if there are no matching artifacts - continue-on-error: true - - name: Publish Develocity build scans for previous builds - if: ${{ steps.downloadBuildScan.outcome != 'failure'}} - run: | - shopt -s nullglob # Don't run the loop below if there are no artifacts - status=0 - mkdir -p ~/.gradle/ - for build_scan_data_directory in /tmp/downloaded-build-scan-data/* - do - rm -rf ~/.gradle/build-scan-data - mv "$build_scan_data_directory" ~/.gradle/build-scan-data \ - && ./gradlew --no-build-cache buildScanPublishPrevious || status=1 - done - exit $status - env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY_PR }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index fdb4c95ed1ba..000000000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,333 +0,0 @@ -name: GH Actions CI - -on: - pull_request: - branches: - - '7.1' - # Ignore dependabot PRs that are not just about build dependencies or workflows; - # we'll reject such PRs and send one ourselves. - - '!dependabot/**' - - 'dependabot/maven/build-dependencies-**' - - 'dependabot/github_actions/workflow-actions-**' - -permissions: { } # none - -# See https://github.com/hibernate/hibernate-orm/pull/4615 for a description of the behavior we're getting. -concurrency: - # Consider that two builds are in the same concurrency group (cannot run concurrently) - # if they use the same workflow and are about the same branch ("ref") or pull request. - group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}" - # Cancel previous builds in the same concurrency group even if they are in progress - # for pull requests or pushes to forks (not the upstream repository). - cancel-in-progress: ${{ github.event_name == 'pull_request' || github.repository != 'hibernate/hibernate-orm' }} - -jobs: - - # Main job for h2/docker DBs. - build: - permissions: - contents: read - name: OpenJDK 21 - ${{matrix.rdbms}} - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - include: - - rdbms: h2 - - rdbms: hsqldb - - rdbms: mysql - - rdbms: mariadb - - rdbms: postgresql - - rdbms: edb - - rdbms: oracle - - rdbms: db2 - - rdbms: mssql - - rdbms: sybase - # Running with CockroachDB requires at least 2-4 vCPUs, which we don't have on GH Actions runners - # - rdbms: cockroachdb - # Running with HANA requires at least 8GB memory just for the database, which we don't have on GH Actions runners - # - rdbms: hana - steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - persist-credentials: false - - name: Reclaim Disk Space - run: .github/ci-prerequisites.sh - - name: Start database - env: - RDBMS: ${{ matrix.rdbms }} - run: ci/database-start.sh - - name: Set up Java 21 - uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 - with: - distribution: 'temurin' - java-version: '21' - - - name: Generate cache key - id: cache-key - run: | - CURRENT_BRANCH="${{ github.repository != 'hibernate/hibernate-orm' && 'fork' || github.base_ref || github.ref_name }}" - CURRENT_MONTH=$(/bin/date -u "+%Y-%m") - CURRENT_DAY=$(/bin/date -u "+%d") - ROOT_CACHE_KEY="buildtool-cache" - echo "buildtool-monthly-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}" >> $GITHUB_OUTPUT - echo "buildtool-monthly-branch-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}" >> $GITHUB_OUTPUT - echo "buildtool-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}-${CURRENT_DAY}" >> $GITHUB_OUTPUT - - name: Cache Maven/Gradle Dependency/Dist Caches - id: cache-maven - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 - # if it's not a pull request, we restore and save the cache - if: github.event_name != 'pull_request' - with: - path: | - ~/.m2/repository/ - ~/.m2/wrapper/ - ~/.gradle/caches/modules-2 - ~/.gradle/wrapper/ - # 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: ${{ steps.cache-key.outputs.buildtool-cache-key }} - restore-keys: | - ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}- - ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}- - - name: Restore Maven/Gradle Dependency/Dist Caches - uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 - # if it a pull request, we restore the cache but we don't save it - if: github.event_name == 'pull_request' - with: - path: | - ~/.m2/repository/ - ~/.m2/wrapper/ - ~/.gradle/caches/modules-2 - ~/.gradle/wrapper/ - key: ${{ steps.cache-key.outputs.buildtool-cache-key }} - restore-keys: | - ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}- - ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}- - - - name: Run build script - run: ./ci/build-github.sh - shell: bash - env: - RDBMS: ${{ matrix.rdbms }} - # For jobs running on 'push', publish build scan and cache immediately. - # This won't work for pull requests, since they don't have access to secrets. - POPULATE_REMOTE_GRADLE_CACHE: ${{ github.event_name == 'push' && github.repository == 'hibernate/hibernate-orm' && 'true' || 'false' }} - DEVELOCITY_ACCESS_KEY: "${{ secrets.DEVELOCITY_ACCESS_KEY }}" - - # For jobs running on 'pull_request', upload build scan data. - # The actual publishing must be done in a separate job (see ci-report.yml). - # We don't write to the remote cache as that would be unsafe. - - name: Upload GitHub Actions artifact for the Develocity build scan - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - if: "${{ github.event_name == 'pull_request' && !cancelled() }}" - with: - name: build-scan-data-${{ matrix.rdbms }} - path: ~/.gradle/build-scan-data - - - name: Upload test reports (if Gradle failed) - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - if: failure() - with: - name: test-reports-java11-${{ matrix.rdbms }} - path: | - ./**/target/reports/tests/ - - name: Omit produced artifacts from build cache - run: ./ci/before-cache.sh - - # Job for builds on Atlas (Oracle) infrastructure. - # This is untrusted, even for pushes, see below. - atlas: - permissions: - contents: read - name: GraalVM 21 - ${{matrix.rdbms}} - # runs-on: ubuntu-latest - runs-on: [ self-hosted, Linux, X64, OCI ] - strategy: - fail-fast: false - matrix: - include: - - rdbms: oracle_atps - - rdbms: oracle_db19c - - rdbms: oracle_db21c - - rdbms: oracle_db23c - steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - persist-credentials: false - - name: Reclaim disk space and sanitize user home - run: .github/ci-prerequisites-atlas.sh - - name: Start database - env: - RDBMS: ${{ matrix.rdbms }} - RUNID: ${{ github.run_number }} - run: ci/database-start.sh - - name: Set up Java 21 - uses: graalvm/setup-graalvm@aafbedb8d382ed0ca6167d3a051415f20c859274 # v1.2.8 - with: - distribution: 'graalvm' - java-version: '21' - - - name: Generate cache key - id: cache-key - run: | - CURRENT_BRANCH="${{ github.repository != 'hibernate/hibernate-orm' && 'fork' || github.base_ref || github.ref_name }}" - CURRENT_MONTH=$(/bin/date -u "+%Y-%m") - CURRENT_DAY=$(/bin/date -u "+%d") - ROOT_CACHE_KEY="buildtool-cache-atlas" - echo "buildtool-monthly-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}" >> $GITHUB_OUTPUT - echo "buildtool-monthly-branch-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}" >> $GITHUB_OUTPUT - echo "buildtool-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}-${CURRENT_DAY}" >> $GITHUB_OUTPUT - - name: Cache Maven/Gradle Dependency/Dist Caches - id: cache-maven - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 - # if it's not a pull request, we restore and save the cache - if: github.event_name != 'pull_request' - with: - path: | - ~/.m2/repository/ - ~/.m2/wrapper/ - ~/.gradle/caches/modules-2 - ~/.gradle/wrapper/ - # 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: ${{ steps.cache-key.outputs.buildtool-cache-key }} - restore-keys: | - ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}- - ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}- - - name: Restore Maven/Gradle Dependency/Dist Caches - uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 - # if it a pull request, we restore the cache but we don't save it - if: github.event_name == 'pull_request' - with: - path: | - ~/.m2/repository/ - ~/.m2/wrapper/ - ~/.gradle/caches/modules-2 - ~/.gradle/wrapper/ - key: ${{ steps.cache-key.outputs.buildtool-cache-key }} - restore-keys: | - ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}- - ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}- - - - name: Run build script - env: - RDBMS: ${{ matrix.rdbms }} - RUNID: ${{ github.run_number }} - # These runners have no HOME variable set by default, we need to explicitly set it to make the build work - HOME: /root - # Needed for TFO (TCP fast open) - LD_PRELOAD: /home/opc/libtfojdbc1.so - LD_LIBRARY_PATH: /home/opc - run: ./ci/build-github.sh - shell: bash - # Upload build scan data. - # The actual publishing must be done in a separate job (see ci-report.yml). - # We don't write to the remote cache as that would be unsafe. - # That's even on push, because we do not trust Atlas runners to hold secrets: they are shared infrastructure. - - name: Upload GitHub Actions artifact for the Develocity build scan - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - if: "${{ !cancelled() }}" - with: - name: build-scan-data-${{ matrix.rdbms }} - path: ~/.gradle/build-scan-data - - name: Upload test reports (if Gradle failed) - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - if: failure() - with: - name: test-reports-java11-${{ matrix.rdbms }} - path: | - ./**/target/reports/tests/ - - name: Omit produced artifacts from build cache - run: ./ci/before-cache.sh - - # Static code analysis check - format_checks: - permissions: - contents: read - name: Static code analysis - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - persist-credentials: false - - name: Reclaim disk space and sanitize user home - run: .github/ci-prerequisites-atlas.sh - - name: Set up Java 21 - uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 - with: - distribution: 'temurin' - java-version: '21' - - - name: Generate cache key - id: cache-key - run: | - CURRENT_BRANCH="${{ github.repository != 'hibernate/hibernate-orm' && 'fork' || github.base_ref || github.ref_name }}" - CURRENT_MONTH=$(/bin/date -u "+%Y-%m") - CURRENT_DAY=$(/bin/date -u "+%d") - ROOT_CACHE_KEY="buildtool-cache-atlas" - echo "buildtool-monthly-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}" >> $GITHUB_OUTPUT - echo "buildtool-monthly-branch-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}" >> $GITHUB_OUTPUT - echo "buildtool-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}-${CURRENT_DAY}" >> $GITHUB_OUTPUT - - name: Cache Maven/Gradle Dependency/Dist Caches - id: cache-maven - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 - # if it's not a pull request, we restore and save the cache - if: github.event_name != 'pull_request' - with: - path: | - ~/.m2/repository/ - ~/.m2/wrapper/ - ~/.gradle/caches/modules-2 - ~/.gradle/wrapper/ - # 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: ${{ steps.cache-key.outputs.buildtool-cache-key }} - restore-keys: | - ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}- - ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}- - - name: Restore Maven/Gradle Dependency/Dist Caches - uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 - # if it a pull request, we restore the cache but we don't save it - if: github.event_name == 'pull_request' - with: - path: | - ~/.m2/repository/ - ~/.m2/wrapper/ - ~/.gradle/caches/modules-2 - ~/.gradle/wrapper/ - key: ${{ steps.cache-key.outputs.buildtool-cache-key }} - restore-keys: | - ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}- - ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}- - - - name: Run build script - run: ./gradlew formatChecks - env: - # For jobs running on 'push', publish build scan and cache immediately. - # This won't work for pull requests, since they don't have access to secrets. - POPULATE_REMOTE_GRADLE_CACHE: ${{ github.event_name == 'push' && github.repository == 'hibernate/hibernate-orm' && 'true' || 'false' }} - DEVELOCITY_ACCESS_KEY: "${{ secrets.DEVELOCITY_ACCESS_KEY }}" - - # For jobs running on 'pull_request', upload build scan data. - # The actual publishing must be done in a separate job (see ci-report.yml). - # We don't write to the remote cache as that would be unsafe. - - name: Upload GitHub Actions artifact for the Develocity build scan - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - if: "${{ github.event_name == 'pull_request' && !cancelled() }}" - with: - name: build-scan-data-sca - path: ~/.gradle/build-scan-data - - - name: Upload test reports (if Gradle failed) - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - if: failure() - with: - name: test-reports-java11-sca - path: | - ./**/target/reports/tests/ - - name: Omit produced artifacts from build cache - run: ./ci/before-cache.sh diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 46596363859c..000000000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,77 +0,0 @@ -name: "CodeQL" - -on: - pull_request: - # The branches below must be a subset of the branches above - branches: [ '7.1' ] - schedule: - - cron: '34 11 * * 4' - -# See https://github.com/hibernate/hibernate-orm/pull/4615 for a description of the behavior we're getting. -concurrency: - # Consider that two builds are in the same concurrency group (cannot run concurrently) - # if they use the same workflow and are about the same branch ("ref") or pull request. - group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}" - # Cancel previous builds in the same concurrency group even if they are in process - # for pull requests or pushes to forks (not the upstream repository). - cancel-in-progress: ${{ github.event_name == 'pull_request' || github.repository != 'hibernate/hibernate-orm' }} - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'java' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - - steps: - - - name: Set up JDK - uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 - with: - distribution: 'temurin' - java-version: '21' - - - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@7e3036b9cd87fc26dd06747b7aa4b96c27aaef3a # v3.28.4 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - queries: +security-and-quality - - - # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@7e3036b9cd87fc26dd06747b7aa4b96c27aaef3a # v3.28.4 - - # â„šī¸ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@7e3036b9cd87fc26dd06747b7aa4b96c27aaef3a # v3.28.4 - with: - category: "/language:${{matrix.language}}" diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index e59d6c0dc3fc..000000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,390 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ - -import groovy.transform.Field -import io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeGraphVisitor -import io.jenkins.blueocean.rest.impl.pipeline.FlowNodeWrapper -import org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper - -/* - * See https://github.com/hibernate/hibernate-jenkins-pipeline-helpers - */ -@Library('hibernate-jenkins-pipeline-helpers') _ -import org.hibernate.jenkins.pipeline.helpers.job.JobHelper - -@Field final String DEFAULT_JDK_VERSION = '21' -@Field final String DEFAULT_JDK_TOOL = "OpenJDK ${DEFAULT_JDK_VERSION} Latest" -@Field final String NODE_PATTERN_BASE = 'Worker&&Containers' -@Field List environments - -this.helper = new JobHelper(this) - -helper.runWithNotification { -stage('Configure') { - requireApprovalForPullRequest 'hibernate' - - this.environments = [ -// new BuildEnvironment( dbName: 'h2' ), -// new BuildEnvironment( dbName: 'hsqldb' ), -// new BuildEnvironment( dbName: 'derby' ), -// new BuildEnvironment( dbName: 'mysql' ), -// new BuildEnvironment( dbName: 'mariadb' ), -// new BuildEnvironment( dbName: 'postgresql' ), -// new BuildEnvironment( dbName: 'edb' ), -// new BuildEnvironment( dbName: 'oracle' ), -// new BuildEnvironment( dbName: 'db2' ), -// new BuildEnvironment( dbName: 'mssql' ), -// new BuildEnvironment( dbName: 'sybase' ), -// Don't build with HANA by default, but only do it nightly until we receive a 3rd instance -// new BuildEnvironment( dbName: 'hana_cloud', dbLockableResource: 'hana-cloud', dbLockResourceAsHost: true ), - new BuildEnvironment( node: 's390x' ), - new BuildEnvironment( dbName: 'sybase_jconn' ), - // We generally build with JDK 21, but our baseline is Java 17, so we test with JDK 17, to be sure everything works. - // Here we even compile the main code with JDK 17, to be sure no JDK 18+ classes are depended on. - new BuildEnvironment( mainJdkVersion: '17', testJdkVersion: '17' ), - // We want to enable preview features when testing newer builds of OpenJDK: - // even if we don't use these features, just enabling them can cause side effects - // and it's useful to test that. - new BuildEnvironment( testJdkVersion: '25', testJdkLauncherArgs: '--enable-preview', additionalOptions: '-PskipJacoco=true' ), - // The following JDKs aren't supported by Hibernate ORM out-of-the box yet: - // they require the use of -Dnet.bytebuddy.experimental=true. - // Make sure to remove that argument as soon as possible - // -- generally that requires upgrading bytebuddy after the JDK goes GA. - new BuildEnvironment( testJdkVersion: '26', testJdkLauncherArgs: '--enable-preview -Dnet.bytebuddy.experimental=true', additionalOptions: '-PskipJacoco=true' ) - ]; - - if ( env.CHANGE_ID ) { - if ( pullRequest.labels.contains( 'cockroachdb' ) ) { - this.environments.add( new BuildEnvironment( dbName: 'cockroachdb', node: 'cockroachdb', longRunning: true ) ) - } - if ( pullRequest.labels.contains( 'hana' ) ) { - this.environments.add( new BuildEnvironment( dbName: 'hana_cloud', dbLockableResource: 'hana-cloud', dbLockResourceAsHost: true ) ) - } - if ( pullRequest.labels.contains( 'sybase' ) ) { - this.environments.add( new BuildEnvironment( dbName: 'sybase_jconn' ) ) - } - if ( pullRequest.labels.contains( 'tidb' ) ) { - this.environments.add( new BuildEnvironment( dbName: 'tidb', node: 'tidb', notificationRecipients: 'tidb_hibernate@pingcap.com' ) ) - } - } - - helper.configure { - file 'job-configuration.yaml' - // We don't require the following, but the build helper plugin apparently does - jdk { - defaultTool DEFAULT_JDK_TOOL - } - maven { - defaultTool 'Apache Maven 3.8' - } - } - properties([ - buildDiscarder( - logRotator(daysToKeepStr: '30', numToKeepStr: '10') - ), - // If two builds are about the same branch or pull request, - // the older one will be aborted when the newer one starts. - disableConcurrentBuilds(abortPrevious: true), - helper.generateNotificationProperty() - ]) -} - -// Avoid running the pipeline on branch indexing -if (currentBuild.getBuildCauses().toString().contains('BranchIndexingCause')) { - print "INFO: Build skipped due to trigger being Branch Indexing" - currentBuild.result = 'NOT_BUILT' - return -} -// This is a limited maintenance branch, so don't run this on pushes to the branch, only on PRs -if ( !env.CHANGE_ID ) { - print "INFO: Build skipped because this job should only run for pull request, not for branch pushes" - currentBuild.result = 'NOT_BUILT' - return -} - -stage('Build') { - Map executions = [:] - Map> state = [:] - environments.each { BuildEnvironment buildEnv -> - state[buildEnv.tag] = [:] - executions.put(buildEnv.tag, { - runBuildOnNode(buildEnv.node ?: NODE_PATTERN_BASE) { - def mainJavaHome - if ( buildEnv.mainJdkVersion ) { - mainJavaHome = tool(name: "OpenJDK ${buildEnv.mainJdkVersion} Latest", type: 'jdk') - } - def testJavaHome - if ( buildEnv.testJdkVersion ) { - testJavaHome = tool(name: "OpenJDK ${buildEnv.testJdkVersion} Latest", type: 'jdk') - } - def javaHome = tool(name: DEFAULT_JDK_TOOL, type: 'jdk') - // Use withEnv instead of setting env directly, as that is global! - // See https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md - withEnv(["JAVA_HOME=${javaHome}", "PATH+JAVA=${javaHome}/bin"]) { - state[buildEnv.tag]['additionalOptions'] = '-PmavenMirror=nexus-load-balancer-c4cf05fd92f43ef8.elb.us-east-1.amazonaws.com' - if ( buildEnv.mainJdkVersion ) { - state[buildEnv.tag]['additionalOptions'] = state[buildEnv.tag]['additionalOptions'] + - " -Pmain.jdk.version=${buildEnv.mainJdkVersion}" - } - if ( buildEnv.testJdkVersion ) { - state[buildEnv.tag]['additionalOptions'] = state[buildEnv.tag]['additionalOptions'] + - " -Ptest.jdk.version=${buildEnv.testJdkVersion}" - } - if ( buildEnv.mainJdkVersion || buildEnv.testJdkVersion ) { - state[buildEnv.tag]['additionalOptions'] = state[buildEnv.tag]['additionalOptions'] + - " -Porg.gradle.java.installations.paths=${[javaHome, mainJavaHome, testJavaHome].findAll { it != null }.join(',')}" - } - if ( buildEnv.testJdkLauncherArgs ) { - state[buildEnv.tag]['additionalOptions'] = state[buildEnv.tag]['additionalOptions'] + - " -Ptest.jdk.launcher.args='${buildEnv.testJdkLauncherArgs}'" - } - if ( buildEnv.node ) { - state[buildEnv.tag]['additionalOptions'] = state[buildEnv.tag]['additionalOptions'] + - " -Pci.node=${buildEnv.node}" - } - state[buildEnv.tag]['containerName'] = null; - stage('Checkout') { - checkout scm - } - tryFinally({ - stage('Start database') { - switch (buildEnv.dbName) { - case "edb": - docker.image('quay.io/enterprisedb/edb-postgres-advanced:15.4-3.3-postgis').pull() - sh "./docker_db.sh edb" - state[buildEnv.tag]['containerName'] = "edb" - break; - case "sybase_jconn": - docker.image('nguoianphu/docker-sybase').pull() - sh "./docker_db.sh sybase" - state[buildEnv.tag]['containerName'] = "sybase" - break; - case "cockroachdb": - docker.image('cockroachdb/cockroach:v23.1.12').pull() - sh "./docker_db.sh cockroachdb" - state[buildEnv.tag]['containerName'] = "cockroach" - break; - } - } - stage('Test') { - String args = "${buildEnv.additionalOptions ?: ''} ${state[buildEnv.tag]['additionalOptions'] ?: ''}" - withEnv(["RDBMS=${buildEnv.dbName}"]) { - tryFinally({ - if (buildEnv.dbLockableResource == null) { - withCredentials([file(credentialsId: 'sybase-jconnect-driver', variable: 'jconnect_driver')]) { - sh 'cp -f $jconnect_driver ./drivers/jconn4.jar' - timeout( [time: buildEnv.longRunning ? 480 : 120, unit: 'MINUTES'] ) { - ciBuild buildEnv, args - } - } - } - else { - lock(label: buildEnv.dbLockableResource, quantity: 1, variable: 'LOCKED_RESOURCE') { - if ( buildEnv.dbLockResourceAsHost ) { - args += " -DdbHost=${LOCKED_RESOURCE}" - } - timeout( [time: buildEnv.longRunning ? 480 : 120, unit: 'MINUTES'] ) { - ciBuild buildEnv, args - } - } - } - }, { - junit '**/target/test-results/test/*.xml,**/target/test-results/testKitTest/*.xml' - }) - } - } - }, { // Finally - if ( state[buildEnv.tag]['containerName'] != null ) { - sh "docker rm -f ${state[buildEnv.tag]['containerName']}" - } - // Skip this for PRs - if ( !env.CHANGE_ID && buildEnv.notificationRecipients != null ) { - handleNotifications(currentBuild, buildEnv) - } - }) - } - } - }) - } - executions.put('Hibernate Search Update Dependency', { - build job: '/hibernate-search-dependency-update/8.1', propagate: true, parameters: [string(name: 'UPDATE_JOB', value: 'orm7.1'), string(name: 'ORM_REPOSITORY', value: helper.scmSource.remoteUrl), string(name: 'ORM_PULL_REQUEST_ID', value: helper.scmSource.pullRequest.id)] - }) - parallel(executions) -} - -} // End of helper.runWithNotification - -// Job-specific helpers - -class BuildEnvironment { - String mainJdkVersion - String testJdkVersion - String testJdkLauncherArgs - String dbName = 'h2' - String node - String dbLockableResource - boolean dbLockResourceAsHost - String additionalOptions - String notificationRecipients - boolean longRunning - - String toString() { getTag() } - String getTag() { "${node ? node + "_" : ''}${testJdkVersion ? 'jdk_' + testJdkVersion + '_' : '' }${dbName}" } - String getRdbms() { dbName.contains("_") ? dbName.substring(0, dbName.indexOf('_')) : dbName } -} - -void runBuildOnNode(String label, Closure body) { - node( label ) { - pruneDockerContainers() - tryFinally(body, { // Finally - // If this is a PR, we clean the workspace at the end - if ( env.CHANGE_BRANCH != null ) { - cleanWs() - } - pruneDockerContainers() - }) - } -} - -void ciBuild(buildEnv, String args) { - if ( !helper.scmSource.pullRequest ) { - // Not a PR: we can pass credentials to the build, allowing it to populate the build cache - // and to publish build scans directly. - - // On untrusted nodes, we use the same access key as for PRs: - // it has limited access, essentially it can only push build scans. - def develocityCredentialsId = buildEnv.node ? 'develocity.commonhaus.dev-access-key-pr' : 'develocity.commonhaus.dev-access-key' - - withCredentials([string(credentialsId: develocityCredentialsId, - variable: 'DEVELOCITY_ACCESS_KEY')]) { - withGradle { // withDevelocity, actually: https://plugins.jenkins.io/gradle/#plugin-content-capturing-build-scans-from-jenkins-pipeline - sh "./ci/build.sh $args" - } - } - } - else if ( buildEnv.node != 's390x' ) { // We couldn't get the code below to work on s390x for some reason. - // Pull request: we can't pass credentials to the build, since we'd be exposing secrets to e.g. tests. - // We do the build first, then publish the build scan separately. - tryFinally({ - sh "./ci/build.sh $args" - }, { // Finally - withCredentials([string(credentialsId: 'develocity.commonhaus.dev-access-key-pr', - variable: 'DEVELOCITY_ACCESS_KEY')]) { - withGradle { // withDevelocity, actually: https://plugins.jenkins.io/gradle/#plugin-content-capturing-build-scans-from-jenkins-pipeline - // Don't fail a build if publishing fails - sh './gradlew buildScanPublishPrevious || true' - } - } - }) - } - else { - // Don't do build scans - sh "./ci/build.sh $args" - } -} - -void pruneDockerContainers() { - if ( !sh( script: 'command -v docker || true', returnStdout: true ).trim().isEmpty() ) { - sh 'docker container prune -f || true' - sh 'docker image prune -f || true' - sh 'docker network prune -f || true' - sh 'docker volume prune -f || true' - } -} - -void handleNotifications(currentBuild, buildEnv) { - def currentResult = getParallelResult(currentBuild, buildEnv.tag) - boolean success = currentResult == 'SUCCESS' || currentResult == 'UNKNOWN' - def previousResult = currentBuild.previousBuild == null ? null : getParallelResult(currentBuild.previousBuild, buildEnv.tag) - - // Ignore success after success - if ( !( success && previousResult == 'SUCCESS' ) ) { - def subject - def body - if ( success ) { - if ( previousResult != 'SUCCESS' && previousResult != null ) { - subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Fixed" - body = """

${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Fixed:

-

Check console output at ${env.BUILD_URL} to view the results.

""" - } - else { - subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Success" - body = """

${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Success:

-

Check console output at ${env.BUILD_URL} to view the results.

""" - } - } - else if (currentBuild.rawBuild.getActions(jenkins.model.InterruptedBuildAction.class).isEmpty()) { - // If there are interrupted build actions, this means the build was cancelled, probably superseded - // Thanks to https://issues.jenkins.io/browse/JENKINS-43339 for the "hack" to determine this - if ( currentResult == 'FAILURE' ) { - if ( previousResult != null && previousResult == "FAILURE" ) { - subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Still failing" - body = """

${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Still failing:

-

Check console output at ${env.BUILD_URL} to view the results.

""" - } - else { - subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Failure" - body = """

${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Failure:

-

Check console output at ${env.BUILD_URL} to view the results.

""" - } - } - else { - subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - ${currentResult}" - body = """

${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - ${currentResult}:

-

Check console output at ${env.BUILD_URL} to view the results.

""" - } - } - - emailext( - subject: subject, - body: body, - to: buildEnv.notificationRecipients - ) - } -} - -@NonCPS -String getParallelResult( RunWrapper build, String parallelBranchName ) { - def visitor = new PipelineNodeGraphVisitor( build.rawBuild ) - def branch = visitor.pipelineNodes.find{ it.type == FlowNodeWrapper.NodeType.PARALLEL && parallelBranchName == it.displayName } - if ( branch == null ) { - echo "Couldn't find parallel branch name '$parallelBranchName'. Available parallel branch names:" - visitor.pipelineNodes.findAll{ it.type == FlowNodeWrapper.NodeType.PARALLEL }.each{ - echo " - ${it.displayName}" - } - return null; - } - return branch.status.result -} - -// try-finally construct that properly suppresses exceptions thrown in the finally block. -static def tryFinally(Closure main, Closure ... finallies) { - def mainFailure = null - try { - main() - } - catch (Throwable t) { - mainFailure = t - throw t - } - finally { - finallies.each {it -> - try { - it() - } - catch (Throwable t) { - if ( mainFailure ) { - mainFailure.addSuppressed( t ) - } - else { - mainFailure = t - } - } - } - } - if ( mainFailure ) { // We may reach here if only the "finally" failed - throw mainFailure - } -} diff --git a/ci/jpa-3.2-tck.Jenkinsfile b/ci/jpa-3.2-tck.Jenkinsfile deleted file mode 100644 index 786990c7c654..000000000000 --- a/ci/jpa-3.2-tck.Jenkinsfile +++ /dev/null @@ -1,180 +0,0 @@ -@Library('hibernate-jenkins-pipeline-helpers') _ - -// Avoid running the pipeline on branch indexing -if (currentBuild.getBuildCauses().toString().contains('BranchIndexingCause')) { - print "INFO: Build skipped due to trigger being Branch Indexing" - currentBuild.result = 'NOT_BUILT' - return -} -// This is a limited maintenance branch, so don't run this on pushes to the branch, only on PRs -if ( !env.CHANGE_ID ) { - print "INFO: Build skipped because this job should only run for pull request, not for branch pushes" - currentBuild.result = 'NOT_BUILT' - return -} - -pipeline { - agent none - tools { - jdk 'OpenJDK 21 Latest' - } - options { - buildDiscarder(logRotator(numToKeepStr: '3', artifactNumToKeepStr: '3')) - disableConcurrentBuilds(abortPrevious: true) - } - parameters { - choice(name: 'IMAGE_JDK', choices: ['jdk17', 'jdk21'], description: 'The JDK base image version to use for the TCK image.') - string(name: 'TCK_VERSION', defaultValue: '3.2.0', description: 'The version of the Jakarta JPA TCK i.e. `2.2.0` or `3.0.1`') - string(name: 'TCK_SHA', defaultValue: '', description: 'The SHA256 of the Jakarta JPA TCK that is distributed under https://download.eclipse.org/jakartaee/persistence/3.1/jakarta-persistence-tck-${TCK_VERSION}.zip.sha256') - string(name: 'TCK_URL', defaultValue: 'https://www.eclipse.org/downloads/download.php?file=/ee4j/jakartaee-tck/jakartaee11/staged/eftl/jakarta-persistence-tck-3.2.0.zip&mirror_id=1', description: 'The URL from which to download the TCK ZIP file. Only needed for testing staged builds. Ensure the TCK_VERSION variable matches the ZIP file name suffix.') - choice(name: 'RDBMS', choices: ['postgresql','mysql','mssql','oracle','db2','sybase'], description: 'The JDK base image version to use for the TCK image.') - } - stages { - stage('Checks') { - steps { - requireApprovalForPullRequest 'hibernate' - } - } - stage('TCK') { - agent { - label 'LongDuration' - } - stages { - stage('Build') { - steps { - dir('hibernate') { - checkout scm - withEnv([ - "DISABLE_REMOTE_GRADLE_CACHE=true" - ]) { - sh './gradlew clean publishToMavenLocal -x test --no-scan --no-daemon --no-build-cache --stacktrace -PmavenMirror=nexus-load-balancer-c4cf05fd92f43ef8.elb.us-east-1.amazonaws.com' - // For some reason, Gradle does not publish hibernate-platform and hibernate-testing - // to the local maven repository with the previous command, - // but requires an extra run instead - sh './gradlew :hibernate-testing:publishToMavenLocal :hibernate-platform:publishToMavenLocal -x test --no-scan --no-daemon --no-build-cache --stacktrace -PmavenMirror=nexus-load-balancer-c4cf05fd92f43ef8.elb.us-east-1.amazonaws.com' - } - script { - env.HIBERNATE_VERSION = sh ( - script: "grep hibernateVersion gradle/version.properties|cut -d'=' -f2", - returnStdout: true - ).trim() - switch (params.RDBMS) { - case "mysql": - docker.image('mysql:8.2.0').pull() - sh "./docker_db.sh mysql" - break; - case "mssql": - docker.image('mcr.microsoft.com/mssql/server@sha256:5439be9edc3b514cf647bcd3651779fa13f487735a985f40cbdcfecc60fea273').pull() - sh "./docker_db.sh mssql" - break; - case "oracle": - docker.image('gvenzl/oracle-free:23').pull() - sh "./docker_db.sh oracle" - break; - case "postgresql": - docker.image('postgis/postgis:16-3.4').pull() - sh "./docker_db.sh postgresql" - break; - case "db2": - docker.image('icr.io/db2_community/db2:11.5.9.0').pull() - sh "./docker_db.sh db2" - break; - case "sybase": - docker.image('nguoianphu/docker-sybase').pull() - sh "./docker_db.sh sybase" - break; - } - } - } - dir('tck') { - checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[url: 'https://github.com/hibernate/jakarta-tck-runner.git']]] - script { - withCredentials([file(credentialsId: 'sybase-jconnect-driver', variable: 'jconnect_driver')]) { - sh 'cp -f $jconnect_driver ./jpa-3.2/jconn42.jar' - if ( params.TCK_URL == null || params.TCK_URL.isEmpty() ) { - sh "cd jpa-3.2; docker build -f Dockerfile.${params.IMAGE_JDK} -t jakarta-tck-runner --build-arg TCK_VERSION=${params.TCK_VERSION} --build-arg TCK_SHA=${params.TCK_SHA} ." - } - else { - sh "cd jpa-3.2; docker build -f Dockerfile.${params.IMAGE_JDK} -t jakarta-tck-runner --build-arg TCK_VERSION=${params.TCK_VERSION} --build-arg TCK_SHA=${params.TCK_SHA} --build-arg 'TCK_URL=${params.TCK_URL}' ." - } - } - } - } - } - } - stage('Run TCK') { - steps { - script { - def containerName - if ( params.RDBMS == 'postgresql' ) { - containerName = 'postgres' - } - else { - containerName = params.RDBMS - } - def dockerRunOptions = "--network=tck-net -e DB_HOST=${containerName}" - sh """ \ - while IFS= read -r container; do - docker network disconnect tck-net \$container || true - done <<< \$(docker network inspect tck-net --format '{{range \$k, \$v := .Containers}}{{print \$k}}{{end}}' 2>/dev/null || true) - docker network rm -f tck-net - docker network create tck-net - docker network connect tck-net ${containerName} - """ - sh """ \ - rm -Rf ./results - docker rm -f tck || true - docker run -v ~/.m2/repository:/home/jenkins/.m2/repository:z ${dockerRunOptions} -e MAVEN_OPTS=-Dmaven.repo.local=/home/jenkins/.m2/repository -e RDBMS=${params.RDBMS} -e HIBERNATE_VERSION=$HIBERNATE_VERSION --name tck jakarta-tck-runner || true - docker cp tck:/tck/persistence-tck/bin/target/failsafe-reports ./results - docker cp tck:/tck/persistence-tck/bin/target/test-reports ./results - """ - } - archiveArtifacts artifacts: 'results/**' - script { - def failures = sh ( - script: """ \ - while read line; do - if [[ "\$line" = *'-error" style="display:none;">' ]]; then - prefix1='' - line=\${line#"\$prefix1"} - line=\${line#"\$prefix2"} - test=\${line%"\$suffix"} - echo "\$test" - fi - done .*@${env.HIBERNATE_VERSION}@' pom.xml", returnStatus: true) if ( sedStatus != 0 ) { @@ -67,8 +68,25 @@ pipeline { // Need to override the default maven configuration this way, because there is no other way to do it sh "sed -i 's/-Xmx2048m/-Xmx1340m/' ./.mvn/jvm.config" sh "sed -i 's/MaxMetaspaceSize=1024m/MaxMetaspaceSize=512m/' ./.mvn/jvm.config" - def excludes = "'!integration-tests/kafka-oauth-keycloak,!integration-tests/kafka-sasl-elytron,!integration-tests/hibernate-search-orm-opensearch,!integration-tests/hibernate-search-orm-elasticsearch-outbox-polling,!integration-tests/hibernate-search-orm-elasticsearch-tenancy,!integration-tests/maven,!integration-tests/quartz,!integration-tests/reactive-messaging-kafka,!integration-tests/resteasy-reactive-kotlin/standard,!integration-tests/opentelemetry-reactive-messaging,!integration-tests/virtual-threads/kafka-virtual-threads,!integration-tests/smallrye-jwt-oidc-webapp,!extensions/oidc-db-token-state-manager/deployment,!docs'" - sh "TESTCONTAINERS_RYUK_CONTAINER_PRIVILEGED=true ./mvnw -Dinsecure.repositories=WARN -pl :quarkus-hibernate-orm -amd -pl ${excludes} verify -Dstart-containers -Dtest-containers -Dskip.gradle.build" + // See data category from https://github.com/quarkusio/quarkus/blob/main/.github/native-tests.json + def projects = [ + // Data1 + "jpa-h2, jpa-h2-embedded, jpa-mariadb, jpa-mssql, jpa-without-entity, hibernate-orm-tenancy/datasource, hibernate-orm-tenancy/connection-resolver, hibernate-orm-tenancy/connection-resolver-legacy-qualifiers", + // Data2 + "jpa, jpa-mapping-xml/legacy-app, jpa-mapping-xml/modern-app, jpa-mysql, jpa-db2, jpa-oracle", + // Data3 + "flyway, hibernate-orm-panache, hibernate-orm-panache-kotlin, hibernate-orm-envers, liquibase, liquibase-mongodb", + // Data4 + "mongodb-client, mongodb-devservices, mongodb-panache, mongodb-rest-data-panache, mongodb-panache-kotlin, redis-client, hibernate-orm-rest-data-panache", + // Data5 + "jpa-postgresql, jpa-postgresql-withxml, narayana-stm, narayana-jta, reactive-pg-client, hibernate-reactive-postgresql, hibernate-orm-tenancy/schema, hibernate-orm-tenancy/schema-mariadb", + // Data6 + "elasticsearch-rest-client, elasticsearch-java-client, hibernate-search-orm-elasticsearch, hibernate-search-orm-elasticsearch-tenancy, hibernate-search-orm-opensearch, hibernate-search-orm-elasticsearch-outbox-polling, hibernate-search-standalone-elasticsearch, hibernate-search-standalone-opensearch", + // Data7 + "reactive-oracle-client, reactive-mysql-client, reactive-db2-client, hibernate-reactive-db2, hibernate-reactive-mariadb, hibernate-reactive-mssql, hibernate-reactive-mysql, hibernate-reactive-mysql-agroal-flyway, hibernate-reactive-panache, hibernate-reactive-panache-kotlin, hibernate-reactive-oracle" + ] + def includes = projects.join(", "); + sh "TESTCONTAINERS_RYUK_CONTAINER_PRIVILEGED=true ./mvnw -Dinsecure.repositories=WARN -f integration-tests -pl '${includes}' verify -Dstart-containers -Dtest-containers -Dskip.gradle.build -Dquarkus.native.native-image-xmx=6g -Dnative -Dnative.surefire.skip -Dno-descriptor-tests" } } }