Skip to content

Rebase v3.2.0

Rebase v3.2.0 #1

name: Build Debezium (PR)
on:
pull_request:
branches:
- main
- 1.*
- 2.*
- 3.*
- 4.*
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:
ai-changed: ${{ steps.changed-files-ai.outputs.any_changed }}
openlineage-changed: ${{ steps.changed-files-openlineage.outputs.any_changed }}
common-changed: ${{ steps.changed-files-common.outputs.any_changed }}
mongodb-changed: ${{ steps.changed-files-mongodb.outputs.any_changed }}
mariadb-changed: ${{ steps.changed-files-mariadb.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 }}
jdbc-changed: ${{ steps.changed-files-jdbc.outputs.any_changed }}
outbox-changed: ${{ steps.changed-files-outbox.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 }}
debezium-testing-mongodb-changed: ${{ steps.changed-files-debezium-testing-mongodb.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 }}
mariadb-ddl-parser-changed: ${{ steps.changed-files-mariadb-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 }}
extensions-changed: ${{ steps.changed-files-extensions.outputs.any_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/[email protected]
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-pr.yml
- name: Get modified files (MongoDB)
id: changed-files-mongodb
uses: tj-actions/[email protected]
with:
files: |
debezium-sink/**
debezium-connector-mongodb/**
- name: Get modified files (MySQL)
id: changed-files-mysql
uses: tj-actions/[email protected]
with:
files: |
debezium-connector-mysql/**
debezium-connector-binlog/**
- name: Get modified files (MariaDB)
id: changed-files-mariadb
uses: tj-actions/[email protected]
with:
files: |
debezium-connector-mariadb/**
debezium-connector-binlog/**
- name: Get modified files (PostgreSQL)
id: changed-files-postgresql
uses: tj-actions/[email protected]
with:
files: |
debezium-connector-postgres/**
- name: Get modified files (Oracle)
id: changed-files-oracle
uses: tj-actions/[email protected]
with:
files: |
debezium-connector-oracle/**
- name: Get modified files (SQL Server)
id: changed-files-sqlserver
uses: tj-actions/[email protected]
with:
files: |
debezium-connector-sqlserver/**
- name: Get modified files (JDBC)
id: changed-files-jdbc
uses: tj-actions/[email protected]
with:
files: |
debezium-sink/**
debezium-connector-jdbc/**
- name: Get modified files (Quarkus Outbox)
id: changed-files-outbox
uses: tj-actions/[email protected]
with:
files: |
debezium-quarkus-outbox/**
debezium-quarkus-outbox-common/**
debezium-quarkus-outbox-reactive/**
- name: Get modified files (Schema Generator)
id: changed-files-schema-generator
uses: tj-actions/[email protected]
with:
files: |
debezium-schema-generator/**
- name: Get modified files (Debezium Testing)
id: changed-files-debezium-testing
uses: tj-actions/[email protected]
with:
files: |
debezium-testing/**
- name: Get modified files (Debezium Testing MongoDB)
id: changed-files-debezium-testing-mongodb
uses: tj-actions/[email protected]
with:
files: |
debezium-testing/**/MongoDb*.java
- name: Get modified files (MySQL DDL parser)
id: changed-files-mysql-ddl-parser
uses: tj-actions/[email protected]
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 (MariaDB DDL parser)
id: changed-files-mariadb-ddl-parser
uses: tj-actions/[email protected]
with:
files: |
debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/mariadb/**
debezium-ddl-parser/src/main/java/io/debezium/antlr/**
debezium-ddl-parser/src/test/resources/mariadb/examples/**
- name: Get modified files (Oracle DDL parser)
id: changed-files-oracle-ddl-parser
uses: tj-actions/[email protected]
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/[email protected]
with:
files: |
documentation/**
- name: Get modified files (Storage)
id: changed-files-storage
uses: tj-actions/[email protected]
with:
files: |
debezium-storage/**
- name: Get modified files (Quarkus Extensions)
id: changed-files-extensions
uses: tj-actions/[email protected]
with:
files: |
quarkus-debezium-parent/**
- name: Get modified files (AI)
id: changed-files-ai
uses: tj-actions/[email protected]
with:
files: |
debezium-ai/**
- name: Get modified files (OpenLineage)
id: changed-files-openlineage
uses: tj-actions/[email protected]
with:
files: |
debezium-openlineage/**
# 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
ref: ${{ github.event.pull_request.base.ref }}
- 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') }}
# Caches should be restored based on a logical order to minimize the build and test
# execution time. Here the logic is as follows:
# 1. Restore this PR's cache if the PR has previously been built
# 2. Restore the latest main cache if the core pom has not changed
# 3. Restore the latest main cache available
# This should minimize the download time required for updating dependencies
restore-keys: |
maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }}
maven-debezium-test-push-build-${{ hashFiles('core/**/pom.xml') }}
maven-debezium-test-push-build-
# 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'
# There are some corner cases where dependencies change and core no longer defines the
# dependency; however Debezium Server due to checking out main, may still refer to it.
# In this case, if the artifact fetch fails, we shouldn't fail the job. Fixing the
# dependency in the Debezium Server repository with the same Jira issue tag as the
# main repository's PR will run the build based on the PR changes in main, and will
# allow validating the Debezium Server build separately.
continue-on-error: 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') }}
########################################################################################
## CONNECTORS
## Please define callable workflows here in alphabetical connector name order.
########################################################################################
build_cassandra:
name: Cassandra
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 (Core)
uses: actions/checkout@v4
with:
path: core
- name: Checkout Action (Cassandra)
uses: actions/checkout@v4
with:
repository: debezium/debezium-connector-cassandra
path: cassandra
ref: ${{ github.event.pull_request.base.ref }}
- uses: ./core/.github/actions/setup-java
- uses: ./core/.github/actions/maven-cache
with:
key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }}
- uses: ./core/.github/actions/build-debezium-cassandra
with:
path-core: core
path-cassandra: cassandra
build_db2:
name: Db2
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 (Core)
uses: actions/checkout@v4
with:
path: core
- name: Checkout Action (Db2)
uses: actions/checkout@v4
with:
repository: debezium/debezium-connector-db2
path: db2
ref: ${{ github.event.pull_request.base.ref }}
- uses: ./core/.github/actions/setup-java
- uses: ./core/.github/actions/maven-cache
with:
key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }}
- uses: ./core/.github/actions/build-debezium-db2
with:
path-core: core
path-db2: db2
build_ibmi:
name: IBMi
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 (Core)
uses: actions/checkout@v4
with:
path: core
- name: Checkout Action (IBMi)
uses: actions/checkout@v4
with:
repository: debezium/debezium-connector-ibmi
path: ibmi
ref: ${{ github.event.pull_request.base.ref }}
- uses: ./core/.github/actions/setup-java
- uses: ./core/.github/actions/maven-cache
with:
key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }}
- uses: ./core/.github/actions/build-debezium-ibmi
with:
path-core: core
path-ibmi: ibmi
build_informix:
name: Informix
needs: [ check_style, file_changes ]
if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.debezium-testing-changed == 'true' }}
uses: ./.github/workflows/connector-informix-workflow.yml
with:
maven-cache-key: maven-debezium-test-build
# Needed because sibling repository
checkout-ref: ${{ github.event.pull_request.base.ref }}
build_jdbc:
name: JDBC
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.mariadb-changed == 'true' || needs.file_changes.outputs.postgresql-changed == 'true' || needs.file_changes.outputs.sqlserver-changed == 'true' || needs.file_changes.outputs.sqlserver-changed == 'true' || needs.file_changes.outputs.db2-changed == 'true' || needs.file_changes.outputs.jdbc-changed == 'true' || needs.file_changes.outputs.debezium-testing-changed == 'true' }}
uses: ./.github/workflows/connector-jdbc-workflow.yml
with:
maven-cache-key: maven-debezium-test-build
build_mariadb:
name: MariaDB
needs: [ check_style, file_changes ]
if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.mariadb-changed == 'true' || needs.file_changes.outputs.mariadb-ddl-parser-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' || needs.file_changes.outputs.debezium-testing-changed == 'true' }}
uses: ./.github/workflows/connector-mariadb-workflow.yml
with:
maven-cache-key: maven-debezium-test-build
build_mongodb:
name: 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.debezium-testing-mongodb-changed == 'true' || needs.file_changes.outputs.schema-generator-changed == 'true' }}
uses: ./.github/workflows/connector-mongodb-workflow.yml
with:
maven-cache-key: maven-debezium-test-build
build_mysql:
name: 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' || needs.file_changes.outputs.debezium-testing-changed == 'true' }}
uses: ./.github/workflows/connector-mysql-workflow.yml
with:
maven-cache-key: maven-debezium-test-build
build_oracle:
name: 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' || needs.file_changes.outputs.debezium-testing-changed == 'true' }}
uses: ./.github/workflows/connector-oracle-workflow.yml
with:
maven-cache-key: maven-debezium-test-build
build_postgresql:
name: 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' }}
uses: ./.github/workflows/connector-postgresql-workflow.yml
with:
maven-cache-key: maven-debezium-test-build
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 (Core)
uses: actions/checkout@v4
- uses: ./.github/actions/build-debezium-sqlserver
with:
maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }}
build_spanner:
name: Spanner
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 (Core)
uses: actions/checkout@v4
with:
path: core
- name: Checkout Action (Spanner)
uses: actions/checkout@v4
with:
repository: debezium/debezium-connector-spanner
path: spanner
ref: ${{ github.event.pull_request.base.ref }}
- uses: ./core/.github/actions/setup-java
- uses: ./core/.github/actions/maven-cache
with:
key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }}
- uses: ./core/.github/actions/build-debezium-spanner
with:
path-core: core
path-spanner: spanner
build_vitess:
name: Vitess
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 (Core)
uses: actions/checkout@v4
with:
path: core
- name: Checkout Action (Vitess)
uses: actions/checkout@v4
with:
repository: debezium/debezium-connector-vitess
path: vitess
ref: ${{ github.event.pull_request.base.ref }}
- uses: ./core/.github/actions/setup-java
- uses: ./core/.github/actions/maven-cache
with:
key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }}
- uses: ./core/.github/actions/build-debezium-vitess
with:
path-core: core
path-vitess: vitess
########################################################################################
## NON-CONNECTORS
## Please define callable workflows here in alphabetical item name order.
########################################################################################
apicurio_checks:
name: "Apicurio checks"
needs: [ check_style, file_changes ]
if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.mongodb-changed == 'true' || needs.file_changes.outputs.mysql-changed == 'true' || needs.file_changes.outputs.postgresql-changed == 'true' || needs.file_changes.outputs.debezium-testing-changed == 'true' || needs.file_changes.outputs.mysql-ddl-parser-changed == 'true' }}
uses: ./.github/workflows/apicurio-check-workflow.yml
with:
maven-cache-key: maven-debezium-test-build
build_ai:
name: "Debezium AI module"
needs: [ check_style, file_changes ]
runs-on: ubuntu-latest
if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.ai-changed == 'true' }}
steps:
- name: Checkout Action
uses: actions/checkout@v4
- uses: ./.github/actions/build-debezium-ai
with:
maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }}
build_openlineage:
name: "Debezium OpenLineage module"
needs: [ check_style, file_changes ]
runs-on: ubuntu-latest
if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.openlineage-changed == 'true' }}
steps:
- name: Checkout Action
uses: actions/checkout@v4
- uses: ./.github/actions/build-debezium-openlineage
with:
maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }}
build_extensions:
name: "Debezium Quarkus Extensions"
needs: [ check_style, file_changes ]
runs-on: ubuntu-latest
if: ${{ needs.file_changes.outputs.common-changed == 'true' || needs.file_changes.outputs.extensions-changed == 'true' }}
steps:
- name: Checkout Action
uses: actions/checkout@v4
- uses: ./.github/actions/build-quarkus-extensions
with:
maven-cache-key: maven-debezium-test-build-${{ hashFiles('**/pom.xml') }}
build_server:
name: "Debezium Server"
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' || needs.file_changes.outputs.mysql-ddl-parser-changed == 'true' }}
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
ref: ${{ github.event.pull_request.base.ref }}
- uses: ./core/.github/actions/setup-java
- uses: ./core/.github/actions/maven-cache
with:
key: maven-debezium-test-build-${{ hashFiles('core/**/pom.xml') }}
- uses: ./core/.github/actions/build-debezium-server
with:
path-core: core
path-server: server
build_outbox:
name: "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') }}
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') }}
build_storage:
name: "Storage"
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-only-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') }}
build_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') }}