name: Java Quality Outreach
on:
  push:
    paths:
      - '.github/workflows/jdk-outreach-workflow.yml'
  pull_request:
    paths:
      - '.github/workflows/jdk-outreach-workflow.yml'
  schedule:
    - cron: 0 22 * * *

env:
  MAVEN_FULL_BUILD_PROJECTS: "\\!debezium-microbenchmark-oracle,\\!debezium-connector-oracle"
  MAVEN_CORE_SIBLING_CONNECTOR_PROJECTS: "debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi"

jobs:
  sqlserver:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: SQL Server - Java ${{ matrix.feature.release }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
      - name: Maven Build
        run: >
          ./mvnw clean install -B -pl debezium-bom,debezium-connector-sqlserver -am 
          -Passembly ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120
          -DfailFlakyTests=false
          ${{ matrix.feature.extra }}
  mysql:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: MySQL - Java ${{ matrix.feature.release }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
      - name: Maven Build
        run: >
          ./mvnw clean install -B -pl debezium-bom,debezium-connector-mysql -am 
          -Passembly ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          -DfailFlakyTests=false
          ${{ matrix.feature.extra }}
  postgres-pgoutput:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: PostgreSQL Pgoutput - Java ${{ matrix.feature.release }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
      - name: Maven Build
        run: >
          ./mvnw clean install -B -pl debezium-bom,debezium-connector-postgres -am 
          -Passembly,pgoutput-decoder,postgres-17 ${{ matrix.feature.args }} 
          -Ddebezium.test.records.waittime=5 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120
          -DfailFlakyTests=false
          ${{ matrix.feature.extra }}
  mongodb:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: MongoDB 7.0 - Java ${{ matrix.feature.release }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
      - name: Maven Build
        run: >
          ./mvnw clean install -B -pl debezium-bom,debezium-connector-mongodb -am 
          -Passembly ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dversion.mongo.server=7.0 
          -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120
          -DfailFlakyTests=false
          ${{ matrix.feature.extra }}
  oracle:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: Oracle - Java ${{ matrix.feature.release }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
      - name: Maven Build
        run: >
          ./mvnw clean install -B -pl debezium-bom,debezium-connector-oracle -am 
          -DskipITs=true 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120
          -DfailFlakyTests=false
          ${{ matrix.feature.extra }}
  cassandra:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: Cassandra - Java ${{ matrix.feature.release }}
    steps:
      - name: Checkout Core
        uses: actions/checkout@v4
        with:
          path: core
      - name: Checkout Cassandra
        uses: actions/checkout@v4
        with:
          repository: debezium/debezium-connector-cassandra
          path: cassandra
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
      - name: Build Debezium Core
        run: >
          ./core/mvnw clean install -f core/pom.xml 
          -pl ${{ ENV.MAVEN_CORE_SIBLING_CONNECTOR_PROJECTS }}
          -am
          -DskipTests 
          -DskipITs 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          ${{ matrix.feature.extra }}
      - name: Install dse dependency artifacts (for Debezium Connector Cassandra)
        working-directory: cassandra
        run: sh ./install-artifacts.sh
      - name: Build Debezium Connectors Cassandra
        run: >
          ./core/mvnw clean install -f cassandra/pom.xml 
          -Passembly ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          ${{ matrix.feature.extra }}
  db2:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: Db2 - Java ${{ matrix.feature.release }}
    steps:
      - name: Checkout Core
        uses: actions/checkout@v4
        with:
          path: core
      - name: Checkout Db2
        uses: actions/checkout@v4
        with:
          repository: debezium/debezium-connector-db2
          path: db2
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
      - name: Build Debezium Core
        run: >
          ./core/mvnw clean install -f core/pom.xml 
          -pl ${{ ENV.MAVEN_CORE_SIBLING_CONNECTOR_PROJECTS }}
          -am
          -DskipTests 
          -DskipITs 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          ${{ matrix.feature.extra }}
      - name: Build Debezium Connector Db2
        run: >
          ./core/mvnw clean install -f db2/pom.xml 
          -Passembly ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          -Ddebezium.test.records.waittime=5 
          -DfailFlakyTests=false
          ${{ matrix.feature.extra }}
  spanner:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: Spanner - Java ${{ matrix.feature.release }}
    steps:
      - name: Checkout Core
        uses: actions/checkout@v4
        with:
          path: core
      - name: Checkout Spanner
        uses: actions/checkout@v4
        with:
          repository: debezium/debezium-connector-spanner
          path: spanner
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
      - name: Build Debezium Core
        run: >
          ./core/mvnw clean install -f core/pom.xml 
          -pl ${{ ENV.MAVEN_CORE_SIBLING_CONNECTOR_PROJECTS }}
          -am
          -DskipTests -DskipITs 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120          
          ${{ matrix.feature.extra }}
      - name: Build Debezium Connector Spanner
        run: >
          ./core/mvnw clean install -f spanner/pom.xml 
          -Passembly ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          ${{ matrix.feature.extra }}
  vitess:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: Vitess - Java ${{ matrix.feature.release }}
    steps:
      - name: Checkout Core
        uses: actions/checkout@v4
        with:
          path: core
      - name: Checkout Vitess
        uses: actions/checkout@v4
        with:
          repository: debezium/debezium-connector-vitess
          path: vitess
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
      - name: Build Debezium Core
        run: >
          ./core/mvnw clean install -f core/pom.xml 
          -pl ${{ ENV.MAVEN_CORE_SIBLING_CONNECTOR_PROJECTS }}
          -am
          -DskipTests 
          -DskipITs 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          ${{ matrix.feature.extra }}
      - name: Build Debezium Connector Vitess
        run: >
          ./core/mvnw clean install -f vitess/pom.xml 
          -Passembly ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          ${{ matrix.feature.extra }}
  informix:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: Informix - Java ${{ matrix.feature.release }}
    steps:
      - name: Checkout Core
        uses: actions/checkout@v4
        with:
          path: core
      - name: Checkout Informix
        uses: actions/checkout@v4
        with:
          repository: debezium/debezium-connector-informix
          path: informix
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
      - name: Build Debezium Core
        run: >
          ./core/mvnw clean install -f core/pom.xml 
          -pl ${{ ENV.MAVEN_CORE_SIBLING_CONNECTOR_PROJECTS }}
          -am
          -DskipTests 
          -DskipITs 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          ${{ matrix.feature.extra }}
      - name: Build Debezium Connector Informix
        run: >
          ./core/mvnw clean install -f informix/pom.xml 
          -Passembly,informix14 ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          -Ddebezium.test.records.waittime=5 
          -Ddebezium.test.records.waittime.after.nulls=5 
          -DfailFlakyTests=false
          ${{ matrix.feature.extra }}
  ibmi:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: IBMi - Java ${{ matrix.feature.release }}
    steps:
      - name: Checkout Core
        uses: actions/checkout@v4
        with:
          path: core
      - name: Checkout IBMi
        uses: actions/checkout@v4
        with:
          repository: debezium/debezium-connector-ibmi
          path: ibmi
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
      - name: Build Debezium Core
        run: >
          ./core/mvnw clean install -f core/pom.xml
          -pl ${{ ENV.MAVEN_CORE_SIBLING_CONNECTOR_PROJECTS }}
          -am
          -DskipTests
          -DskipITs
          -Dformat.formatter.goal=validate
          -Dformat.imports.goal=check
          -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120
          ${{ matrix.feature.extra }}
      - name: Build Debezium Connector IBMi
        run: >
          ./core/mvnw clean install -f ibmi/pom.xml
          -Passembly ${{ matrix.feature.args }}
          -Dformat.formatter.goal=validate
          -Dformat.imports.goal=check
          -Dhttp.keepAlive=false
          -Dmaven.wagon.http.pool=false
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120
          -Ddebezium.test.records.waittime=5
          -Ddebezium.test.records.waittime.after.nulls=5
          -DfailFlakyTests=false
          -DskipITs
          ${{ matrix.feature.extra }}
  quarkus-outbox:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: Quarkus Outbox Extension - Java ${{ matrix.feature.release }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
      - name: Build (core)
        run: >
          ./mvnw -B -ntp clean install
          -pl ${{ env.MAVEN_FULL_BUILD_PROJECTS }}
          -Dformat.skip=true
          -Dcheckstyle.skip=true
          -Dorg.slf4j.simpleLogger.showDateTime=true
          -Dorg.slf4j.simpleLogger.dateTimeFormat="YYYY-MM-dd HH:mm:ss,SSS"
          -DskipTests=true
          -DskipITs=true
          ${{ matrix.feature.extra }}
      - name: Maven Build
        run: >
          ./mvnw clean install -B -pl :debezium-quarkus-outbox -am -amd 
          -Passembly ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          ${{ matrix.feature.extra }}
  rest-extension:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: Rest Extension - Java ${{ matrix.feature.release }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
      - name: Maven Build
        run: >
          ./mvnw clean install -B -pl debezium-bom,debezium-connect-rest-extension -am 
          -Passembly ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          ${{ matrix.feature.extra }}
  testing:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: Testing - Java ${{ matrix.feature.release }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }}
      - name: Maven Build
        run: >
          ./mvnw clean install -B -pl debezium-bom,debezium-testing -am 
          -Passembly ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          -DfailFlakyTests=false
          ${{ matrix.feature.extra }}
  server:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        feature: [ { release: ga, args: '-DskipITs=true -DskipTests=true', extra: '' }, { release: ea, args: '', extra: '-Dnet.bytebuddy.experimental=true' } ]
      fail-fast: false
    name: Server - Java ${{ matrix.feature.release }}
    steps:
      - name: Checkout Core
        uses: actions/checkout@v4
        with:
          path: core
      - name: Checkout Server
        uses: actions/checkout@v4
        with:
          repository: debezium/debezium-server
          path: server
      - name: Setup OpenJDK
        uses: oracle-actions/setup-java@v1
        with:
          website: jdk.java.net
          release: ${{ matrix.feature.release }}
      - name: Cache
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
          restore-keys: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
      - name: Build Debezium Core
        run: >
          ./core/mvnw clean install -f core/pom.xml 
          -DskipTests 
          -DskipITs 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          ${{ matrix.feature.extra }}
      - name: Build Debezium Server
        run: >
          ./core/mvnw clean install -fae -f server/pom.xml 
          -Passembly ${{ matrix.feature.args }} 
          -Dformat.formatter.goal=validate 
          -Dformat.imports.goal=check 
          -Dhttp.keepAlive=false 
          -Dmaven.wagon.http.pool=false 
          -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 
          -DskipNonCore 
          ${{ matrix.feature.extra }}
