Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
3c05a5b
chore(deps): bump moto from 5.1.10 to 5.1.11 (#873)
dependabot[bot] Aug 31, 2025
35803e4
fix : odcs excel export Error filling properties (#876)
dmaresma Sep 3, 2025
ece0d17
chore(deps): bump moto from 5.1.11 to 5.1.13 (#897)
dependabot[bot] Sep 22, 2025
9c36ffc
Fix markdown servers rendering (#887)
0xpugsley Sep 22, 2025
e3a5915
fix primaryKey support for dbt export (#898)
toshifumisuga Sep 24, 2025
04f9d21
chore: update dataContractSpecification to version 1.2.1
jochenchrist Sep 24, 2025
2b2b473
chore: update dataContractSpecification to version 1.2.1
jochenchrist Sep 24, 2025
b946d73
Fix: Import table tags from a ODCS v3 (#895)
MaxRuenz Sep 24, 2025
97719ef
chore: update dataContractSpecification to version 1.2.1
jochenchrist Sep 25, 2025
bc33be3
fix: fix dqx export format for table-level (#886)
Z01ASYBA Sep 26, 2025
2defd9a
feat: add quality checks for row count and duplicate values in data c…
jochenchrist Sep 28, 2025
b5c104b
Merge remote-tracking branch 'origin/main'
jochenchrist Sep 28, 2025
1a50660
Update README.md
jochenchrist Sep 28, 2025
e327e09
Disable failing test
jochenchrist Sep 28, 2025
e66c274
Merge remote-tracking branch 'origin/main'
jochenchrist Sep 28, 2025
92a19d3
docs: update installation instructions in README.md
simonharrer Oct 8, 2025
ffdc2e6
feat(BIG QUERY): Add support for BQ flexible schema in Data Contract …
PeteZ238 Oct 17, 2025
4235664
hotfix: import_from_source() as class method + deprecation warning on…
7MAXIME7-dev Oct 17, 2025
9929f1d
chore(deps): update typer requirement (#904)
dependabot[bot] Oct 17, 2025
b40f430
feat: #901 implement decimal support for databricks and spark testing…
Tyranwyn Oct 17, 2025
eb890f7
chore(deps): update databricks-sdk requirement from <0.64.0 to <0.68.…
dependabot[bot] Oct 17, 2025
17c129b
fix changelog (#900)
toshifumisuga Oct 17, 2025
c8782b0
Fix: Valid Field Constraints for date/integer/number (#893)
ystndr Oct 17, 2025
c333e84
initial (#875)
dmaresma Oct 17, 2025
bd3a237
Comment out failing test
jochenchrist Oct 17, 2025
3a96f1c
Remove linters. Closes #913 (#914)
jochenchrist Oct 17, 2025
874bfe2
chore(deps): update snowflake-connector-python[pandas] requirement (#…
dependabot[bot] Oct 17, 2025
26256ed
feat: enhance databricks connection with Unity Catalog using databric…
bmoreau8 Oct 17, 2025
a52594a
Update README.md
jochenchrist Oct 17, 2025
bf5822b
Restrict deployment to specific repository
jochenchrist Oct 17, 2025
ea58ab5
Import: Fallback to physicalType when logicalType is missing in ODCS
jochenchrist Oct 17, 2025
19148b6
Bump version to 0.10.36 and update changelog with Data Contract Speci…
jochenchrist Oct 17, 2025
3ade60e
Bump version to 0.10.36 and update changelog with Data Contract Speci…
jochenchrist Oct 17, 2025
a62f11f
chore(deps): update databricks-sql-connector requirement (#859)
dependabot[bot] Oct 18, 2025
16b1025
Update README.md
jochenchrist Oct 20, 2025
4cc107a
Update README.md
jochenchrist Oct 20, 2025
5d351cf
Oracle: Import contract from SQL file (#920)
tloist Oct 24, 2025
1192186
chore(deps): bump uvicorn from 0.35.0 to 0.38.0 (#918)
dependabot[bot] Oct 30, 2025
12afbd7
odcs v3 importer databricks nested arrays support (#906)
didipayson Oct 31, 2025
49dc9c8
chore(deps): update pydantic requirement (#917)
dependabot[bot] Oct 31, 2025
53e71ea
chore(deps): bump pymssql from 2.3.7 to 2.3.8 (#916)
dependabot[bot] Oct 31, 2025
3895762
Fix #922: validate the contract against the custom schema before conv…
YLibert Nov 2, 2025
ba550ed
chore(deps): update aiobotocore requirement (#915)
dependabot[bot] Nov 2, 2025
02b54af
Improve JSON Schema export with logical type options
jochenchrist Nov 2, 2025
84b8f74
Remove pre-commit usage section from README and update Ruff version i…
jochenchrist Nov 2, 2025
e6ffd29
add --debug for all commands
simonharrer Nov 3, 2025
9a006f7
ruff fixes
simonharrer Nov 3, 2025
90e3692
Release 0.10.37
simonharrer Nov 3, 2025
8c91388
Support Oracle DB
MarcoSteinke Nov 3, 2025
a746b76
Remove nested arrays support entry from changelog.
jochenchrist Nov 3, 2025
060ed5b
Oracle ODCS Contract Test Example (#933)
tloist Nov 4, 2025
90bca42
chore(deps-dev): bump pyiceberg from 0.9.1 to 0.10.0 (#928)
dependabot[bot] Nov 5, 2025
724b583
inject anchor href link id on schema.name or physcialName (#932)
dmaresma Nov 5, 2025
050ccd5
chore(deps-dev): update pre-commit requirement (#938)
dependabot[bot] Nov 10, 2025
c858171
Correct name of session token YAML key to match Soda expectations for…
jonaxonCUPA Nov 10, 2025
da16f7d
Bump version to 0.10.38 and update changelog with Oracle Database sup…
jochenchrist Nov 11, 2025
e2e8c87
Import composite primary keys from odcs (#931)
MaxRuenz Nov 11, 2025
77ceaa2
Update README.md
simonharrer Nov 12, 2025
3e3a91d
chore(deps-dev): update databricks-sdk requirement (#939)
dependabot[bot] Nov 12, 2025
58b5f72
Support entropy data env variables
simonharrer Nov 17, 2025
950a79a
Fix tests
simonharrer Nov 20, 2025
fb453cc
Fix tests
simonharrer Nov 20, 2025
49eb683
Oracle DB: Support Thick-Mode Workaround (#949)
tloist Nov 20, 2025
b3d571e
Bump version to 0.10.39 and update changelog with Oracle client direc…
jochenchrist Nov 20, 2025
f0f6083
Prepare for ODCS v3.1.0
jochenchrist Nov 24, 2025
279f216
added support for map logical type since it was missing (#952)
robert-altmiller Nov 25, 2025
297c49e
Prepare for ODCS v3.1.0
jochenchrist Nov 25, 2025
a252e5e
Update README.md
jochenchrist Nov 25, 2025
2560f15
Enable CORS for all origins in the API and update changelog
jochenchrist Nov 28, 2025
f071854
Add push-to-ECR workflow for multi-arch Docker images
jochenchrist Nov 28, 2025
99ee384
Configure Spark driver host and bind address for tests
jochenchrist Nov 28, 2025
572ed51
Configure Spark driver host and bind address for tests
jochenchrist Nov 28, 2025
9f9cca4
Update changelog with YAML date string fix for ODCS schema validation
jochenchrist Nov 28, 2025
4ecdd09
Reorganize `_SafeLoaderNoTimestamp` class in `odcs_v3_importer.py` an…
jochenchrist Nov 28, 2025
075de57
datacontract test should log the tested schema (resolves #963)
jochenchrist Dec 1, 2025
fe2b6fe
Support `${schema}` placeholder in SQL queries with optional server s…
jochenchrist Dec 1, 2025
4b1cd0f
Reorganize imports in `test_data_contract_checks.py` to maintain alph…
jochenchrist Dec 1, 2025
11690b8
Support `DATACONTRACT_SQLSERVER_DRIVER` for configuring SQL Server OD…
jochenchrist Dec 1, 2025
8fe193c
Export and Import Excel to (ODCS v3) YAML Bug Fixes (#956)
christianvanr Dec 1, 2025
48310ac
- Excel: Add Oracle server type support for Excel export/import (clos…
jochenchrist Dec 1, 2025
7b94068
fix(pydantic_converter.constant_field_annotation): match case for num…
DaniTot Dec 1, 2025
645583b
Excel: Add local/CSV server type support for Excel export/import (clo…
jochenchrist Dec 1, 2025
932f0cf
Fix protobuf export to file and make it not print to stdout (#951)
esselius Dec 1, 2025
7e5ea90
chore(deps-dev): bump avro from 1.12.0 to 1.12.1 (#946)
dependabot[bot] Dec 1, 2025
89c0d85
Protobuf import: Fix transitive imports across subdirectories (resolv…
jochenchrist Dec 1, 2025
c6adbaa
chore(deps-dev): bump fastapi from 0.116.1 to 0.121.2 (#945)
dependabot[bot] Dec 1, 2025
b59f7e3
Update Great Expectations export to use 1.x format
jochenchrist Dec 1, 2025
95d58df
chore(deps-dev): bump moto from 5.1.13 to 5.1.16 (#927)
dependabot[bot] Dec 1, 2025
857b482
The `breaking`, `changelog`, and `diff` commands are now deprecated a…
jochenchrist Dec 1, 2025
2e7bfd6
update CHANGELOG (#941)
didipayson Dec 2, 2025
cdc517f
Release 0.10.41
jochenchrist Dec 2, 2025
529b130
Strip 'v' prefix from GitHub ref in release workflow to match Docker …
jochenchrist Dec 4, 2025
dc5975a
V0.11.x (#975)
jochenchrist Dec 14, 2025
195ff65
fix(#972) Compatibility issue with DuckDB >= 1.4.0 (#973)
pierre-monnet Dec 14, 2025
46b775f
update readme
jochenchrist Dec 14, 2025
3cecc8e
chore(deps-dev): bump moto from 5.1.17 to 5.1.18 (#970)
dependabot[bot] Dec 15, 2025
22b9238
chore(deps-dev): update snowflake-connector-python[pandas] requiremen…
dependabot[bot] Dec 15, 2025
79fa2cb
chore(deps): update sqlglot requirement (#969)
dependabot[bot] Dec 15, 2025
072dd0b
chore(deps-dev): update pre-commit requirement (#968)
dependabot[bot] Dec 15, 2025
d7b3a01
chore(deps-dev): update databricks-sql-connector requirement (#967)
dependabot[bot] Dec 15, 2025
50af47d
Add Impala engine support for Soda integration (#965)
jaydeepray Dec 15, 2025
b2ee24a
Release 0.11.2
simonharrer Dec 15, 2025
e31f8ba
Fix schema evolution support for optional fields in CSV and Parquet f…
dwestheide Dec 16, 2025
a8c23c2
chore(deps): update pyspark requirement (#884)
dependabot[bot] Dec 16, 2025
480968b
Fix ODCS lint failing on optional relationship type field (#971)
jochenchrist Dec 17, 2025
ee306cb
Fix datacontract init to generate ODCS format (#984)
jochenchrist Dec 17, 2025
069da67
update readme
jochenchrist Dec 17, 2025
022db9f
fix(export-pydantic): generate decimal.Decimal type for decimals (#982)
yaghmaie Dec 17, 2025
452262e
fix unknow storageAccount member of Server in test azure cli (#995)
dmaresma Dec 31, 2025
585ee42
chore(deps-dev): bump rdflib from 7.0.0 to 7.5.0 (#991)
dependabot[bot] Dec 31, 2025
ab2bbdd
Make sure that column types are not inferred to VARCHAR (#1006)
dwestheide Jan 9, 2026
8d54ae8
fix BigQuery test failure for fields with FLOAT or BOOLEAN types by m…
amir-qasemi Jan 9, 2026
3b49912
init (#1001)
dmaresma Jan 10, 2026
4b27d89
chore(deps-dev): update aiobotocore requirement (#999)
dependabot[bot] Jan 10, 2026
1baeab6
chore(deps): update fastparquet requirement (#989)
dependabot[bot] Jan 10, 2026
bf38237
improve: add name to all typer commands (#985)
amir-qasemi Jan 10, 2026
1675c5b
chore(deps-dev): bump uvicorn from 0.38.0 to 0.40.0 (#990)
dependabot[bot] Jan 10, 2026
dad619c
Prepare release 0.11.3
jochenchrist Jan 10, 2026
ffa9cd3
chore(deps): update typer requirement (#998)
dependabot[bot] Jan 10, 2026
2c5beec
Automate release notes
jochenchrist Jan 11, 2026
4b46eb5
fix: spark exporter decimal precision/scale from customProperties or …
jochenchrist Jan 11, 2026
f81c3e5
chore(deps): update duckdb requirement (#997)
dependabot[bot] Jan 11, 2026
bab97de
fix: example field mapping for dcs importer (#992)
pierre-monnet Jan 11, 2026
1417453
fix: handle None schema/properties in ODCS HTML template (#971)
jochenchrist Jan 11, 2026
e1dff41
Update example contract for API
jochenchrist Jan 11, 2026
78eeb7d
Lower pyspark version requirement to 3.5.0 (#1013)
gkoenig Jan 12, 2026
3a44a1a
chore(deps-dev): update databricks-sdk requirement (#1011)
dependabot[bot] Jan 14, 2026
575e418
Make duckdb optional
jochenchrist Jan 19, 2026
9534791
Include searchable tags in catalog index.html (#1019)
Ecter Jan 19, 2026
8ddbd8b
Update integration tests
jochenchrist Jan 19, 2026
b3795ea
Reintroduce numpy restriction
jochenchrist Jan 19, 2026
904645a
Fix tests
jochenchrist Jan 19, 2026
7e60b49
Prepare release
jochenchrist Jan 19, 2026
9991c7a
init drive sql's export by physicalType table (default) and view (sup…
dmaresma Jan 28, 2026
b85c0cf
ruff style
dmaresma Jan 28, 2026
93eb92c
add composite Key support as UNIQUE Constraint for snowflake
dmaresma Jan 28, 2026
6787dbd
fix when no pk found
dmaresma Jan 28, 2026
ea43bcd
ruff format
dmaresma Jan 28, 2026
d1077df
fix build
dmaresma Jan 28, 2026
30d9acb
wrong method
dmaresma Jan 28, 2026
36986d3
#1026 Multiple PrimaryKey Support as constraints
dmaresma Jan 28, 2026
4e7bc9f
databricks doesn't support constraints
dmaresma Jan 28, 2026
8e88b37
fix regression test when datacontract is not ODCS physicalType is aut…
dmaresma Feb 1, 2026
0f5e6d5
Make Markdown export compatible with XHTML by replacing <br> with <br…
bartoszkosiorek Feb 1, 2026
97c7860
chore(deps-dev): bump moto from 5.1.18 to 5.1.20 (#1021)
dependabot[bot] Feb 1, 2026
8c8b642
init (#1025)
dmaresma Feb 1, 2026
c3a23fa
fix BigQuery import bug when the field is repeated (#1017)
amir-qasemi Feb 1, 2026
e68fa60
chore(deps-dev): update databricks-sdk requirement (#1020)
dependabot[bot] Feb 1, 2026
755d620
chore(deps-dev): bump fastapi from 0.121.2 to 0.128.0 (#1010)
dependabot[bot] Feb 1, 2026
d158319
chore(deps-dev): bump minio from 7.2.17 to 7.2.20 (#1008)
dependabot[bot] Feb 1, 2026
4245d0e
chore(deps-dev): update snowflake-connector-python[pandas] requiremen…
dependabot[bot] Feb 1, 2026
1c9d095
force dsc to odcs model.type to physicalType using the sql_converter,…
dmaresma Feb 1, 2026
bf1caf2
Merge branch 'current_main' into feat/export_format_sql_view
dmaresma Feb 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 6 additions & 3 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,19 @@ jobs:
run: datacontract --version
- name: Test datacontract init
run: datacontract init new-datacontract.yaml
- name: Test datacontract export
run: datacontract export --format sql tests/fixtures/export/datacontract.odcs.yaml
- name: Install dependencies with duckdb
run: |
pip install -e '.[duckdb]'
- name: Test datacontract test
run: cd tests && datacontract test fixtures/local-delta/datacontract.yaml
- name: Test datacontract export
run: datacontract export --format odcs tests/fixtures/export/datacontract.yaml

docker:
runs-on: ubuntu-latest
needs:
- test
if: github.event_name != 'pull_request'
if: github.event_name != 'pull_request' && github.repository == 'datacontract/datacontract-cli'
steps:
- name: Checkout
uses: actions/checkout@v4
Expand Down
44 changes: 43 additions & 1 deletion .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,14 @@ jobs:
id-token: write # IMPORTANT: mandatory for sigstore

steps:
- uses: actions/checkout@v4
- name: Extract changelog for version
run: |
VERSION="${{ github.ref_name }}"
VERSION="${VERSION#v}" # Strip 'v' prefix
# Extract section between this version header and next version header
sed -n "/^## \[$VERSION\]/,/^## \[/p" CHANGELOG.md | head -n -1 > release_notes.md
cat release_notes.md
- name: Download all the dists
uses: actions/download-artifact@v4
with:
Expand All @@ -118,7 +126,7 @@ jobs:
gh release create
'${{ github.ref_name }}'
--repo '${{ github.repository }}'
--notes ""
--notes-file release_notes.md
- name: Upload artifact signatures to GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
Expand Down Expand Up @@ -192,3 +200,37 @@ jobs:
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
sbom: true

push-to-ecr:
runs-on: ubuntu-latest
needs:
- docker
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Set up AWS CLI
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Login to AWS ECR
run: |
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/s4e5k7s9

- name: Copy Multi-Arch Image from Docker Hub to AWS ECR
run: |
VERSION="${{ github.ref_name }}"
VERSION="${VERSION#v}" # Strip 'v' prefix to match Docker Hub tag
docker buildx imagetools create \
--tag public.ecr.aws/s4e5k7s9/datacontract-cli:latest \
--tag public.ecr.aws/s4e5k7s9/datacontract-cli:${VERSION} \
docker.io/datacontract/cli:${VERSION}
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.4.7
rev: v0.14.3
hooks:
# Run the linter.
- id: ruff
Expand Down
17 changes: 0 additions & 17 deletions .pre-commit-hooks.yaml

This file was deleted.

2 changes: 1 addition & 1 deletion API.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ curl -X 'POST' \
'http://localhost:4242/test?server=production' \
-H 'accept: application/json' \
-H 'Content-Type: application/yaml' \
-d 'dataContractSpecification: 1.2.0
-d 'dataContractSpecification: 1.2.1
id: urn:datacontract:checkout:orders-latest
info:
title: Orders Latest
Expand Down
185 changes: 182 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,185 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## Unreleased

### Fixed

- Fix BigQuery import for repeated fields
- Make Markdown export compatible with XHTML by replacing `<br>` with `<br />` (#1030)

## [0.11.4] - 2026-01-19

### Changed

- Made `duckdb` an optional dependency. Install with `pip install datacontract-cli[duckdb]` for local/S3/GCS/Azure file testing.
- Removed unused `fastparquet` and `numpy` core dependencies.

### Added

- Include searchable tags in catalog index.html

### Fixed

- Fixed example(s) field mapping for Data Contract Specification importer (#992).
- Spark exporter now supports decimal precision/scale via `customProperties` or parsing from `physicalType` (e.g., `decimal(10,2)`) (#996)
- Fix catalog/HTML export failing on ODCS contracts with no schema or no properties (#971)

## [0.11.3] - 2026-01-10

### Fixed

- Fix `datacontract init` to generate ODCS format instead of deprecated Data Contract Specification (#984)
- Fix ODCS lint failing on optional relationship `type` field by updating open-data-contract-standard to v3.1.2 (#971)
- Restrict DuckDB dependency to < 1.4.0 (#972)
- Fixed schema evolution support for optional fields in CSV and Parquet formats. Optional fields marked with `required: false` are no longer incorrectly treated as required during validation, enabling proper schema evolution where optional fields can be added to contracts without breaking validation of historical data files (#977)
- Fixed decimals in pydantic model export. Fields marked with `type: decimal` will be mapped to `decimal.Decimal` instead of `float`.
- Fix BigQuery test failure for fields with FLOAT or BOOLEAN types by mapping them to equivalent types (BOOL and FLOAT64)

## [0.11.2] - 2025-12-15

### Added
- Add Impala engine support for Soda scans via ODCS `impala` server type.
### Fixed
- Restrict DuckDB dependency to < 1.4.0 (#972)

## [0.11.1] - 2025-12-14

This is a major release with breaking changes:
We switched the internal data model from [Data Contract Specification](https://datacontract-specification.com) to [Open Data Contract Standard](https://datacontract.com/#odcs) (ODCS).

Not all features that were available are supported in this version, as some features are not supported by the Open Data Contract Standard, such as:

- Internal definitions using `$ref` (you can refer to external definitions via `authoritativeDefinition`)
- Lineage (no real workaround, use customProperties or transformation object if needed)
- Support for different physical types (no real workaround, use customProperties if needed)
- Support for enums (use quality metric `invalidValues`)
- Support for properties with type map and defining `keys` and `values` (use logical type map)
- Support for `scale` and `precision` (define them in `physicalType`)

The reason for this change is that the Data Contract Specification is deprecated, we focus on best possible support for the Open Data Contract Standard.
We try to make this transition as seamless as possible.
If you face issues, please open an issue on GitHub.

We continue support reading [Data Contract Specification](https://datacontract-specification.com) data contracts during v0.11.x releases until end of 2026.
To migrate existing data contracts to Open Data Contract Standard use this instruction: https://datacontract-specification.com/#migration

### Changed

- ODCS v3.1.0 is now the default format for all imports.
- Renamed `--model` option to `--schema-name` in the `export` command to align with ODCS terminology.
- Renamed exporter files from `*_converter.py` to `*_exporter.py` for consistency (internal change).

### Added

- If an ODCS slaProperty "freshness" is defined with a reference to the element (column), the CLI will now test freshness of the data.
- If an ODCS slaProperty "retention" is defined with a reference to the element (column), the CLI will now test retention of the data.
- Support for custom Soda quality checks in ODCS using `type: custom` and `engine: soda` with raw SodaCL implementation.

### Fixed

- Oracle: Fix `service_name` attribute access to use ODCS field name `serviceName`

### Removed

- The `breaking`, `changelog`, and `diff` commands are now deleted (#925).
- The `terraform` export format has been removed.


## [0.10.41] - 2025-12-02

### Changed

- Great Expectations export: Update to Great Expectations 1.x format (#919)
- Changed `expectation_suite_name` to `name` in suite output
- Changed `expectation_type` to `type` in expectations
- Removed `data_asset_type` field from suite output
- **Breaking**: Users with custom quality definitions using `expectation_type` must update to use `type`

### Added

- test: Log server name and type in output (#963)
- api: CORS is now enabled for all origins
- quality: Support `{schema}` and `${schema}` placeholder in SQL quality checks to reference the server's database schema (#957)
- SQL Server: Support `DATACONTRACT_SQLSERVER_DRIVER` environment variable to specify the ODBC driver (#959)
- Excel: Add Oracle server type support for Excel export/import (#960)
- Excel: Add local/CSV server type support for Excel export/import (#961)
- Excel Export: Complete server types (glue, kafka, postgres, s3, snowflake, sqlserver, custom)

### Fixed

- Protobuf import: Fix transitive imports across subdirectories (#943)
- Protobuf export now works without error (#951)
- lint: YAML date values (e.g., `2022-01-15`) are now kept as strings instead of being converted to datetime objects, fixing ODCS schema validation
- export: field annotation now matches to number/numeric/decimal types
- Excel: Server port is now correctly parsed as integer instead of string for all server types
- Excel: Remove invalid `table` and `view` fields from custom server import
- Fixed DuckDB DDL generation to use `JSON` type instead of invalid empty `STRUCT()` for objects without defined properties ([#940](https://github.com/datacontract/datacontract-cli/issues/940))

### Deprecated

- The `breaking`, `changelog`, and `diff` commands are now deprecated and will be removed in a future version (#925)

## [0.10.40] - 2025-11-25

### Added

- Support for ODCS v3.1.0

## [0.10.39] - 2025-11-20

### Added

- Oracle DB: Client Directory for Connection Mode 'Thick' can now be specified in the `DATACONTRACT_ORACLE_CLIENT_DIR` environment variable (#949)

### Fixed

- Import composite primary keys from open data contract spec

## [0.10.38] - 2025-11-11

### Added

- Support for Oracle Database (>= 19C)

### Fixed

- Athena: Now correctly uses the (optional) AWS session token specified in the `DATACONTRACT_S3_SESSION_TOKEN' environment variable when testing contracts (#934)

## [0.10.37] - 2025-11-03

### Added

- import: Support for nested arrays in odcs v3 importer
- lint: ODCS schema is now checked before converting
- --debug flag for all commands

### Fixed

- export: Excel exporter now exports critical data element


## [0.10.36] - 2025-10-17

### Added

- Support for Data Contract Specification v1.2.1 (Data Quality Metrics)
- Support for decimal testing in spark and databricks (#902)
- Support for BigQuery Flexible Schema in Data Contract Checks (#909)

### Changed

- `DataContract().import_from_source()` as an instance method is now deprecated. Use `DataContract.import_from_source()` as a class method instead.

### Fixed

- Export to DQX: Correct DQX format for global-level quality check of data contract export. (#877)
- Import the table tags from a open data contract spec v3 (#895)
- dbt export: Enhanced model-level primaryKey support with automatic test generation for single and multiple column primary keys (#898)
- ODCS: field discarded when no logicalType defined (#891)

### Removed

- Removed specific linters, as the linters did not support ODCS (#913)

## [0.10.35] - 2025-08-25

### Added
Expand All @@ -19,7 +198,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- Improved regex for extracting Azure storage account names from URLs with containerName@storageAccountName format (#848)
- JSON Schema Check: Add globbing support for local JSON files

- Fixed server section rendering for markdown exporter

## [0.10.34] - 2025-08-06

Expand Down Expand Up @@ -74,7 +253,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Fixed
- `pytest tests\test_api.py`: Fixed an issue where special characters were not read correctly from file.
- `datacontract export --format mermaid`: Fixed an issue where the `mermaid` export did not handle references correctly
- `datacontract export --format mermaid`: Fixed an issue where the `mermaid` export did not handle references correctly

## [0.10.28] - 2025-06-05

Expand Down Expand Up @@ -287,7 +466,7 @@ Code for proto to datacontract (#696)

### Fixed
- SQL Server: cannot escape reserved word on model (#557)
- Export dbt-staging-sql error on multi models contracts (#587)
- Export dbt-staging-sql error on multi models contracts (#587)

### Removed
- OpenTelemetry publisher, as it was hardly used
Expand Down
Loading