Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
cf36456
Normalize model files (#2507)
sh-rp May 15, 2025
ed951d0
fixes wrong docs links that came from nowhere (#2646)
rudolfix May 15, 2025
4d1ba90
2529-INFO_TABLES_QUERY_THRESHOLD-as-paramterer-from-config (#2600)
amirdataops May 15, 2025
2fc382d
disables synapse and databricks ibis connector (#2650)
sh-rp May 16, 2025
c9188b9
feat: Expand sql table resource config (#2396)
xneg May 19, 2025
d079fb0
Feat: Support clustered tables with custom column order in BigQuery d…
hsm207 May 19, 2025
1e5c4d9
Feat: Add configuration propagation to deltalake.write_deltalake (#26…
gaatjeniksaan May 20, 2025
bdf7705
rely on autoused fixture to restore env (#2668)
djudjuu May 20, 2025
530b5a8
changes contrib and README (#2666)
rudolfix May 21, 2025
7a9dea3
warn when resolving configs or secrets with placeholder values (#2636)
djudjuu May 21, 2025
a3eca3f
Prevent unecessary preliminary connection in dataset (#2645)
sh-rp May 22, 2025
3e0c76b
Simplify workflow files (#2663)
sh-rp May 25, 2025
bb884fe
watched files narrowed to ./docs (#2678)
zilto May 26, 2025
2fd7dbf
docs: dlt+ iceberg destination partitioning (#2686)
burnash May 27, 2025
0a557a9
QoL: improved `__repr__()` for public interface (#2630)
zilto May 29, 2025
2e7269d
fix: incrementally watch files (#2697)
zilto May 30, 2025
a3534b3
Simplify pipeline test utils (#2566)
sh-rp May 30, 2025
ddec8e5
docs: fix invalid bigquery reference in athena destination (#2700)
goober May 30, 2025
24c9583
Add support for creating custom integer-range partition table in BigQ…
hsm207 May 30, 2025
7eb4570
dlt marimo app pre-release version (#2662)
sh-rp May 30, 2025
5ceba48
dlt.transformation implementation (#2528)
sh-rp May 30, 2025
fd88bb0
fix linting
sh-rp May 30, 2025
b472ab7
[transformations] decouples sqlglot lineage and schema generation fro…
rudolfix Jun 4, 2025
dccf963
Upsert merge strategy for iceberg (#2671)
anuunchin Jun 5, 2025
739e21a
QoL: warning with hint to provide data types for columns with exclusi…
anuunchin Jun 5, 2025
b33be40
revert motherduck token change and disable studio command (#2717)
sh-rp Jun 5, 2025
445967e
Fix issue 2690: switch to packaging to remove warning on `import dlt`…
djudjuu Jun 5, 2025
879a260
motherduck destination config improvement: uppercase env var (#2703)
djudjuu Jun 5, 2025
1dc29d7
adds parquet support to postgres via adbc (#2685)
rudolfix Jun 5, 2025
6049806
2681 - fixes null on non null column arrow (#2721)
rudolfix Jun 6, 2025
9b392e9
remove marimo from dev deps (#2723)
sh-rp Jun 6, 2025
76307dc
added constants for `load_id` col in `_dlt_loads` table (#2729)
zilto Jun 8, 2025
7245d85
Feat/add athena dabatase location option (#2708)
eric-pinkham-rw Jun 8, 2025
d2e29fa
qol: exception formatting (#2715)
zilto Jun 11, 2025
db670a5
add marimo flag to show command (#2741)
sh-rp Jun 11, 2025
1c22e5c
adds dlt+ transformations disclaimer (#2732)
rudolfix Jun 11, 2025
88c11bb
docs: rest_api: clarify dlt resource and rest_api specific parameters…
burnash Jun 11, 2025
f42921f
bumps dlt to pre-release 1.12.0a0
rudolfix Jun 11, 2025
36ee706
Update github workflow setup (#2728)
sh-rp Jun 11, 2025
f821d21
fixes leaking datasets tests (#2730)
rudolfix Jun 11, 2025
bd4e17b
fix: text and binary precision via sqlglot (#2744)
zilto Jun 11, 2025
2c7bf9e
mssql and snowflake bugfixes + bumps to 1.12.0 (#2756)
rudolfix Jun 16, 2025
1ddc81e
docs: plus: add merge strategies for dlt+ Iceberg destination (#2749)
burnash Jun 16, 2025
b37cc29
document rest_api pagination hierarchy and add tests (#2745)
burnash Jun 16, 2025
9bf63af
fix docs linting setup (#2762)
sh-rp Jun 16, 2025
c0eaf81
updates dlt install info in README
rudolfix Jun 16, 2025
9342b2c
docs: add session parameter to rest_api client configuration (#2746)
burnash Jun 17, 2025
e89fa0a
open correct page in marimo app for "pipeline show" command (#2765)
sh-rp Jun 17, 2025
80b1b9e
docs: fix incorrect github_source function calls in tutorial (#2768)
axelearning Jun 17, 2025
670ac1d
alway test docs snippets, not only after authorization (#2769)
sh-rp Jun 17, 2025
3de8a1e
fixes test timeout
rudolfix Jun 17, 2025
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
  •  
  •  
  •  
16 changes: 2 additions & 14 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,13 @@
name: lint | code & tests

on:
pull_request:
branches:
- master
- devel
workflow_call:
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
get_docs_changes:
name: docs changes
uses: ./.github/workflows/get_docs_changes.yml

run_lint:
name: lint
needs: get_docs_changes
if: needs.get_docs_changes.outputs.changes_outside_docs == 'true'
strategy:
fail-fast: true
matrix:
Expand Down Expand Up @@ -60,7 +48,7 @@ jobs:

- name: Install dependencies
# if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --all-extras --with airflow,providers,pipeline,sentry-sdk,dbt
run: poetry install --all-extras --with airflow,providers,pipeline,sentry-sdk,dbt,marimo,streamlit

- name: Run make lint
run: |
Expand Down
105 changes: 105 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: dlt

on:
pull_request:
branches: [ master, devel ]

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:

# checks wether anything outside docs has changed, if not, most of the tests can be skipped
# lint will check this and if lint is not run, no other tests will be run
get_docs_changes:
name: docs changes
uses: ./.github/workflows/get_docs_changes.yml

# if the PR is from a fork, we need to authorize the secrets access and remote destinations run with a lable
authorize_run_from_fork:
name: check if fork and if so wether secrets are available
# run when label is assigned OR when we are not a fork
if: ${{ github.event.label.name == 'ci from fork' || (github.event.pull_request.head.repo.full_name == github.repository && (github.event.action == 'opened' || github.event.action == 'synchronize'))}}
runs-on: ubuntu-latest
steps:
- run: true

# testing and linting of docs snippets is always run to catch problems in the docs
# NOTE: we could splint linting and testing of docs so linter can also always run for fork PRs
test_docs_snippets:
name: test snippets in docs
uses: ./.github/workflows/test_docs_snippets.yml
secrets: inherit

lint:
name: lint on all python versions
needs: get_docs_changes
if: needs.get_docs_changes.outputs.changes_outside_docs == 'true'
uses: ./.github/workflows/lint.yml

test_common:
name: run common tests on all python versions and OSes
needs: lint
uses: ./.github/workflows/test_common.yml

#
# Destination and Sources local tests, do not provide secrets
# Other tests that do not require remote connections
#
test_destinations_local:
name: run local destination tests without secrets
needs: test_common
uses: ./.github/workflows/test_destinations_local.yml

test_sources_local:
name: run local source tests without secrets
needs: test_common
uses: ./.github/workflows/test_sources_local.yml

test_plus:
name: test dlt+ connection
needs: lint
uses: ./.github/workflows/test_plus.yml

test_tools_airflow:
name: test airflow helpers
needs: lint
uses: ./.github/workflows/test_tools_airflow.yml

test_tools_build_images:
name: test build images
needs: lint
uses: ./.github/workflows/test_tools_build_images.yml

#
# Remote destination tests and docs snippets, needs secrets,
# so we depend on authorize and forward secrets
#


test_destinations_remote:
name: test remote destinations with secrets
needs: [authorize_run_from_fork, test_common]
uses: ./.github/workflows/test_destinations_remote.yml
secrets: inherit
with:
run_full_test_suite: ${{ contains(github.event.pull_request.labels.*.name, 'ci full') || github.event_name == 'schedule'}}

#
# Other tools and tests that require secrets
#
test_tools_dbt_runner:
name: test dbt runner
needs: [test_common, authorize_run_from_fork]
uses: ./.github/workflows/test_tools_dbt_runner.yml
secrets: inherit

# dbt cloud tests currently are disabled, TODO: explain why
# test_tools_dbt_cloud:
# needs: [test_common, authorize_run_from_fork]
# uses: ./.github/workflows/test_tools_dbt_cloud.yml
# secrets: inherit



172 changes: 75 additions & 97 deletions .github/workflows/test_common.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,11 @@
name: common | common

on:
pull_request:
branches:
- master
- devel
workflow_dispatch:
workflow_call:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

env:
RUNTIME__LOG_LEVEL: ERROR
RUNTIME__DLTHUB_TELEMETRY_ENDPOINT: ${{ secrets.RUNTIME__DLTHUB_TELEMETRY_ENDPOINT }}

# we need the secrets only for the rest_api_pipeline tests which are in tests/sources
# so we inject them only at the end
Expand All @@ -22,35 +14,48 @@ env:
SOURCES__GITHUB_API_PIPELINE__ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}

jobs:
get_docs_changes:
name: docs changes
uses: ./.github/workflows/get_docs_changes.yml

run_common:
name: test
needs: get_docs_changes
if: needs.get_docs_changes.outputs.changes_outside_docs == 'true'
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest", "macos-latest", "windows-latest"]
python-version: ["3.11.x"]
# Test all python versions on ubuntu only
include:
- python-version: "3.9.x"
os: "ubuntu-latest"
- python-version: "3.10.x"
os: "ubuntu-latest"
- python-version: "3.12.x"
os: "ubuntu-latest"
- python-version: "3.13.x"
os: "ubuntu-latest"
- python-version: "3.13.x"
os: "windows-latest"

# macos tests
- os: macos-latest
python-version: "3.11.x"
shell: bash

# linux tests
- os: ubuntu-latest
python-version: "3.9.x"
shell: bash
- os: ubuntu-latest
python-version: "3.10.x"
shell: bash
- os: ubuntu-latest
python-version: "3.11.x"
shell: bash
- os: ubuntu-latest
python-version: "3.12.x"
shell: bash
- os: ubuntu-latest
python-version: "3.13.x"
shell: bash

# windows tests
- os: windows-latest
python-version: "3.11.x"
shell: cmd
pytest_args: '-m "not forked"'
- os: windows-latest
python-version: "3.13.x"
shell: cmd
pytest_args: '-m "not forked"'

defaults:
run:
shell: bash
shell: ${{ matrix.shell }}
runs-on: ${{ matrix.os }}

steps:
Expand All @@ -72,7 +77,6 @@ jobs:
copy tzdata %USERPROFILE%\Downloads\tzdata
curl https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/windowsZones.xml --output %USERPROFILE%\Downloads\tzdata\windowsZones.xml
if: runner.os == 'Windows'
shell: cmd

- name: Install Poetry
# https://github.com/snok/install-poetry#running-on-windows
Expand All @@ -83,93 +87,67 @@ jobs:
installer-parallel: true
version: 1.8.5

# NOTE: do not cache. we want to have a clean state each run and we upgrade depdendencies later
# - name: Load cached venv
# id: cached-poetry-dependencies
# uses: actions/cache@v3
# with:
# # path: ${{ steps.pip-cache.outputs.dir }}
# path: .venv
# key: venv-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }}

- name: Install dependencies
run: poetry install --no-interaction --with sentry-sdk

- run: |
poetry run pytest tests/common tests/normalize tests/reflection tests/plugins tests/load/test_dummy_client.py tests/extract/test_extract.py tests/extract/test_sources.py tests/pipeline/test_pipeline_state.py
if: runner.os != 'Windows'
name: Run common tests with minimum dependencies Linux/MAC
- run: |
poetry run pytest tests/common tests/normalize tests/reflection tests/plugins tests/load/test_dummy_client.py tests/extract/test_extract.py tests/extract/test_sources.py tests/pipeline/test_pipeline_state.py -m "not forked"
if: runner.os == 'Windows'
name: Run common tests with minimum dependencies Windows
shell: cmd

- name: Run common tests with minimum dependencies
run: |
poetry run pytest tests/common tests/normalize tests/reflection tests/plugins tests/load/test_dummy_client.py tests/extract/test_extract.py tests/extract/test_sources.py tests/pipeline/test_pipeline_state.py ${{ matrix.pytest_args }}


- name: Install duckdb dependencies
run: poetry install --no-interaction -E duckdb --with sentry-sdk

- run: |
poetry run pytest tests/pipeline/test_pipeline.py tests/pipeline/test_import_export_schema.py
if: runner.os != 'Windows'
name: Run pipeline smoke tests with minimum deps Linux/MAC
- run: |
poetry run pytest tests/pipeline/test_pipeline.py tests/pipeline/test_import_export_schema.py -m "not forked"
if: runner.os == 'Windows'
name: Run smoke tests with minimum deps Windows
shell: cmd
- name: Run pipeline smoke tests with minimum deps
run: |
poetry run pytest tests/pipeline/test_pipeline.py tests/pipeline/test_import_export_schema.py ${{ matrix.pytest_args }}

- name: Install pyarrow
run: poetry install --no-interaction -E duckdb -E cli -E parquet --with sentry-sdk

- run: |
poetry run pytest tests/pipeline/test_pipeline_extra.py -k arrow
if: runner.os != 'Windows'
name: Run pipeline tests with pyarrow but no pandas installed
- run: |
poetry run pytest tests/pipeline/test_pipeline_extra.py -k arrow -m "not forked"
if: runner.os == 'Windows'
name: Run pipeline tests with pyarrow but no pandas installed Windows
shell: cmd
- name: Run pipeline tests with pyarrow but no pandas installed
run: |
poetry run pytest tests/pipeline/test_pipeline_extra.py -k arrow ${{ matrix.pytest_args }}

- name: Install pipeline and sources dependencies
run: poetry install --no-interaction -E duckdb -E cli -E parquet -E deltalake -E sql_database --with sentry-sdk,pipeline,sources

- run: |
poetry run pytest tests/extract tests/pipeline tests/libs tests/cli/common tests/destinations tests/sources
if: runner.os != 'Windows'
name: Run extract and pipeline tests Linux/MAC
- run: |
poetry run pytest tests/extract tests/pipeline tests/libs tests/cli/common tests/destinations tests/sources -m "not forked"
if: runner.os == 'Windows'
name: Run extract tests Windows
shell: cmd
- name: Run extract and pipeline tests
run: |
poetry run pytest tests/extract tests/pipeline tests/libs tests/cli/common tests/destinations tests/sources tests/transformations ${{ matrix.pytest_args }}

# here we upgrade sql alchemy to 2 an run the sql_database tests again
- name: Upgrade sql alchemy
run: poetry run pip install sqlalchemy==2.0.32

- run: |
poetry run pytest tests/sources/sql_database
if: runner.os != 'Windows'
name: Run extract and pipeline tests Linux/MAC
- run: |
- name: Run extract and pipeline tests
run: |
poetry run pytest tests/sources/sql_database
if: runner.os == 'Windows'
name: Run extract tests Windows
shell: cmd

# - name: Install Pydantic 1.0
# run: pip install "pydantic<2"

# - run: |
# poetry run pytest tests/libs
# if: runner.os != 'Windows'
# name: Run extract and pipeline tests Linux/MAC
# - run: |
# poetry run pytest tests/libs
# if: runner.os == 'Windows'
# name: Run extract tests Windows
# shell: cmd



# test marimo app, does not work with python 3.13
- name: Install dlt with duckdb and studio
run: poetry install --no-interaction -E duckdb --with sentry-sdk,pipeline,sources,ibis,marimo
if: matrix.python-version != '3.13.x'

- name: Install playwright
run: poetry run playwright install
if: matrix.python-version != '3.13.x'

# Run marimo studio unit tests
- name: Run marimo studio unit tests
run: |
poetry run pytest tests/helpers/studio
if: matrix.python-version != '3.13.x'

# Run marimo e2e tests (does not pass with python 3.9, does not pass on windows (playwright does not work somehow), does not pass on python 3.13 (ibis not available))
- name: Run marimo e2e
run: |
poetry run marimo run --headless dlt/helpers/studio/app.py -- -- --pipelines_dir _storage/.dlt/pipelines/ --with_test_identifiers true & poetry run pytest --browser chromium tests/e2e
if: matrix.python-version != '3.13.x' && matrix.python-version != '3.9.x' && matrix.os != 'windows-latest'



matrix_job_required_check:
name: common | common tests
Expand Down
Loading
Loading