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.
Warning
Breaking change. Some Avro schemas that Skemium accepted before are now rejected as invalid. See the first entry under Changed below, and bump with care.
- BREAKING: Bumped Avro from
1.12.1to1.12.2, which tightens schema parsing to match the Avro specification (AVRO-4176). A reference to a named type must now be written as a bare string ("items": "Issue"); the previously tolerated object form ("items": { "type": "Issue", "name": "issue" }) is rejected withA schema "type" MUST be a primitive type or one of "enum", "fixed", "record", "error", "array" or "map". This mostly affectscompare-files --include-schema, where types are resolved across multiple files. If your.avscfiles use the object form, rewrite those references to the bare string form. - Bumped Java dependencies:
commons-codec1.22.0→1.22.1jackson-core,jackson-databind,jackson-datatype-jsr310,jackson-dataformat-avro2.21.3→2.21.6jgit7.6.0.202603022253-r→7.7.1.202607240634-rkafka-connect-avro-converter7.9.5→7.9.9logback-classic1.5.32→1.5.38lz4-java1.11.0→1.11.2postgresql42.7.11→42.7.13
- Bumped GitHub Actions:
actions/checkoutv6→v7dorny/paths-filterv3→v4gitleaks/gitleaks-actionv2→v3
- 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. - CircleCI secrets-scanning and security-scan jobs now run with the
prodsec-orb-runtimecontext (PRODSEC-10638). See #116.
- 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.