All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- CI now builds a GraalVM native binary on every PR and runs a smoke test against each subcommand (
generate,compare,compare-files), so native-image regressions are caught before release rather than at tag time. See #98. - CI build and native-binary smoke jobs are now skipped on PRs that touch only Markdown files, while Gitleaks and Snyk continue to run. See #98.
- CI now cancels in-flight runs on the same branch / PR when a new commit is pushed, so only the latest commit's checks consume runner minutes (pushes to
mainare exempt and always run to completion). See #98.
- Removed the
orb/directory (CircleCI orb test fixtures: SQL migrations and pre-generated Avro schemas). We ended up not using these fixtures — they were never wired into any code, build script, CI workflow, or test in this repository.
- Native image startup crash (
ExceptionInInitializerError) introduced by the Debezium 3.2+ OpenLineage integration:io/debezium/openlineage/build.versionis now registered as a native image resource so thatProperties.load()can read it at runtime. Thank you to @adamkaplan0 for the fix!
Note
In an excess of caution, we are bumping the minor version of Skemium to match the bumping in minor version of Debezium. As Debezium is a core dependency here, we prefer to signal this change more clearly than with a patch version bump. BUT, in our testing though, not breaking change has surfaced in Skemium.
- Bumped Debezium from
3.2.7.Finalto3.4.3.Final. - Bumped grouped Java dependencies: JUnit BOM
5.14.3→5.14.4,lz4-java1.10.4→1.11.0,slf4j-api2.0.17→2.0.18,commons-codec1.21.0→1.22.0, and Jackson modules (jackson-core,jackson-databind,jackson-datatype-jsr310,jackson-dataformat-avro)2.21.2→2.21.3. - Bumped GitHub Actions
softprops/action-gh-releasefrom2to3in the release workflows. - Updated
CODEOWNERS(PRODSEC-10215).
- Upgraded
org.postgresql:postgresqlto42.7.11to address security vulnerabilities.
- Taskfile task
compileto compile the project without running tests. - Taskfile tasks
deps.show-patch-updatesanddeps.show-minor-updatesto inspect available dependency updates.
- Bumped Debezium from
3.0.8.Finalto3.2.7.Final, along with other dependency updates.
- Compatibility with Debezium 3.2.x: the PostgreSQL connector no longer populates the catalog in
TableId, so the database name is now explicitly prepended to formdatabase.schema.tableidentifiers. CatalogSchemaAndTableTopicNamingStrategynow handles anullcatalog gracefully instead of producingnull.schema.tabletopic names.- Corrected
maven-native-pluginversion (0.11.4is the actual latest, not0.11.5).
- Corrected
maven-native-pluginversion to0.11.4(the actual latest release).
- Bumped all dependencies to their latest compatible versions.
- Configured Dependabot to group dependency PRs into a single PR per ecosystem.
- Added
AGENTS.mdfor AI-assisted development context.
- Upgraded
jackson-coreto2.21.1to address a security vulnerability.
- Bumped Jackson to
2.21.0, PostgreSQL driver to42.7.9, Logback to1.5.25, andjackson-annotationsto2.21. - Dependabot configured to skip major version bumps and avoid running Gitleaks/Snyk CI on Dependabot PRs.
- CI release workflow updated to use latest supported
macosimages and to override (not append) release body across parallel jobs.
- Dependabot configuration for automated Maven and GitHub Actions dependency updates.
--include-schemaoption for thecompare-filescommand, allowing external Avro schema files to be included for type resolution during comparison. Thank you to @MantasSnyk for the contribution!
- Updated all Java dependencies and CI workflow actions to latest versions.
- Addressed
lz4-javasecurity vulnerabilities (SNYK-JAVA-ORGLZ4-14151788andSNYK-JAVA-ORGLZ4-14219384).
- New
compare-filescommand to compare two individual.avscfiles for compatibility, with support for external type resolution. Thank you to @MantasSnyk for the contribution! --ci-modeflag for comparison commands: fails on any schema change (including compatible ones), table additions, or removals.- Schema equality checking with JSON normalization (sorts object keys and record fields by name before comparing).
- Testing schemas and migrations for the CircleCI orb. Thank you to @ramonr for the contribution!
- Refactored
ComparisonCommandintoBaseComparisonCommandto share logic betweencompareandcompare-files. - Updated release process documentation in
README.md.
- Restored Snyk CI integration after GitHub SARIF format changes.
- Upgraded
logback-classicto1.5.19to fixSNYK-JAVA-CHQOSLOGBACK-13169722.
- Upgraded
commons-compressto address vulnerabilitySNYK-JAVA-ORGAPACHECOMMONS-10734078.
Taskfile.ymlfor convenient project task management (task package,task clean, etc.).
- Tweaked logging levels, adding a conclusion message at
INFOlevel for each command.
- Upgraded
postgresqlandkafkadependencies to address security vulnerabilities (SNYK-JAVA-ORGPOSTGRESQL-10343494,SNYK-JAVA-ORGAPACHEKAFKA-10336719). Thank you to @snyk-io for the fix!
- The
--tablefilter option now supports theDB_SCHEMA.DB_TABLEformat (e.g.,public.artist) in addition to just table names.
- Typo in
README.md. Thank you to @SorooshDeveloper for the fix!
- Provided GraalVM reachability metadata hints for dynamically-loaded classes and resources, fixing native binary crashes at runtime.
- Compiled GraalVM native binaries with
-march=compatibilityto avoid CPU feature mismatches on different hardware (previously used-march=nativewhich hyper-optimised for the build machine).
linux-aarch64native binary to release artifacts.
comparecommand: compares two directories of generated Avro schemas for backward/forward/full compatibility.--outputoption for thecomparecommand to save results as a JSON file.-v|--verboseflag (repeatable) to control logging verbosity (defaultERROR, up toTRACE).-x|--exclude-columnoption for thegeneratecommand to exclude specific table columns.- Generation of key, value, and envelope Avro schemas (previously only value schemas were generated).
- Published Avro schema definitions for Skemium's own output formats (
schemas/*.avsc). - CI check to detect uncommitted schema file changes after tests.
- Refactored
AvroSchemaFiletoTableAvroSchemasfor clearer naming. - Refactored
CheckCompatibilityResulttoCompatibilityResult. checkCompatibilitynow returns a detailedRecordwith per-schema-type incompatibility lists.
- Initial release of Skemium.
generatecommand: connects to a PostgreSQL database, extracts table schemas, converts them to Avro, and saves to a directory.- PostgreSQL
TableSchemaFetcherimplementation using Debezium's schema extraction. CatalogSchemaAndTableTopicNamingStrategyfor<catalog>.<schema>.<table>topic/identifier naming.- Metadata file (
.skemium.meta.json) generation with VCS information, checksums, and CLI arguments. - SHA256 checksum validation on schema load.
- CI via GitHub Actions (Gitleaks, Snyk, build and test).
- Release workflows for uber-JAR and GraalVM native binaries (linux-x86_64, macos-x86_64, macos-aarch64).
- Test infrastructure using Testcontainers with the Chinook sample database.