From c05b8cb08e95f2631792b65c2536afa27d8d77f5 Mon Sep 17 00:00:00 2001 From: Chris Cranford Date: Sat, 2 Mar 2024 09:56:06 -0500 Subject: [PATCH] [ci] GitHub Actions Rework (No Test Runs) --- .../build-debezium-cassandra/action.yml | 52 + .github/actions/build-debezium-db2/action.yml | 47 + .../build-debezium-informix/action.yml | 49 + .../actions/build-debezium-jdbc/action.yml | 47 + .../actions/build-debezium-mariadb/action.yml | 39 + .../actions/build-debezium-mongodb/action.yml | 40 + .../actions/build-debezium-mysql/action.yml | 44 + .../actions/build-debezium-oracle/action.yml | 35 + .../actions/build-debezium-outbox/action.yml | 32 + .../build-debezium-postgres/action.yml | 40 + .../build-debezium-rest-extension/action.yml | 33 + .../action.yml | 33 + .../actions/build-debezium-server/action.yml | 46 + .../actions/build-debezium-spanner/action.yml | 47 + .../build-debezium-sqlserver/action.yml | 36 + .../actions/build-debezium-storage/action.yml | 64 + .../actions/build-debezium-testing/action.yml | 36 + .../actions/build-debezium-vitess/action.yml | 47 + .github/actions/checkstyle-format/action.yml | 30 + .github/actions/maven-cache/action.yml | 19 + .github/actions/setup-java/action.yml | 22 + .github/workflows/debezium-workflow-pr.yml | 630 ++++++++++ .github/workflows/debezium-workflow-push.yml | 496 ++++++++ .github/workflows/debezium-workflow.yml | 1112 ----------------- .github/workflows/oracle-workflow-test.yml | 180 --- 25 files changed, 1964 insertions(+), 1292 deletions(-) create mode 100644 .github/actions/build-debezium-cassandra/action.yml create mode 100644 .github/actions/build-debezium-db2/action.yml create mode 100644 .github/actions/build-debezium-informix/action.yml create mode 100644 .github/actions/build-debezium-jdbc/action.yml create mode 100644 .github/actions/build-debezium-mariadb/action.yml create mode 100644 .github/actions/build-debezium-mongodb/action.yml create mode 100644 .github/actions/build-debezium-mysql/action.yml create mode 100644 .github/actions/build-debezium-oracle/action.yml create mode 100644 .github/actions/build-debezium-outbox/action.yml create mode 100644 .github/actions/build-debezium-postgres/action.yml create mode 100644 .github/actions/build-debezium-rest-extension/action.yml create mode 100644 .github/actions/build-debezium-schema-generator/action.yml create mode 100644 .github/actions/build-debezium-server/action.yml create mode 100644 .github/actions/build-debezium-spanner/action.yml create mode 100644 .github/actions/build-debezium-sqlserver/action.yml create mode 100644 .github/actions/build-debezium-storage/action.yml create mode 100644 .github/actions/build-debezium-testing/action.yml create mode 100644 .github/actions/build-debezium-vitess/action.yml create mode 100644 .github/actions/checkstyle-format/action.yml create mode 100644 .github/actions/maven-cache/action.yml create mode 100644 .github/actions/setup-java/action.yml create mode 100644 .github/workflows/debezium-workflow-pr.yml create mode 100644 .github/workflows/debezium-workflow-push.yml delete mode 100644 .github/workflows/debezium-workflow.yml delete mode 100644 .github/workflows/oracle-workflow-test.yml diff --git a/.github/actions/build-debezium-cassandra/action.yml b/.github/actions/build-debezium-cassandra/action.yml new file mode 100644 index 000000000..b83929f24 --- /dev/null +++ b/.github/actions/build-debezium-cassandra/action.yml @@ -0,0 +1,52 @@ +name: "Build Cassandra" +description: "Builds the Debezium Cassandra connector" + +inputs: + path-core: + description: "Debezium core repository checkout path" + required: true + path-cassandra: + description: "Debezium Cassandra repository checkout path" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - name: Build Debezium (Core) + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-core }}/pom.xml + -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi + -am + -DskipTests=true + -DskipITs=true + -Dcheckstyle.skip=true + -Dformat.skip=true + -Drevapi.skip + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + + - name: Install DSE dependency artifacts + working-directory: ${{ inputs.path-cassandra }} + shell: ${{ inputs.shell }} + run: sh ./install-artifacts.sh + + # Remove skipITs/skipTests + - name: Build Cassandra + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-cassandra }}/pom.xml + -Passembly + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DfailFlakyTests=false + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/build-debezium-db2/action.yml b/.github/actions/build-debezium-db2/action.yml new file mode 100644 index 000000000..db42274ca --- /dev/null +++ b/.github/actions/build-debezium-db2/action.yml @@ -0,0 +1,47 @@ +name: "Build Db2" +description: "Builds the Debezium Db2 connector" + +inputs: + path-core: + description: "Debezium core repository checkout path" + required: true + path-db2: + description: "Debezium Db2 repository checkout path" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - name: Build Debezium (Core) + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-core }}/pom.xml + -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi + -am + -DskipTests=true + -DskipITs=true + -Dcheckstyle.skip=true + -Dformat.skip=true + -Drevapi.skip + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + + # Remove skipITs/skipTests + - name: Build Db2 + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-db2 }}/pom.xml + -Passembly + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DfailFlakyTests=false + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/build-debezium-informix/action.yml b/.github/actions/build-debezium-informix/action.yml new file mode 100644 index 000000000..683d41125 --- /dev/null +++ b/.github/actions/build-debezium-informix/action.yml @@ -0,0 +1,49 @@ +name: "Build Informix" +description: "Builds the Debezium Informix connector" + +inputs: + path-core: + description: "Debezium core repository checkout path" + required: true + path-informix: + description: "Debezium Informix repository checkout path" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - name: Build Debezium (Core) + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-core }}/pom.xml + -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi + -am + -DskipTests=true + -DskipITs=true + -Dcheckstyle.skip=true + -Dformat.skip=true + -Drevapi.skip + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + + # Remove skipITs/skipTests + - name: Build Informix + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-informix }}/pom.xml + -Passembly,informix14 + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -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=true + -DskipTests=true diff --git a/.github/actions/build-debezium-jdbc/action.yml b/.github/actions/build-debezium-jdbc/action.yml new file mode 100644 index 000000000..2121a1037 --- /dev/null +++ b/.github/actions/build-debezium-jdbc/action.yml @@ -0,0 +1,47 @@ +name: "Build JDBC" +description: "Builds the Debezium JDBC connector" + +inputs: + path-core: + description: "Debezium core repository checkout path" + required: true + path-jdbc: + description: "Debezium JDBC repository checkout path" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - name: Build Debezium (Core) + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-core }}/pom.xml + -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi + -am + -DskipTests=true + -DskipITs=true + -Dcheckstyle.skip=true + -Dformat.skip=true + -Drevapi.skip + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + + # Remove skipTests + - name: Build JDBC + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-jdbc }}/pom.xml + -Passembly + -DskipITs=true + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DfailFlakyTests=false + -DskipTests=true diff --git a/.github/actions/build-debezium-mariadb/action.yml b/.github/actions/build-debezium-mariadb/action.yml new file mode 100644 index 000000000..a2de130d0 --- /dev/null +++ b/.github/actions/build-debezium-mariadb/action.yml @@ -0,0 +1,39 @@ +name: "Build MariaDB" +description: "Builds the Debezium MariaDB connector" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + profile: + description: "The MariaDB build profile to use" + required: false + default: "mysql-ci" + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + # Remove skipITs/skipTests + - name: Build MariaDB connector (MariaDB - ${{ inputs.profile }}) + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -pl debezium-connector-mysql -am + -Pmariadb,${{ inputs.profile }} + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DfailFlakyTests=false + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/build-debezium-mongodb/action.yml b/.github/actions/build-debezium-mongodb/action.yml new file mode 100644 index 000000000..38756d2bd --- /dev/null +++ b/.github/actions/build-debezium-mongodb/action.yml @@ -0,0 +1,40 @@ +name: "Build MongoDB" +description: "Builds the Debezium MongoDB connector" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + version-mongo-server: + description: "The MongoDB server version to use" + required: false + default: "7.0" + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + # Remove skipITs/skipTests + - name: Build MongoDB connector (MongoDB ${{ inputs.version-mongo-server }}) + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -pl debezium-connector-mongodb -am + -Passembly + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dversion.mongo.server=${{ inputs.version-mongo-server }} + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DfailFlakyTests=false + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/build-debezium-mysql/action.yml b/.github/actions/build-debezium-mysql/action.yml new file mode 100644 index 000000000..64bf8d833 --- /dev/null +++ b/.github/actions/build-debezium-mysql/action.yml @@ -0,0 +1,44 @@ +name: "Build MySQL" +description: "Builds the Debezium MySQL connector" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + version-mysql-server: + description: "The MySQL server version to use" + required: false + default: "8.2" + profile: + description: "The MySQL build profile to use" + required: false + default: "mysql-ci" + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + # Remove skipITs/skipTests + - name: Build MySQL connector (MySQL ${{ inputs.version-mysql-server }} - ${{ inputs.profile }}) + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -pl debezium-connector-mysql -am + -P${{ inputs.profile }} + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dversion.mysql.server=${{ inputs.version-mysql-server }} + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DfailFlakyTests=false + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/build-debezium-oracle/action.yml b/.github/actions/build-debezium-oracle/action.yml new file mode 100644 index 000000000..698c5b04e --- /dev/null +++ b/.github/actions/build-debezium-oracle/action.yml @@ -0,0 +1,35 @@ +name: "Build Oracle" +description: "Builds the Debezium Oracle connector" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + # We intentionally do not run the integration tests here because the runner does not have adequate space + # for the docker container and pull requests are not permitted to fetch the container image. + - name: Build Oracle connector + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -pl debezium-connector-oracle -am + -Pinfinispan-buffer,oracle-tests + -DskipITs=true + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DfailFlakyTests=false diff --git a/.github/actions/build-debezium-outbox/action.yml b/.github/actions/build-debezium-outbox/action.yml new file mode 100644 index 000000000..288cc7c0d --- /dev/null +++ b/.github/actions/build-debezium-outbox/action.yml @@ -0,0 +1,32 @@ +name: "Build Quarkus Outbox Extension" +description: "Builds the Debezium Quarkus Outbox Extension" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + - name: Build Quarkus Outbox Extension + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -pl :debezium-quarkus-outbox -am -amd + -Passembly + -Dcheckstyle.skip=true + -Dformat.skip=true + -Drevapi.skip + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 diff --git a/.github/actions/build-debezium-postgres/action.yml b/.github/actions/build-debezium-postgres/action.yml new file mode 100644 index 000000000..df60a40aa --- /dev/null +++ b/.github/actions/build-debezium-postgres/action.yml @@ -0,0 +1,40 @@ +name: "Build PostgreSQL" +description: "Builds the Debezium PostgreSQL connector" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + profile: + description: "The PostgreSQL build profile to use" + required: false + default: "assembly" + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + # Remove skipITs/skipTests + - name: Build PostgreSQL connector (PostgreSQL - ${{ inputs.profile }}) + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -pl debezium-connector-postgres -am + -P${{ inputs.profile }} + -Ddebezium.test.records.waittime=5 + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DfailFlakyTests=false + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/build-debezium-rest-extension/action.yml b/.github/actions/build-debezium-rest-extension/action.yml new file mode 100644 index 000000000..c1b9625fc --- /dev/null +++ b/.github/actions/build-debezium-rest-extension/action.yml @@ -0,0 +1,33 @@ +name: "Build REST Extension" +description: "Builds the Debezium REST Extension" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + # Remove skipITs/skipTests + - name: Build REST Extension + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -pl debezium-connect-rest-extension -am + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/build-debezium-schema-generator/action.yml b/.github/actions/build-debezium-schema-generator/action.yml new file mode 100644 index 000000000..23665cb62 --- /dev/null +++ b/.github/actions/build-debezium-schema-generator/action.yml @@ -0,0 +1,33 @@ +name: "Build Schema Generator" +description: "Builds the Debezium Schema Generator" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + # Remove skipITs/skipTests + - name: Build Schema Generator + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -pl debezium-schema-generator -am + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/build-debezium-server/action.yml b/.github/actions/build-debezium-server/action.yml new file mode 100644 index 000000000..c8a6fe962 --- /dev/null +++ b/.github/actions/build-debezium-server/action.yml @@ -0,0 +1,46 @@ +name: "Build Server" +description: "Builds the Debezium Server" + +inputs: + path-core: + description: "Debezium core repository checkout path" + required: true + path-server: + description: "Debezium Server repository checkout path" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - name: Build Debezium (Core) + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-core }}/pom.xml + -DskipTests=true + -DskipITs=true + -Dcheckstyle.skip=true + -Dformat.skip=true + -Drevapi.skip + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + + # Remove skipITs/skipTests + - name: Build Server + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -fae -f ${{ inputs.path-server }}/pom.xml + -Passembly + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DskipNonCore + -DfailFlakyTests=false + -DskipTests=true + -DskipITs=true diff --git a/.github/actions/build-debezium-spanner/action.yml b/.github/actions/build-debezium-spanner/action.yml new file mode 100644 index 000000000..32dcf5b44 --- /dev/null +++ b/.github/actions/build-debezium-spanner/action.yml @@ -0,0 +1,47 @@ +name: "Build Spanner" +description: "Builds the Debezium Spanner connector" + +inputs: + path-core: + description: "Debezium core repository checkout path" + required: true + path-spanner: + description: "Debezium Spanner repository checkout path" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - name: Build Debezium (Core) + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-core }}/pom.xml + -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi + -am + -DskipTests=true + -DskipITs=true + -Dcheckstyle.skip=true + -Dformat.skip=true + -Drevapi.skip + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + + # Remove skipITs/skipTests + - name: Build Spanner + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-spanner }}/pom.xml + -Passembly + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DfailFlakyTests=false + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/build-debezium-sqlserver/action.yml b/.github/actions/build-debezium-sqlserver/action.yml new file mode 100644 index 000000000..1023d29c7 --- /dev/null +++ b/.github/actions/build-debezium-sqlserver/action.yml @@ -0,0 +1,36 @@ +name: "Build SQL Server" +description: "Builds the Debezium SQL Server connector" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + # Remove skipITs/skipTests + - name: Build SQL Server connector + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -pl debezium-connector-sqlserver -am + -Passembly + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -Ddebezium.test.records.waittime=10 + -DfailFlakyTests=false + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/build-debezium-storage/action.yml b/.github/actions/build-debezium-storage/action.yml new file mode 100644 index 000000000..3c2ed687b --- /dev/null +++ b/.github/actions/build-debezium-storage/action.yml @@ -0,0 +1,64 @@ +name: "Build Debezium Storage Module" +description: "Builds the Debezium Storage Module" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + # Required by storage module + - name: Build Debezium (Core) + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install + -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi + -am + -DskipTests=true + -DskipITs=true + -Dcheckstyle.skip=true + -Dformat.skip=true + -Drevapi.skip + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + + # Required by storage module + - name: Build Debezium MySQL Connector + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -pl debezium-connector-mysql + -Passembly + -DskipTests=true + -DskipITs=true + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + + # Remove skipITs/skipTests + - name: Build Storage Module + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -f debezium-storage/pom.xml + -Passembly + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DskipITs=true + -DskipTests diff --git a/.github/actions/build-debezium-testing/action.yml b/.github/actions/build-debezium-testing/action.yml new file mode 100644 index 000000000..0d8134594 --- /dev/null +++ b/.github/actions/build-debezium-testing/action.yml @@ -0,0 +1,36 @@ +name: "Build Debezium Testing Module" +description: "Builds the Debezium Testing Module" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + # Remove skipITs/skipTests + - name: Build Testing Module + shell: ${{ inputs.shell }} + run: > + ./mvnw clean install -B -pl debezium-testing,debezium-testing/debezium-testing-testcontainers -am + -Passembly + -Dcheckstyle.skip=true + -Dformat.skip=true + -Drevapi.skip + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DfailFlakyTests=false + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/build-debezium-vitess/action.yml b/.github/actions/build-debezium-vitess/action.yml new file mode 100644 index 000000000..35c5a174f --- /dev/null +++ b/.github/actions/build-debezium-vitess/action.yml @@ -0,0 +1,47 @@ +name: "Build Vitess" +description: "Builds the Debezium Vitess connector" + +inputs: + path-core: + description: "Debezium core repository checkout path" + required: true + path-vitess: + description: "Debezium Vitess repository checkout path" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - name: Build Debezium (Core) + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-core }}/pom.xml + -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi + -am + -DskipTests=true + -DskipITs=true + -Dcheckstyle.skip=true + -Dformat.skip=true + -Drevapi.skip + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + + # Remove skipITs/skipTests + - name: Build Vitess + shell: ${{ inputs.shell }} + run: > + ./${{ inputs.path-core }}/mvnw clean install -B -ntp -f ${{ inputs.path-vitess }}/pom.xml + -Passembly + -Dcheckstyle.skip=true + -Dformat.skip=true + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -Dmaven.wagon.http.pool=false + -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 + -DfailFlakyTests=false + -DskipITs=true + -DskipTests=true diff --git a/.github/actions/checkstyle-format/action.yml b/.github/actions/checkstyle-format/action.yml new file mode 100644 index 000000000..8eddddbe3 --- /dev/null +++ b/.github/actions/checkstyle-format/action.yml @@ -0,0 +1,30 @@ +name: "Checkstyle and Formatting" +description: "Performs checkstyle and formatting" + +inputs: + maven-cache-key: + description: "The maven build cache key" + required: true + shell: + description: "The shell to use" + required: false + default: bash + +runs: + using: "composite" + steps: + - uses: ./.github/actions/setup-java + + - uses: ./.github/actions/maven-cache + with: + key: ${{ inputs.maven-cache-key }} + + - name: "Checkstyle, Formatting, and Import Order Checks" + shell: ${{ inputs.shell }} + run: > + ./mvnw -B -ntp process-sources checkstyle:checkstyle + -pl ${{ env.MAVEN_FULL_BUILD_PROJECTS }} + -Dformat.formatter.goal=validate + -Dformat.imports.goal=check + -Dorg.slf4j.simpleLogger.showDateTime=true + -Dorg.slf4j.simpleLogger.dateTimeFormat="YYYY-MM-dd HH:mm:ss,SSS" \ No newline at end of file diff --git a/.github/actions/maven-cache/action.yml b/.github/actions/maven-cache/action.yml new file mode 100644 index 000000000..2abb0d451 --- /dev/null +++ b/.github/actions/maven-cache/action.yml @@ -0,0 +1,19 @@ +name: "Maven Cache" +description: "Restores the Maven ~/.m2/repository cache" + +inputs: + key: + description: "The maven cache key to use" + required: true + +runs: + using: "composite" + steps: + - name: Cache Maven Repository + id: cache-check + uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: ${{ inputs.key }} + restore-keys: ${{ inputs.key }} + diff --git a/.github/actions/setup-java/action.yml b/.github/actions/setup-java/action.yml new file mode 100644 index 000000000..0dc9944a5 --- /dev/null +++ b/.github/actions/setup-java/action.yml @@ -0,0 +1,22 @@ +name: "Set up Java" +description: "Set up the desired version of Java" + +inputs: + distribution: + description: "The Java distribution to use" + required: false + default: "temurin" + java-version: + description: "The java version to install" + required: false + default: 17 + +runs: + using: "composite" + steps: + - name: Set up Java ${{ inputs.java-version }} + uses: actions/setup-java@v4 + with: + distribution: ${{ inputs.distribution }} + java-version: ${{ inputs.java-version }} + diff --git a/.github/workflows/debezium-workflow-pr.yml b/.github/workflows/debezium-workflow-pr.yml new file mode 100644 index 000000000..34cc44b6f --- /dev/null +++ b/.github/workflows/debezium-workflow-pr.yml @@ -0,0 +1,630 @@ +name: Build Debezium (PR) + +on: + pull_request: + branches: + - main + - 1.* + - 2.* + +env: + MAVEN_FULL_BUILD_PROJECTS: "\\!debezium-microbenchmark-oracle" + +# Pushes to each pull request will trigger a cancellation of any existing push jobs for that pull request, +# and will restart the build based on the latest push data for that specific pull request. +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name }} + cancel-in-progress: true + +jobs: + # This job is responsible for inspecting the changes in the repository and setting specific output variables + # that subsequent jobs can use to determine whether a particular job should be skipped or included. + file_changes: + name: "Detect repository changes" + runs-on: ubuntu-latest + outputs: + common-changed: ${{ steps.changed-files-common.outputs.any_changed }} + mongodb-changed: ${{ steps.changed-files-mongodb.outputs.any_changed }} + mysql-changed: ${{ steps.changed-files-mysql.outputs.any_changed }} + postgresql-changed: ${{ steps.changed-files-postgresql.outputs.any_changed }} + oracle-changed: ${{ steps.changed-files-oracle.outputs.any_changed }} + sqlserver-changed: ${{ steps.changed-files-sqlserver.outputs.any_changed }} + outbox-changed: ${{ steps.changed-files-outbox.outputs.any_changed }} + rest-extension-changed: ${{ steps.changed-files-rest-extension.outputs.any_changed }} + schema-generator-changed: ${{ steps.changed-files-schema-generator.outputs.any_changed }} + debezium-testing-changed: ${{ steps.changed-files-debezium-testing.outputs.any_changed }} + mysql-ddl-parser-changed: ${{ steps.changed-files-mysql-ddl-parser.outputs.any_changed }} + oracle-ddl-parser-changed: ${{ steps.changed-files-oracle-ddl-parser.outputs.any_changed }} + documentation-only-changed: ${{ steps.changed-files-documentation.outputs.only_changed }} + storage-only-changed: ${{ steps.changed-files-storage.outputs.only_changed }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Get modified files (Common) + id: changed-files-common + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + support/checkstyle/** + support/revapi/** + debezium-api/** + debezium-assembly-descriptors/** + debezium-core/** + debezium-embedded/** + debezium-revapi/** + debezium-ide-configs/** + debezium-parent/pom.xml + debezium-bom/pom.xml + debezium-storage/** + debezium-scripting/** + pom.xml + .mvn/** + .github/actions/** + .github/workflows/debezium-workflow-*.yml + + - name: Get modified files (MongoDB) + id: changed-files-mongodb + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-connector-mongodb/** + + - name: Get modified files (MySQL) + id: changed-files-mysql + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-connector-mysql/** + + - name: Get modified files (PostgreSQL) + id: changed-files-postgresql + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-connector-postgres/** + + - name: Get modified files (Oracle) + id: changed-files-oracle + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-connector-oracle/** + + - name: Get modified files (SQL Server) + id: changed-files-sqlserver + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-connector-sqlserver/** + + - name: Get modified files (Quarkus Outbox) + id: changed-files-outbox + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-quarkus-outbox/** + debezium-quarkus-outbox-common/** + debezium-quarkus-outbox-reactive/** + + - name: Get modified files (REST Extension) + id: changed-files-rest-extension + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-connect-rest-extension/** + + - name: Get modified files (Schema Generator) + id: changed-files-schema-generator + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-schema-generator/** + + - name: Get modified files (Debezium Testing) + id: changed-files-debezium-testing + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-testing/** + + - name: Get modified files (MySQL DDL parser) + id: changed-files-mysql-ddl-parser + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/mysql/** + debezium-ddl-parser/src/main/java/io/debezium/antlr/** + debezium-ddl-parser/src/test/resources/mysql/examples/** + + - name: Get modified files (Oracle DDL parser) + id: changed-files-oracle-ddl-parser + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/oracle/** + debezium-ddl-parser/src/main/java/io/debezium/antlr/** + debezium-ddl-parser/src/main/java/io/debezium/ddl/parser/oracle/** + debezium-ddl-parser/src/test/resources/oracle/examples/** + + - name: Get modified files (Documentation) + id: changed-files-documentation + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + documentation/** + + - name: Get modified files (Storage) + id: changed-files-storage + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + debezium-storage/** + + # Approx 1m + build_cache: + name: "Update Dependencies" + needs: [ file_changes ] + if: ${{ needs.file_changes.outputs.documentation-only-changed == 'false' }} + runs-on: ubuntu-latest + steps: + - name: Checkout Action (Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Debezium Server) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-server + path: server + + - uses: ./core/.github/actions/setup-java + + # GitHub actions seem to struggle returning actions/cache cache-hit + # Directly use the cache action here to control whether to fetch dependencies + - id: maven-cache-check + uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} + restore-keys: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} + + # This step is responsible for pulling down artifacts + # Unfortunately due to the nature of how some of the maven workflows work, the only reliable way + # to guarantee fully seeding the maven cache is to run a full build. This step does not execute + # tests, formatting, checkstyle, nor import sorts. + # + # This check is conditioned so that if the cache-key was not found, we will execute this step. + # If the cache-key was found, this means we cannot update the cache and therefore we should + # not need to explicitly run this step. This should improve response of format/checkstyle + # errors to users faster. + # + # This job also explicitly excludes the "debezium-microbenchmark-oracle" module temporarily. + # There is a dependency on xstream.jar for this module that should be fixed and made to not + # be required so that the module can be built on GitHub Actions. + - name: Download dependencies (Core) + if: steps.maven-cache-check.outputs.cache-hit != 'true' + run: > + ./core/mvnw -B -ntp clean install -f core/pom.xml + -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 + + - name: Download dependencies (Debezium Server) + if: steps.maven-cache-check.outputs.cache-hit != 'true' + run: > + ./server/mvnw -B -ntp clean install -f server/pom.xml + -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 + + # Approx 1m + check_style: + name: "Checkstyle and Formatting" + needs: [ build_cache ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/checkstyle-format + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + + build_mongodb: + strategy: + # Runs each combination concurrently + matrix: + version-mongo-server: [ "5.0", "7.0" ] + fail-fast: false + name: "MongoDB ${{ matrix.version-mongo-server }}" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.mongodb-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-mongodb + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + version-mongo-server: ${{ matrix.version-mongo-server }} + + # Approx 40m each + build_mysql: + strategy: + # Runs each combination concurrently + matrix: + profile: [ "mysql-ci", "mysql-ci-gtids", "mysql-ci-percona", "mysql-ci-ssl" ] + version-mysql-server: [ "8.0", "8.2" ] + fail-fast: false + name: "MySQL ${{ matrix.version-mysql-server }} - ${{ matrix.profile }}" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.mysql-changed == 'true' || needs.file_changes.outputs.mysql-ddl-parser-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-mysql + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + version-mysql-server: ${{ matrix.version-mysql-server }} + profile: ${{ matrix.profile }} + + # Approx 40m each + build_mariadb: + strategy: + # Runs each combination concurrently + matrix: + profile: [ 'mysql-ci', 'mysql-ci-gtids' ] + fail-fast: false + name: "MariaDB - ${{ matrix.profile }}" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.mysql-changed == 'true' || needs.file_changes.outputs.mysql-ddl-parser-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-mariadb + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + profile: ${{ matrix.profile }} + + # Approx 40m each + build_postgresql: + strategy: + # Runs each combination concurrently + matrix: + profile: [ "assembly", "assembly,postgres-16,pgoutput-decoder" ] + fail-fast: false + name: "PostgreSQL - ${{ matrix.profile }}" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.postgresql-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-postgres + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + profile: ${{ matrix.profile }} + + # Approx 1h 45m + build_sqlserver: + name: "SQL Server" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.sqlserver-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-sqlserver + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + + # Approx 6m + build_oracle: + name: "Oracle" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.oracle-changed == 'true' || needs.file_changes.outputs.oracle-ddl-parser-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-oracle + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + + # Approx 2m + build_outbox: + name: "Quarkus Outbox Extension" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.outbox-changed == 'true' }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-outbox + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + + # Approx 5m + build_rest_extension: + name: "REST Extension" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.rest-extension-changed == 'true' }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-rest-extension + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + + # Approx 2m + build_schema_generator: + name: "Schema Generator" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-schema-generator + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + + # Approx 5m + build_debezium_testing: + name: "Testing Module" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.debezium-testing-changed == 'true' }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-testing + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + + # Approx 3m + build_storage: + name: "Storage Module" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.mysql-changed == 'true' || needs.file_changes.outputs.mysql-ddl-parser-changed == 'true' || needs.file_changes.outputs.storage-changed == 'true' }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-storage + with: + maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} + + # Approx 25m + build_cassandra: + name: "Cassandra" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' }} + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Cassandra) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-cassandra + path: cassandra + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-cassandra + with: + path-core: core + path-cassandra: cassandra + + # Approx 1h + build_db2: + name: "Db2" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' }} + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Db2) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-db2 + path: db2 + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-db2 + with: + path-core: core + path-db2: db2 + + # Approx 45m + build_informix: + name: "Informix" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' }} + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Informix) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-informix + path: informix + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-informix + with: + path-core: core + path-informix: informix + + # Approx 20m + build_vitess: + name: "Vitess" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' }} + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Vitess) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-vitess + path: vitess + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-vitess + with: + path-core: core + path-vitess: vitess + + # Approx 7m + build_spanner: + name: "Spanner" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' }} + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Spanner) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-spanner + path: spanner + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-spanner + with: + path-core: core + path-spanner: spanner + + # Approx 1m + build_jdbc: + name: "JDBC" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' }} + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (JDBC) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-jdbc + path: jdbc + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-jdbc + with: + path-core: core + path-jdbc: jdbc + + build_debezium_server: + name: "Debezium Server" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + if: ${{ needs.file_changes.outputs.common-changed == 'true' }} + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Debezium Server) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-server + path: server + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-server + with: + path-core: core + path-server: server \ No newline at end of file diff --git a/.github/workflows/debezium-workflow-push.yml b/.github/workflows/debezium-workflow-push.yml new file mode 100644 index 000000000..b20d0fcb4 --- /dev/null +++ b/.github/workflows/debezium-workflow-push.yml @@ -0,0 +1,496 @@ +name: Build Debezium (Push) + +on: + push: + branches: + - main + - 1.* + - 2.* + +env: + MAVEN_FULL_BUILD_PROJECTS: "\\!debezium-microbenchmark-oracle" + +# Pushes to each branch will trigger a cancellation of any existing push jobs for that branch and +# will restart the build based on the latest push for that specific branch. +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name }} + cancel-in-progress: true + +jobs: + + # Approx 1m + file_changes: + name: "Detect changes" + runs-on: ubuntu-latest + outputs: + documentation-only-changed: ${{ steps.changed-files-documentation.outputs.only_changed }} + steps: + - name: Checkout Action + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Get modified files (Documentation) + id: changed-files-documentation + uses: tj-actions/changed-files@v42.0.5 + with: + files: | + documentation/** + + # Approx 1m + build_cache: + name: "Update Dependencies" + needs: [ file_changes ] + if: ${{ needs.file_changes.outputs.documentation-only-changed == 'false' }} + runs-on: ubuntu-latest + steps: + - name: Checkout Action (Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Debezium Server) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-server + path: server + + - uses: ./.github/actions/setup-java + + # GitHub actions seem to struggle returning actions/cache cache-hit + # Directly use the cache action here to control whether to fetch dependencies + - id: maven-cache-check + 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') }} + + # This step is responsible for pulling down artifacts + # Unfortunately due to the nature of how some of the maven workflows work, the only reliable way + # to guarantee fully seeding the maven cache is to run a full build. This step does not execute + # tests, formatting, checkstyle, nor import sorts. + # + # This check is conditioned so that if the cache-key was not found, we will execute this step. + # If the cache-key was found, this means we cannot update the cache and therefore we should + # not need to explicitly run this step. This should improve response of format/checkstyle + # errors to users faster. + # + # This job also explicitly excludes the "debezium-microbenchmark-oracle" module temporarily. + # There is a dependency on xstream.jar for this module that should be fixed and made to not + # be required so that the module can be built on GitHub Actions. + - name: Download dependencies (Core) + if: steps.maven-cache-check.outputs.cache-hit != 'true' + run: > + ./mvnw -B -ntp clean install -f core/pom.xml + -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 + + - name: Download dependencies (Debezium Server) + if: steps.maven-cache-check.outputs.cache-hit != 'true' + run: > + ./server/mvnw -B -ntp clean install -f server/pom.xml + -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 + + # Approx 1m + check_style: + name: "Checkstyle and Formatting" + needs: [ build_cache ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/checkstyle-format + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + + # Approx 40m each + build_mongodb: + strategy: + # Run each MongoDB job sequentially + max-parallel: 1 + matrix: + version-mongo-server: [ "5.0", "7.0" ] + fail-fast: false + name: "MongoDB ${{ matrix.version-mongo-server }}" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-mongodb + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + version-mongo-server: ${{ matrix.version-mongo-server }} + + # Approx 40m each + build_mysql: + strategy: + # Run 2 matrix jobs concurrently + max-parallel: 2 + matrix: + profile: [ "mysql-ci", "mysql-ci-gtids", "mysql-ci-percona", "mysql-ci-ssl" ] + version-mysql-server: [ "8.0", "8.2" ] + fail-fast: false + name: "MySQL ${{ matrix.version-mysql-server }} - ${{ matrix.profile }}" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-mysql + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + version-mysql-server: ${{ matrix.version-mysql-server }} + profile: ${{ matrix.profile }} + + # Approx 40m each + build_mariadb: + strategy: + # Run each MariaDB job sequentially + max-parallel: 1 + matrix: + profile: [ "mysql-ci", "mysql-ci-gtids" ] + fail-fast: false + name: "MariaDB - ${{ matrix.profile }}" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-mariadb + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + profile: ${{ matrix.profile }} + + # Approx 40m each + build_postgres: + strategy: + # Run each PostgreSQL job sequentially + max-parallel: 1 + matrix: + profile: [ "assembly", "assembly,postgres-16,pgoutput-decoder" ] + fail-fast: false + name: "PostgreSQL - ${{ matrix.profile }}" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-postgres + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + profile: ${{ matrix.profile }} + + # Approx 1h 45m + build_sqlserver: + name: "SQL Server" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-sqlserver + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + + # Approx 6m + build_oracle: + name: "Oracle" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-oracle + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + + # Approx 2m + build_outbox: + name: "Quarkus Outbox Extension" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-outbox + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + + # Approx 5m + build_rest_extension: + name: "REST Extension" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-rest-extension + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + + # Approx 2m + build_schema_generator: + name: "Schema Generator" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-schema-generator + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + + # Approx 5m + build_debezium_testing: + name: "Testing Module" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-testing + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + + # Approx 3m + build_storage: + name: "Storage Module" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action + uses: actions/checkout@v4 + + - uses: ./.github/actions/build-debezium-storage + with: + maven-cache-key: maven-debezium-test-push-build-${{ hashFiles('**/pom.xml') }} + + # Approx 25m + build_cassandra: + name: "Cassandra" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Cassandra) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-cassandra + path: cassandra + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-cassandra + with: + path-core: core + path-cassandra: cassandra + + # Approx 1h + build_db2: + name: "Db2" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Db2) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-db2 + path: db2 + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-db2 + with: + path-core: core + path-db2: db2 + + # Approx 45m + build_informix: + name: "Informix" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Informix) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-informix + path: informix + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-informix + with: + path-core: core + path-informix: informix + + # Approx 20m + build_vitess: + name: "Vitess" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Vitess) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-vitess + path: vitess + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-vitess + with: + path-core: core + path-vitess: vitess + + # Approx 7m + build_spanner: + name: "Spanner" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Spanner) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-spanner + path: spanner + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-spanner + with: + path-core: core + path-spanner: spanner + + # Approx 1m + build_jdbc: + name: "JDBC" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (JDBC) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-connector-jdbc + path: jdbc + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-jdbc + with: + path-core: core + path-jdbc: jdbc + + # Approx 26m + build_server: + name: "Debezium Server" + needs: [ check_style, file_changes ] + runs-on: ubuntu-latest + steps: + - name: Checkout Action (Debezium Core) + uses: actions/checkout@v4 + with: + path: core + + - name: Checkout Action (Server) + uses: actions/checkout@v4 + with: + repository: debezium/debezium-server + path: server + + - uses: ./core/.github/actions/setup-java + + - uses: ./core/.github/actions/maven-cache + with: + # We specifically only use the hash of the pom files from the core repository + key: maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }} + + - uses: ./core/.github/actions/build-debezium-server + with: + path-core: core + path-server: server + + + diff --git a/.github/workflows/debezium-workflow.yml b/.github/workflows/debezium-workflow.yml deleted file mode 100644 index 51822310f..000000000 --- a/.github/workflows/debezium-workflow.yml +++ /dev/null @@ -1,1112 +0,0 @@ -name: Build Debezium - -on: - push: - branches: - - main - - 1.* - - 2.* - pull_request: - branches: - - main - - 1.* - - 2.* - -env: - MAVEN_FULL_BUILD_PROJECTS: "\\!debezium-microbenchmark-oracle" - -jobs: - # This job is responsible for inspecting the changes in the repository and setting specific output variables - # that subsequent jobs can use to determine whether a particular job should be skipped or included. - file_changes: - name: "Detect repository changes" - runs-on: ubuntu-latest - outputs: - common-changed: ${{ steps.changed-files-common.outputs.any_changed }} - mongodb-changed: ${{ steps.changed-files-mongodb.outputs.any_changed }} - mysql-changed: ${{ steps.changed-files-mysql.outputs.any_changed }} - postgresql-changed: ${{ steps.changed-files-postgresql.outputs.any_changed }} - oracle-changed: ${{ steps.changed-files-oracle.outputs.any_changed }} - sqlserver-changed: ${{ steps.changed-files-sqlserver.outputs.any_changed }} - outbox-changed: ${{ steps.changed-files-outbox.outputs.any_changed }} - rest-extension-changed: ${{ steps.changed-files-rest-extension.outputs.any_changed }} - schema-generator-changed: ${{ steps.changed-files-schema-generator.outputs.any_changed }} - debezium-testing-changed: ${{ steps.changed-files-debezium-testing.outputs.any_changed }} - mysql-ddl-parser-changed: ${{ steps.changed-files-mysql-ddl-parser.outputs.any_changed }} - oracle-ddl-parser-changed: ${{ steps.changed-files-oracle-ddl-parser.outputs.any_changed }} - documentation-only-changed: ${{ steps.changed-files-documentation.outputs.only_changed}} - storage-only-changed: ${{ steps.changed-files-storage.outputs.only_changed}} - steps: - - name: Checkout Action - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Get modified files (Common) - id: changed-files-common - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - support/checkstyle/** - debezium-api/** - debezium-assembly-descriptors/** - debezium-core/** - debezium-embedded/** - debezium-revapi/** - debezium-ide-configs/** - debezium-parent/pom.xml - debezium-bom/pom.xml - debezium-storage/** - pom.xml - .github/workflows/debezium-workflow.yml - - - name: Get modified files (MongoDB) - id: changed-files-mongodb - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-connector-mongodb/** - - - name: Get modified files (MySQL) - id: changed-files-mysql - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-connector-mysql/** - - - name: Get modified files (PostgreSQL) - id: changed-files-postgresql - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-connector-postgres/** - - - name: Get modified files (Oracle) - id: changed-files-oracle - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-connector-oracle/** - - - name: Get modified files (SQL Server) - id: changed-files-sqlserver - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-connector-sqlserver/** - - - name: Get modified files (Quarkus Outbox) - id: changed-files-outbox - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-quarkus-outbox/** - - - name: Get modified files (REST Extension) - id: changed-files-rest-extension - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-connect-rest-extension/** - support/checkstyle/** - debezium-parent/pom.xml - debezium-bom/pom.xml - pom.xml - .github/workflows/debezium-workflow.yml - - - name: Get modified files (Schema Generator) - id: changed-files-schema-generator - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-schema-generator/** - support/checkstyle/** - debezium-parent/pom.xml - debezium-bom/pom.xml - pom.xml - .github/workflows/debezium-workflow.yml - - - name: Get modified files (Debezium Testing) - id: changed-files-debezium-testing - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-testing/** - - - name: Get modified files (MySQL DDL parser) - id: changed-files-mysql-ddl-parser - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/mysql/** - debezium-ddl-parser/src/main/java/io/debezium/antlr/** - debezium-ddl-parser/src/test/resources/mysql/examples/** - - - name: Get modified files (Oracle DDL parser) - id: changed-files-oracle-ddl-parser - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/oracle/** - debezium-ddl-parser/src/main/java/io/debezium/antlr/** - debezium-ddl-parser/src/main/java/io/debezium/ddl/parser/oracle/** - debezium-ddl-parser/src/test/resources/oracle/examples/** - - - name: Get modified files (Documentation) - id: changed-files-documentation - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - documentation/** - - - name: Get modified files (Storage) - id: changed-files-storage - uses: tj-actions/changed-files@v42.0.5 - with: - files: | - debezium-storage/** - - build_cache: - name: "Dependency Cache" - needs: [file_changes] - if: ${{ needs.file_changes.outputs.documentation-only-changed == 'false' }} - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - id: maven-cache-check - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - # This step is responsible for pulling down artifacts - # Unfortunately due to the nature of how some of the maven workflows work, the only reliable way - # to guarantee fully seeding the maven cache is to run a full build. This step does not execute - # tests, formatting, checkstyle, nor import sorts. - # - # This check is conditioned so that if the cache-key was not found, we will execute this step. - # If the cache-key was found, this means we cannot update the cache and therefore we should - # not need to explicitly run this step. This should improve response of format/checkstyle - # errors to users faster. - # - # This job also explicitly excludes the "debezium-microbenchmark-oracle" module temporarily. - # There is a dependency on xstream.jar for this module that should be fixed and made to not - # be required so that the module can be built on GitHub Actions. - - name: Download dependencies - if: steps.maven-cache-check.outputs.cache-hit != 'true' - 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 - - check_style: - name: "Checkstyle and Formatting" - needs: [build_cache] - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - id: maven-cache-check - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - # Since we do a complete build conditionally above, we should always either be able to rely on the - # build step to have installed all needed artifacts or the artifacts that exist from a prior run - # in order to satisfy dependencies for the format, checkstyle, and import sort checks. If the - # dependencies change, a new cache should be generated and a full build step executed, so this - # should always work successfully. - - name: Checkstyle, Formatting, and Import Order Checks - run: > - ./mvnw -B -ntp process-sources checkstyle:checkstyle - -pl ${{ env.MAVEN_FULL_BUILD_PROJECTS }} - -Dformat.formatter.goal=validate - -Dformat.imports.goal=check - -Dorg.slf4j.simpleLogger.showDateTime=true - -Dorg.slf4j.simpleLogger.dateTimeFormat="YYYY-MM-DD HH:mm:ss,SSS" - - build_mongodb: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.mongodb-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} - name: "MongoDB" - runs-on: ubuntu-latest - strategy: - matrix: - version-mongo-server: ["5.0", "6.0", "7.0"] - fail-fast: false - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - - name: Build Debezium Connector MongoDB (Mode ${{ matrix.capture-mode }}) - run: > - ./mvnw clean install -B -pl debezium-connector-mongodb -am -Passembly - -Dcheckstyle.skip=true - -Dformat.skip=true - -Drevapi.skip - -Dversion.mongo.server=${{ matrix.version-mongo-server }} - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - -DfailFlakyTests=false - - build_mysql_8_0: - needs: [ check_style, file_changes ] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.mysql-changed == 'true' || needs.file_changes.outputs.mysql-ddl-parser-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} - strategy: - fail-fast: false - matrix: - profile: [ 'mysql-ci', 'mysql-ci-gtids', 'mysql-ci-percona', 'mysql-ci-ssl' ] - name: "MySQL 8.0 (${{ matrix.profile }})" - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - - name: Build Debezium Connector MySQL - run: > - ./mvnw clean install -B -pl debezium-connector-mysql -am -P${{ matrix.profile }} - -Dversion.mysql.server=8.0 - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - -DfailFlakyTests=false - - build_mysql: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.mysql-changed == 'true' || needs.file_changes.outputs.mysql-ddl-parser-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} - strategy: - fail-fast: false - matrix: - profile: [ 'mysql-ci', 'mysql-ci-gtids', 'mysql-ci-percona', 'mysql-ci-ssl' ] - name: "MySQL (${{ matrix.profile }})" - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - - name: Build Debezium Connector MySQL - run: > - ./mvnw clean install -B -pl debezium-connector-mysql -am -P${{ matrix.profile }} - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - -DfailFlakyTests=false - - build_mariadb: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.mysql-changed == 'true' || needs.file_changes.outputs.mysql-ddl-parser-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} - strategy: - fail-fast: false - matrix: - profile: [ 'mysql-ci', 'mysql-ci-gtids' ] - name: "MariaDB (${{ matrix.profile }})" - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - - name: Build Debezium Connector MySQL for MariaDB - # We specifically exclude the assembly profile for now as the MariaDB integration is still - # ongoing for GTID and therefore this simply runs the tests like non-assembly builds but - # utilizes the MariaDB database rather than MySQL at this time. It also gives us a chance - # to see how changes react to MariaDB as they're contributed. - run: > - ./mvnw clean install -B -pl debezium-connector-mysql -am -Pmariadb,${{ matrix.profile }} - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - -DfailFlakyTests=false - - build_postgresql: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.postgresql-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} - name: "PostgreSQL" - runs-on: ubuntu-latest - strategy: - matrix: - postgres-plugin: ["assembly", "assembly,postgres-16,pgoutput-decoder"] - fail-fast: false - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - - name: Build Debezium Connector PostgreSQL (${{ matrix.postgres-plugin }}) - run: > - ./mvnw clean install -B -pl debezium-connector-postgres -am -P${{ matrix.postgres-plugin }} - -Ddebezium.test.records.waittime=5 - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - -DfailFlakyTests=false - - build_oracle: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.oracle-changed == 'true' || needs.file_changes.outputs.oracle-ddl-parser-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} - name: "Oracle" - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - # We explicitly do not run the integration tests in this step as it's designed for pull requests only - # Integration tests can only be run against pushes to the repository for secret access - - name: Build Debezium Connector Oracle (PR) - if: ${{ github.event_name == 'pull_request' }} - run: > - ./mvnw clean install -B -pl debezium-connector-oracle -am - -DskipITs=true - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - -DfailFlakyTests=false - - build_sqlserver: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.sqlserver-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} - name: "SQL Server" - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - - name: Build Debezium Connector SQL Server - run: > - ./mvnw clean install -B -pl debezium-connector-sqlserver -am -Passembly - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - -Ddebezium.test.records.waittime=10 - -DfailFlakyTests=false - - build_outbox: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.outbox-changed == 'true' }} - name: "Quarkus Outbox" - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - - name: Build Quarkus Outbox - run: > - ./mvnw clean install -B -pl :debezium-quarkus-outbox -am -amd -Passembly - -Dcheckstyle.skip=true - -Dformat.skip=true - -Drevapi.skip - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - build_rest_extension: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.rest-extension-changed == 'true' }} - name: "REST Extension" - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - - name: Build Connect REST Extension - run: > - ./mvnw clean install -B -pl debezium-connect-rest-extension -am - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - build_schema_generator: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }} - name: "Schema Generator" - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - - name: Build Schema Generator - run: > - ./mvnw clean install -B -pl debezium-schema-generator -am - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - build_debezium_testing: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.debezium-testing-changed == 'true' }} - name: "Debezium Testing" - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - - name: Build Debezium Testing - run: > - ./mvnw clean install -B -pl debezium-testing,debezium-testing/debezium-testing-testcontainers -am -Passembly - -Dcheckstyle.skip=true - -Dformat.skip=true - -Drevapi.skip - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - -DfailFlakyTests=false - - build_storage: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.mysql-changed == 'true' || needs.file_changes.outputs.mysql-ddl-parser-changed == 'true' || needs.file_changes.outputs.storage-changed == 'true' }} - name: "Storage" - runs-on: ubuntu-latest - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('**/pom.xml') }} - - - name: Build Debezium (Core) - run: > - ./mvnw clean install - -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi - -am - -DskipTests=true - -DskipITs=true - -Dcheckstyle.skip=true - -Dformat.skip=true - -Drevapi.skip - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - - name: Build Debezium Connector MySQL - run: > - ./mvnw clean install -B -pl debezium-connector-mysql -Passembly - -DskipTests=true - -DskipITs=true - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - - name: Build Debezium Storage - run: > - ./mvnw clean install -B -f debezium-storage/pom.xml -Passembly - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - build_cassandra: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' }} - name: "Cassandra" - runs-on: ubuntu-latest - steps: - - name: Checkout Action (Core) - uses: actions/checkout@v4 - with: - path: core - - - name: Checkout Action (Cassandra) - uses: actions/checkout@v4 - with: - repository: debezium/debezium-connector-cassandra - path: cassandra - - # We explicitly use only the hash of the POM files from the core repository by default - # For this build, we do not care if there are or are not changes in the sibling repository since this - # job will only ever fire if there are changes in the common paths identified in the files_changed job. - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - - name: Build Debezium (Core) - run: > - ./core/mvnw clean install -f core/pom.xml - -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi - -am - -DskipTests=true - -DskipITs=true - -Dcheckstyle.skip=true - -Dformat.skip=true - -Drevapi.skip - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - - name: Install dse dependency artifacts (for Debezium Connector Cassandra) - working-directory: cassandra - run: sh ./install-artifacts.sh - - - name: Build Debezium Connector Cassandra - run: > - ./core/mvnw clean install -f cassandra/pom.xml -Passembly - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - build_db2: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' }} - name: "Db2" - runs-on: ubuntu-latest - steps: - - name: Checkout Action (Core) - uses: actions/checkout@v4 - with: - path: core - - - name: Checkout Action (Db2) - uses: actions/checkout@v4 - with: - repository: debezium/debezium-connector-db2 - path: db2 - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - # We explicitly use only the hash of the POM files from the core repository by default - # For this build, we do not care if there are or are not changes in the sibling repository since this - # job will only ever fire if there are changes in the common paths identified in the files_changed job. - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - - - name: Build Debezium (Core) - run: > - ./core/mvnw clean install -f core/pom.xml - -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi - -am - -DskipTests=true - -DskipITs=true - -Dcheckstyle.skip=true - -Dformat.skip=true - -Drevapi.skip - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - - name: Build Debezium Connector Db2 - run: > - ./core/mvnw clean install -f db2/pom.xml -Passembly - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - -DfailFlakyTests=false - - build_informix: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' }} - name: "Informix" - runs-on: ubuntu-latest - steps: - - name: Checkout Action (Core) - uses: actions/checkout@v4 - with: - path: core - - - name: Checkout Action (Db2) - uses: actions/checkout@v4 - with: - repository: debezium/debezium-connector-informix - path: informix - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - # We explicitly use only the hash of the POM files from the core repository by default - # For this build, we do not care if there are or are not changes in the sibling repository since this - # job will only ever fire if there are changes in the common paths identified in the files_changed job. - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - - - name: Build Debezium (Core) - run: > - ./core/mvnw clean install -f core/pom.xml - -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi - -am - -DskipTests=true - -DskipITs=true - -Dcheckstyle.skip=true - -Dformat.skip=true - -Drevapi.skip - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - - name: Build Debezium Connector Informix - run: > - ./informix/mvnw clean install -f informix/pom.xml -Passembly,informix14 - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - -Ddebezium.test.records.waittime=5 - -Ddebezium.test.records.waittime.after.nulls=5 - -DfailFlakyTests=false - - build_vitess: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' }} - name: "Vitess" - runs-on: ubuntu-latest - steps: - - name: Checkout Action (Core) - uses: actions/checkout@v4 - with: - path: core - - - name: Checkout Action (Vitess) - uses: actions/checkout@v4 - with: - repository: debezium/debezium-connector-vitess - path: vitess - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - # We explicitly use only the hash of the POM files from the core repository by default - # For this build, we do not care if there are or are not changes in the sibling repository since this - # job will only ever fire if there are changes in the common paths identified in the files_changed job. - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - - - name: Build Debezium (Core) - run: > - ./core/mvnw clean install -f core/pom.xml - -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi - -am - -DskipTests=true - -DskipITs=true - -Dcheckstyle.skip=true - -Dformat.skip=true - -Drevapi.skip - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - - name: Build Debezium Connector Vitess - run: > - ./core/mvnw clean install -f vitess/pom.xml -Passembly - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - build_spanner: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' }} - name: "Spanner" - runs-on: ubuntu-latest - steps: - - name: Checkout Action (Core) - uses: actions/checkout@v4 - with: - path: core - - - name: Checkout Action (Spanner) - uses: actions/checkout@v4 - with: - repository: debezium/debezium-connector-spanner - path: spanner - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - # We explicitly use only the hash of the POM files from the core repository by default - # For this build, we do not care if there are or are not changes in the sibling repository since this - # job will only ever fire if there are changes in the common paths identified in the files_changed job. - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - - - name: Build Debezium (Core) - run: > - ./core/mvnw clean install -f core/pom.xml - -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi - -am - -DskipTests=true - -DskipITs=true - -Dcheckstyle.skip=true - -Dformat.skip=true - -Drevapi.skip - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - - name: Build Debezium Connector Spanner - run: > - ./core/mvnw clean install -f spanner/pom.xml -Passembly - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - build_jdbc: - needs: [ check_style, file_changes ] - if: ${{ needs.file_changes.outputs.common-changed == 'true'}} - name: "JDBC" - runs-on: ubuntu-latest - steps: - - name: Checkout Action (Core) - uses: actions/checkout@v4 - with: - path: core - - - name: Checkout Action (JDBC) - uses: actions/checkout@v4 - with: - repository: debezium/debezium-connector-jdbc - path: jdbc - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - # We explicitly use only the hash of the POM files from the core repository by default - # For this build, we do not care if there are or are not changes in the sibling repository since this - # job will only ever fire if there are changes in the common paths identified in the files_changed job. - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - - - name: Build Debezium (Core) - run: > - ./core/mvnw clean install -f core/pom.xml - -pl debezium-assembly-descriptors,debezium-bom,debezium-core,debezium-embedded,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi - -am - -DskipTests=true - -DskipITs=true - -Dcheckstyle.skip=true - -Dformat.skip=true - -Drevapi.skip - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - - name: Build Debezium Connector JDBC - run: > - ./core/mvnw clean install -f jdbc/pom.xml -Passembly - -DskipITs=true - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - build_debezium_server: - needs: [check_style, file_changes] - if: ${{ needs.file_changes.outputs.common-changed == 'true' }} - name: "Debezium Server" - runs-on: ubuntu-latest - steps: - - name: Checkout Action (Core) - uses: actions/checkout@v4 - with: - path: core - - - name: Checkout Action (Debezium Server) - uses: actions/checkout@v4 - with: - repository: debezium/debezium-server - path: server - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - # We explicitly use only the hash of the POM files from the core repository by default - # For this build, we do not care if there are or are not changes in the sibling repository since this - # job will only ever fire if there are changes in the common paths identified in the files_changed job. - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - restore-keys: | - maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }} - - - name: Build Debezium (Core) - run: > - ./core/mvnw clean install -f core/pom.xml - -DskipTests=true - -DskipITs=true - -Dcheckstyle.skip=true - -Dformat.skip=true - -Drevapi.skip - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - - name: Build Debezium Server - run: > - ./core/mvnw clean install -fae -f server/pom.xml -Passembly - -Dcheckstyle.skip=true - -Dformat.skip=true - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - -Dmaven.wagon.http.pool=false - -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - -DskipNonCore diff --git a/.github/workflows/oracle-workflow-test.yml b/.github/workflows/oracle-workflow-test.yml deleted file mode 100644 index 8a9d2d133..000000000 --- a/.github/workflows/oracle-workflow-test.yml +++ /dev/null @@ -1,180 +0,0 @@ -name: Build and Test Oracle Connector - -on: - push: - branches: - - main - - 1.* - - 2.* - paths: - - 'support/checkstyle/**' - - 'debezium-api/**' - - 'debezium-ddl-parser/**' - - 'debezium-assembly-descriptors/**' - - 'debezium-core/**' - - 'debezium-embedded/**' - - 'debezium-connector-oracle/**' - - 'debezium-parent/pom.xml' - - 'debezium-bom/pom.xml' - - 'pom.xml' - - '.github/workflows/oracle-workflow-test.yml' - pull_request: - branches: - - main - - 1.* - - 2.* - paths: - - 'support/checkstyle/**' - - 'debezium-api/**' - - 'debezium-ddl-parser/**' - - 'debezium-assembly-descriptors/**' - - 'debezium-core/**' - - 'debezium-embedded/**' - - 'debezium-connector-oracle/**' - - 'debezium-parent/pom.xml' - - 'debezium-bom/pom.xml' - - 'pom.xml' - - '.github/workflows/oracle-workflow-test.yml' - -jobs: - check: - name: Check Pull-Secrets - runs-on: ubuntu-latest - outputs: - HAS_QUAY_IO: ${{ steps.skip.outputs.HAS_QUAY_IO }} - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Check if author has Quay.io credentials - id: skip - env: - QUAY_IO_USERNAME: ${{ secrets.QUAY_IO_USERNAME }} - QUAY_IO_PASSWORD: ${{ secrets.QUAY_IO_PASSWORD }} - run: | - if [[ $QUAY_IO_USERNAME == '' ]] && [[ $QUAY_IO_PASSWORD == '' ]]; then - echo "HAS_QUAY_IO=false" >> $GITHUB_OUTPUT - else - echo "HAS_QUAY_IO=true" >> $GITHUB_OUTPUT - fi - - test-connector: - name: Oracle Connector - runs-on: ubuntu-latest - needs: [check] - if: ${{ needs.check.outputs.HAS_QUAY_IO == 'true' }} - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Get Date - id: get-date - run: | - echo "date=$(/bin/date -u "+%Y-%m")" >> $GITHUB_OUTPUT - shell: bash - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - # This workflow uses its own dependency cache rather than the main debezium workflow cache because - # we explicitly want to trigger this build on pushes separate from the other workflow. - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - # refresh cache every month to avoid unlimited growth - # we do not explicitly base this on POM changes since we are explicitly targeting a single connector - # and the likelihood that lots of dependencies will change that impacts Oracle is significantly low - # compared to other parts of Debezium that rely on frameworks such as Quarkus. - key: maven-oracle-${{ steps.get-date.outputs.date }} - restore-keys: | - maven-oracle-${{ steps.get-date.outputs.date }} - - - name: Build and Install Debezium dependencies - run: > - ./mvnw clean install -pl debezium-bom,debezium-core,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi -am - -DskipTests=true - -DskipITs=true - -Dformat.formatter.goal=validate - -Dformat.imports.goal=check - -Dhttp.keepAlive=false - -Dmaven.wagon.http.pool=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - - name: Build and Test Debezium Connector Oracle LogMiner - env: - QUAY_IO_USERNAME: ${{ secrets.QUAY_IO_USERNAME }} - QUAY_IO_PASSWORD: ${{ secrets.QUAY_IO_PASSWORD }} - run: > - ./mvnw clean install -B -pl debezium-connector-oracle -am -Pinfinispan-buffer,oracle-docker,oracle-tests - -DskipITs=true - -Ddocker.username="$QUAY_IO_USERNAME" - -Ddocker.password="$QUAY_IO_PASSWORD" - -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 - - # A GitHub worker only has so much space and currently when this stage of the job runs concurrently with the - # "test-connector" stage, we are facing a worker out of space problem. To attempt to combat this issue, the - # REST extension tests will run sequentially after the "test-connector" stage has concluded. - test-rest-extension: - name: Oracle Connect REST Extension - runs-on: ubuntu-latest - needs: [check, test-connector] - if: ${{ needs.check.outputs.HAS_QUAY_IO == 'true' }} - steps: - - name: Checkout Action - uses: actions/checkout@v4 - - - name: Get Date - id: get-date - run: | - echo "date=$(/bin/date -u "+%Y-%m")" >> $GITHUB_OUTPUT - shell: bash - - - name: Set up Java 17 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: 17 - - # This workflow uses its own dependency cache rather than the main debezium workflow cache because - # we explicitly want to trigger this build on pushes separate from the other workflow. - - name: Cache Maven Repository - uses: actions/cache@v4 - with: - path: ~/.m2/repository - # refresh cache every month to avoid unlimited growth - # we do not explicitly base this on POM changes since we are explicitly targeting a single connector - # and the likelihood that lots of dependencies will change that impacts Oracle is significantly low - # compared to other parts of Debezium that rely on frameworks such as Quarkus. - key: maven-oracle-${{ steps.get-date.outputs.date }} - restore-keys: | - maven-oracle-${{ steps.get-date.outputs.date }} - - - name: Build and Install Debezium dependencies - run: > - ./mvnw clean install -pl debezium-bom,debezium-core,:debezium-ide-configs,:debezium-checkstyle,:debezium-revapi -am - -DskipTests=true - -DskipITs=true - -Dformat.formatter.goal=validate - -Dformat.imports.goal=check - -Dhttp.keepAlive=false - -Dmaven.wagon.http.pool=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 - - - name: Build and Test Debezium Connector Oracle REST Extension - env: - QUAY_IO_USERNAME: ${{ secrets.QUAY_IO_USERNAME }} - QUAY_IO_PASSWORD: ${{ secrets.QUAY_IO_PASSWORD }} - run: > - ./mvnw clean install -B -pl debezium-connector-oracle -am -Poracle-tests,rest-assembly - -DskipITs=true - -Dregistry.username="$QUAY_IO_USERNAME" - -Dregistry.password="$QUAY_IO_PASSWORD" - -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