From 5ea6e83cf96d7d7ca9ea8a1f0814e8f8dba50254 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:05:10 +0100 Subject: [PATCH 01/22] =?UTF-8?q?Upgrade=20actions/checkout:=204.2.2=20?= =?UTF-8?q?=E2=86=92=206.x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/acceptance.yml | 2 +- .github/workflows/downstreams.yml | 2 +- .github/workflows/nightly.yml | 2 +- .github/workflows/push.yml | 4 ++-- .github/workflows/release.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml index 710f7542..af81851b 100644 --- a/.github/workflows/acceptance.yml +++ b/.github/workflows/acceptance.yml @@ -19,7 +19,7 @@ jobs: runs-on: larger steps: - name: Checkout Code - uses: actions/checkout@v4.2.2 + uses: actions/checkout@v6 - name: Unshallow run: git fetch --prune --unshallow diff --git a/.github/workflows/downstreams.yml b/.github/workflows/downstreams.yml index 4c8badba..b59b4933 100644 --- a/.github/workflows/downstreams.yml +++ b/.github/workflows/downstreams.yml @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4.2.2 + uses: actions/checkout@v6 with: fetch-depth: 0 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 0f504ff9..83ff543c 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -20,7 +20,7 @@ jobs: runs-on: larger steps: - name: Checkout Code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 10665e63..1fb49566 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4.2.2 + uses: actions/checkout@v6 - name: Install Python uses: actions/setup-python@v5 @@ -44,7 +44,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4.2.2 + uses: actions/checkout@v6 - name: Install Python 3.12 uses: actions/setup-python@v5 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 528e0254..c7f89a5e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,7 @@ jobs: # Used to attach signing artifacts to the published release. contents: write steps: - - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v6 - uses: actions/setup-python@v5 with: From f5e712851d9efc1be0681f6917afadedb0550836 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:06:19 +0100 Subject: [PATCH 02/22] =?UTF-8?q?Upgrade=20actions/setup-python:=205.x=20?= =?UTF-8?q?=E2=86=92=206.x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/acceptance.yml | 2 +- .github/workflows/downstreams.yml | 2 +- .github/workflows/nightly.yml | 2 +- .github/workflows/push.yml | 6 +++--- .github/workflows/release.yml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml index af81851b..b0796f8f 100644 --- a/.github/workflows/acceptance.yml +++ b/.github/workflows/acceptance.yml @@ -25,7 +25,7 @@ jobs: run: git fetch --prune --unshallow - name: Install Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' diff --git a/.github/workflows/downstreams.yml b/.github/workflows/downstreams.yml index b59b4933..6cbee12c 100644 --- a/.github/workflows/downstreams.yml +++ b/.github/workflows/downstreams.yml @@ -36,7 +36,7 @@ jobs: fetch-depth: 0 - name: Install Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 83ff543c..629f145f 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -25,7 +25,7 @@ jobs: fetch-depth: 0 - name: Install Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 1fb49566..a6bb539e 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v6 - name: Install Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' @@ -46,8 +46,8 @@ jobs: - name: Checkout uses: actions/checkout@v6 - - name: Install Python 3.12 - uses: actions/setup-python@v5 + - name: Install Python + uses: actions/setup-python@v6 with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c7f89a5e..8ba998c1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@v6 - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' From 3c7f8a4cc1ba935360af15fe63575a75f91c4f53 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:07:30 +0100 Subject: [PATCH 03/22] Upgrade Hatch: 1.9.4 -> 1.16.5 --- .github/workflows/acceptance.yml | 6 +++++- .github/workflows/downstreams.yml | 7 ++++++- .github/workflows/nightly.yml | 6 +++++- .github/workflows/push.yml | 8 ++++++-- .github/workflows/release.yml | 6 +++++- 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml index b0796f8f..8a8b2bd3 100644 --- a/.github/workflows/acceptance.yml +++ b/.github/workflows/acceptance.yml @@ -12,6 +12,10 @@ permissions: concurrency: group: single-acceptance-job-per-repo +env: + HATCH_VERBOSE: "2" + HATCH_VERSION: "1.16.5" + jobs: integration: if: github.event_name == 'pull_request' && github.event.pull_request.draft == false @@ -32,7 +36,7 @@ jobs: python-version: '3.10' - name: Install hatch - run: pip install hatch==1.9.4 + run: pip install "hatch==${HATCH_VERSION}" - name: Run integration tests uses: databrickslabs/sandbox/acceptance@acceptance/v0.4.2 diff --git a/.github/workflows/downstreams.yml b/.github/workflows/downstreams.yml index 6cbee12c..7654d7fc 100644 --- a/.github/workflows/downstreams.yml +++ b/.github/workflows/downstreams.yml @@ -20,6 +20,10 @@ permissions: contents: read pull-requests: write +env: + HATCH_VERBOSE: "2" + HATCH_VERSION: '1.16.5' + jobs: compatibility: strategy: @@ -44,7 +48,8 @@ jobs: - name: Install toolchain run: | - pip install hatch==1.9.4 + pip install "hatch==${HATCH_VERSION}" + - name: Acceptance uses: databrickslabs/sandbox/downstreams@acceptance/v0.4.2 with: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 629f145f..aeaea05b 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -14,6 +14,10 @@ permissions: concurrency: group: single-acceptance-job-per-repo +env: + HATCH_VERBOSE: "2" + HATCH_VERSION: "1.16.5" + jobs: integration: environment: runtime @@ -32,7 +36,7 @@ jobs: python-version: '3.10' - name: Install hatch - run: pip install hatch==1.9.4 + run: pip install "hatch==${HATCH_VERSION}" - name: Run nightly tests uses: databrickslabs/sandbox/acceptance@acceptance/v0.4.2 diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index a6bb539e..9b64a2c3 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -14,6 +14,10 @@ on: branches: - main +env: + HATCH_VERBOSE: "2" + HATCH_VERSION: "1.16.5" + jobs: ci: strategy: @@ -34,7 +38,7 @@ jobs: - name: Run unit tests run: | - pip install hatch==1.9.4 + pip install "hatch==${HATCH_VERSION}" make test - name: Publish test coverage @@ -55,7 +59,7 @@ jobs: - name: Format all files run: | - pip install hatch==1.9.4 + pip install "hatch==${HATCH_VERSION}" make dev fmt - name: Fail on differences diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8ba998c1..34a9ac4b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,6 +5,10 @@ on: tags: - 'v*' +env: + HATCH_VERBOSE: "2" + HATCH_VERSION: "1.16.5" + jobs: publish: runs-on: @@ -27,7 +31,7 @@ jobs: - name: Build wheels run: | - pip install hatch==1.9.4 + pip install "hatch==${HATCH_VERSION}" hatch build - name: Draft release From 2545924a38093a9f41f7466884a0fd080e54e645 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:13:12 +0100 Subject: [PATCH 04/22] Switch to Hatch-controlled python versions, and run Hatch itself under python 3.14. --- .github/workflows/acceptance.yml | 2 +- .github/workflows/downstreams.yml | 2 +- .github/workflows/nightly.yml | 2 +- .github/workflows/push.yml | 8 +++++--- .github/workflows/release.yml | 2 +- .gitignore | 1 + pyproject.toml | 19 ++++++++++++++++++- 7 files changed, 28 insertions(+), 8 deletions(-) diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml index 8a8b2bd3..9adf43a5 100644 --- a/.github/workflows/acceptance.yml +++ b/.github/workflows/acceptance.yml @@ -33,7 +33,7 @@ jobs: with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' - python-version: '3.10' + python-version: '3.14' - name: Install hatch run: pip install "hatch==${HATCH_VERSION}" diff --git a/.github/workflows/downstreams.yml b/.github/workflows/downstreams.yml index 7654d7fc..f207b650 100644 --- a/.github/workflows/downstreams.yml +++ b/.github/workflows/downstreams.yml @@ -44,7 +44,7 @@ jobs: with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' - python-version: '3.10' + python-version: '3.14' - name: Install toolchain run: | diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index aeaea05b..c99cbc9a 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -33,7 +33,7 @@ jobs: with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' - python-version: '3.10' + python-version: '3.14' - name: Install hatch run: pip install "hatch==${HATCH_VERSION}" diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 9b64a2c3..49169caf 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -23,8 +23,10 @@ jobs: strategy: fail-fast: false matrix: - pyVersion: [ '3.10', '3.11', '3.12' ] + python: [ '3.10', '3.11', '3.12' ] runs-on: ubuntu-latest + env: + HATCH_ENV: "test.py${{ matrix.python }}" steps: - name: Checkout uses: actions/checkout@v6 @@ -34,7 +36,7 @@ jobs: with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' - python-version: ${{ matrix.pyVersion }} + python-version: '3.14' - name: Run unit tests run: | @@ -55,7 +57,7 @@ jobs: with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' - python-version: '3.12' + python-version: '3.14' - name: Format all files run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 34a9ac4b..51c137b7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,7 +27,7 @@ jobs: with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' - python-version: '3.10' + python-version: '3.14' - name: Build wheels run: | diff --git a/.gitignore b/.gitignore index 174f3dc4..edda3b63 100644 --- a/.gitignore +++ b/.gitignore @@ -129,6 +129,7 @@ venv/ ENV/ env.bak/ venv.bak/ +/.venv-* # Spyder project settings .spyderproject diff --git a/pyproject.toml b/pyproject.toml index 91d6e363..a4536f85 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,8 +58,10 @@ dependencies = [ "types-requests", ] +python="3.10" + # store virtual env as the child of this folder. Helps VSCode (and PyCharm) to run better -path = ".venv" +path = ".venv-py3.10" [tool.hatch.envs.default.scripts] test = "pytest -n 2 --cov src --cov-report=xml --timeout 30 tests/unit --durations 20" @@ -75,6 +77,21 @@ verify = ["isort . --check-only", "mypy .", "pylint --output-format=colorized -j 0 src"] +[tool.hatch.envs.test.overrides] +matrix.python.path = [ + # Sadly no way to interpolate this. + # (No override needed for 3.10, inherited from default environment.) + { value = ".venv-py3.11", if = ["3.11" ]}, + { value = ".venv-py3.12", if = ["3.12" ]}, +] + +[[tool.hatch.envs.test.matrix]] +python = [ + "3.10", + "3.11", + "3.12", +] + [tool.isort] profile = "black" From fc2ef1c92eaabfdaea48b5b30e3f3ad6d146fd5b Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:13:48 +0100 Subject: [PATCH 05/22] Add Python 3.13 and 3.14 to the test matrix. --- .github/workflows/push.yml | 2 +- pyproject.toml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 49169caf..7d5fefac 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -23,7 +23,7 @@ jobs: strategy: fail-fast: false matrix: - python: [ '3.10', '3.11', '3.12' ] + python: [ '3.10', '3.11', '3.12', '3.13', '3.14' ] runs-on: ubuntu-latest env: HATCH_ENV: "test.py${{ matrix.python }}" diff --git a/pyproject.toml b/pyproject.toml index a4536f85..5be1a858 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,6 +16,8 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", ] @@ -83,6 +85,8 @@ matrix.python.path = [ # (No override needed for 3.10, inherited from default environment.) { value = ".venv-py3.11", if = ["3.11" ]}, { value = ".venv-py3.12", if = ["3.12" ]}, + { value = ".venv-py3.13", if = ["3.13" ]}, + { value = ".venv-py3.14", if = ["3.14" ]} ] [[tool.hatch.envs.test.matrix]] @@ -90,6 +94,8 @@ python = [ "3.10", "3.11", "3.12", + "3.13", + "3.14", ] [tool.isort] From 912644cb2b6f2178b1591f391c7cb0349afea349 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:28:29 +0100 Subject: [PATCH 06/22] Update `make clean` to tidy up all venvs. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fc70580c..b3b532c8 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ all: clean lint fmt test coverage clean: - rm -fr .venv clean htmlcov .mypy_cache .pytest_cache .ruff_cache .coverage coverage.xml + rm -fr .venv* clean htmlcov .mypy_cache .pytest_cache .ruff_cache .coverage coverage.xml rm -fr **/*.pyc .venv/bin/python: From 679b6c55bbb30102c0946d79700697a97cfa8dad Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:28:56 +0100 Subject: [PATCH 07/22] Remove unrecognised pylint option. --- pyproject.toml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 5be1a858..06815c07 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -222,10 +222,6 @@ py-version = "3.10" # source root. # source-roots = -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode = true - # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. # unsafe-load-any-extension = From 64e515d2fd768f9750915e1215bba5fa5ecf6727 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:29:13 +0100 Subject: [PATCH 08/22] Limit isort to src/ and tests/ --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 06815c07..9ca848d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,7 +69,7 @@ path = ".venv-py3.10" test = "pytest -n 2 --cov src --cov-report=xml --timeout 30 tests/unit --durations 20" coverage = "pytest -n 2 --cov src tests/unit --timeout 30 --cov-report=html --durations 20" integration = "pytest -n 10 --cov src tests/integration --durations 20" -fmt = ["isort .", +fmt = ["isort src tests", "ruff format", "ruff check . --fix", "mypy .", From 4e84ecfc030ee0b103f95546b305efdc836dbcf5 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:50:05 +0100 Subject: [PATCH 09/22] Ensure the ruff and pytest caches are located in the correct venv. --- pyproject.toml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9ca848d5..3bbdce7f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,6 +65,10 @@ python="3.10" # store virtual env as the child of this folder. Helps VSCode (and PyCharm) to run better path = ".venv-py3.10" +[tool.hatch.envs.default.env-vars] +PYTEST_ADDOPTS = "-o cache_dir=.venv-py3.10/pytest-cache" +RUFF_CACHE_DIR = ".venv-py3.10/ruff-cache" + [tool.hatch.envs.default.scripts] test = "pytest -n 2 --cov src --cov-report=xml --timeout 30 tests/unit --durations 20" coverage = "pytest -n 2 --cov src tests/unit --timeout 30 --cov-report=html --durations 20" @@ -79,6 +83,10 @@ verify = ["isort . --check-only", "mypy .", "pylint --output-format=colorized -j 0 src"] +[tool.hatch.envs.test.env-vars] +PYTEST_ADDOPTS = "-o cache_dir=.venv-py{matrix:python}/pytest-cache" +RUFF_CACHE_DIR = ".venv-py{matrix:python}/ruff-cache" + [tool.hatch.envs.test.overrides] matrix.python.path = [ # Sadly no way to interpolate this. @@ -103,7 +111,6 @@ profile = "black" [tool.pytest.ini_options] addopts = "--no-header" -cache_dir = ".venv/pytest-cache" [tool.black] target-version = ["py310"] @@ -111,7 +118,6 @@ line-length = 120 skip-string-normalization = true [tool.ruff] -cache-dir = ".venv/ruff-cache" target-version = "py310" line-length = 120 From 534e8fe14b0e50bfaf2ae2482bfe8187743a6e65 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:50:34 +0100 Subject: [PATCH 10/22] Explicitly indicate that 3.15 is not (yet) supported. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3bbdce7f..c4997d8d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "databricks-labs-lsql" dynamic = ["version"] description = "Lightweight stateless SQL execution for Databricks with minimal dependencies" readme = "README.md" -requires-python = ">=3.10" +requires-python = ">=3.10,<3.15" license-files = { paths = ["LICENSE", "NOTICE"] } keywords = [] authors = [ From 885556731651d0501b5ea6714cb1bedb39374742 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:54:46 +0100 Subject: [PATCH 11/22] Also run acceptance tests for draft PRs. --- .github/workflows/acceptance.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml index 9adf43a5..e3f6eb37 100644 --- a/.github/workflows/acceptance.yml +++ b/.github/workflows/acceptance.yml @@ -18,7 +18,7 @@ env: jobs: integration: - if: github.event_name == 'pull_request' && github.event.pull_request.draft == false + if: github.event_name == 'pull_request' environment: runtime runs-on: larger steps: From a8705c39186334c76b7286acefd5a6e740bad1d7 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 15:56:21 +0100 Subject: [PATCH 12/22] Downstream repo has changed: remorph -> lakebridge --- .github/workflows/downstreams.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/downstreams.yml b/.github/workflows/downstreams.yml index f207b650..2872db4a 100644 --- a/.github/workflows/downstreams.yml +++ b/.github/workflows/downstreams.yml @@ -31,7 +31,7 @@ jobs: matrix: downstream: - name: ucx - - name: remorph + - name: lakebridge runs-on: ubuntu-latest steps: - name: Checkout From a39e64cb2a6bbfc4996c226ac8a9f5afb2e3ef0a Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 3 Mar 2026 16:16:23 +0100 Subject: [PATCH 13/22] Revert default environment to using `.venv`. This hardcoded path is needed by the labs tool to locate the integration tests. --- pyproject.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c4997d8d..42381d19 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,12 +62,12 @@ dependencies = [ python="3.10" -# store virtual env as the child of this folder. Helps VSCode (and PyCharm) to run better -path = ".venv-py3.10" +# Fixed path expected by the `labs` tool to run acceptance tests. +path = ".venv" [tool.hatch.envs.default.env-vars] -PYTEST_ADDOPTS = "-o cache_dir=.venv-py3.10/pytest-cache" -RUFF_CACHE_DIR = ".venv-py3.10/ruff-cache" +PYTEST_ADDOPTS = "-o cache_dir=.venv/pytest-cache" +RUFF_CACHE_DIR = ".venv/ruff-cache" [tool.hatch.envs.default.scripts] test = "pytest -n 2 --cov src --cov-report=xml --timeout 30 tests/unit --durations 20" @@ -90,7 +90,7 @@ RUFF_CACHE_DIR = ".venv-py{matrix:python}/ruff-cache" [tool.hatch.envs.test.overrides] matrix.python.path = [ # Sadly no way to interpolate this. - # (No override needed for 3.10, inherited from default environment.) + { value = ".venv-py3.10", if = ["3.10" ]}, { value = ".venv-py3.11", if = ["3.11" ]}, { value = ".venv-py3.12", if = ["3.12" ]}, { value = ".venv-py3.13", if = ["3.13" ]}, From 128ce9d88e535c1655617034be1f24126ec0f63a Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Fri, 6 Mar 2026 17:47:05 +0100 Subject: [PATCH 14/22] Specify python versions for downstream projects that are compatible with the projects. These don't currently control the version of python properly. --- .github/workflows/downstreams.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/downstreams.yml b/.github/workflows/downstreams.yml index 2872db4a..b5718aeb 100644 --- a/.github/workflows/downstreams.yml +++ b/.github/workflows/downstreams.yml @@ -30,8 +30,10 @@ jobs: fail-fast: false matrix: downstream: - - name: ucx - - name: lakebridge + # Downstream currently just tests with system python rather than controlling the versions properly. + - { name: ucx, python: '3.12' } + - { name: lakebridge, python: '3.13' } + - { name: remorph, python: '3.12' } runs-on: ubuntu-latest steps: - name: Checkout @@ -44,7 +46,7 @@ jobs: with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' - python-version: '3.14' + python-version: "${{ matrix.downstream.python }}" - name: Install toolchain run: | From bdbd24fa8086bb2fb69aaf990dd986f084e5df79 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Fri, 6 Mar 2026 18:25:50 +0100 Subject: [PATCH 15/22] Run downstream checks with system python 3.10 --- .github/workflows/downstreams.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/downstreams.yml b/.github/workflows/downstreams.yml index b5718aeb..6cc473d3 100644 --- a/.github/workflows/downstreams.yml +++ b/.github/workflows/downstreams.yml @@ -31,9 +31,9 @@ jobs: matrix: downstream: # Downstream currently just tests with system python rather than controlling the versions properly. - - { name: ucx, python: '3.12' } - - { name: lakebridge, python: '3.13' } - - { name: remorph, python: '3.12' } + - name: ucx + - name: lakebridge + - name: remorph runs-on: ubuntu-latest steps: - name: Checkout @@ -46,7 +46,7 @@ jobs: with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' - python-version: "${{ matrix.downstream.python }}" + python-version: '3.10' - name: Install toolchain run: | From 5da428ec293abcb5e94706cc4b2a6805728a02e3 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Fri, 6 Mar 2026 18:29:39 +0100 Subject: [PATCH 16/22] Drop the lakebridge check; it doesn't do anything. --- .github/workflows/downstreams.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/downstreams.yml b/.github/workflows/downstreams.yml index 6cc473d3..545a5ee1 100644 --- a/.github/workflows/downstreams.yml +++ b/.github/workflows/downstreams.yml @@ -32,7 +32,6 @@ jobs: downstream: # Downstream currently just tests with system python rather than controlling the versions properly. - name: ucx - - name: lakebridge - name: remorph runs-on: ubuntu-latest steps: From c0a1659a6421af5b6e9055c39f2ecf7bb249371b Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Fri, 6 Mar 2026 18:29:56 +0100 Subject: [PATCH 17/22] Move comment to correct location. --- .github/workflows/downstreams.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/downstreams.yml b/.github/workflows/downstreams.yml index 545a5ee1..79f54da2 100644 --- a/.github/workflows/downstreams.yml +++ b/.github/workflows/downstreams.yml @@ -30,7 +30,6 @@ jobs: fail-fast: false matrix: downstream: - # Downstream currently just tests with system python rather than controlling the versions properly. - name: ucx - name: remorph runs-on: ubuntu-latest @@ -45,6 +44,7 @@ jobs: with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' + # Downstream currently just tests with system python rather than controlling the versions properly. python-version: '3.10' - name: Install toolchain From 48540b837c44b5a15a83be39e2bcbdb4ca95f956 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 10 Mar 2026 16:22:01 +0100 Subject: [PATCH 18/22] Sync style. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index edda3b63..dbf79adf 100644 --- a/.gitignore +++ b/.gitignore @@ -129,7 +129,7 @@ venv/ ENV/ env.bak/ venv.bak/ -/.venv-* +.venv-*/ # Spyder project settings .spyderproject From b20c98263f3419a9308d9488e82815141f8119d1 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 10 Mar 2026 16:22:14 +0100 Subject: [PATCH 19/22] Ensure isort is the same for fmt and verify. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 42381d19..ae3394b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,7 +78,7 @@ fmt = ["isort src tests", "ruff check . --fix", "mypy .", "pylint --output-format=colorized -j 0 src"] -verify = ["isort . --check-only", +verify = ["isort src tests --check-only", "ruff check .", "mypy .", "pylint --output-format=colorized -j 0 src"] From 9dfa411a0011e31a244048766265336afa67bb6e Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 10 Mar 2026 16:22:35 +0100 Subject: [PATCH 20/22] Ensure the mypy cache is also scoped to within the venv. --- pyproject.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index ae3394b3..a33634f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -66,6 +66,7 @@ python="3.10" path = ".venv" [tool.hatch.envs.default.env-vars] +MYPY_CACHE_DIR = ".venv/mypy-cache" PYTEST_ADDOPTS = "-o cache_dir=.venv/pytest-cache" RUFF_CACHE_DIR = ".venv/ruff-cache" @@ -84,6 +85,7 @@ verify = ["isort src tests --check-only", "pylint --output-format=colorized -j 0 src"] [tool.hatch.envs.test.env-vars] +MYPY_CACHE_DIR = ".venv-py{matrix:python}/mypy-cache" PYTEST_ADDOPTS = "-o cache_dir=.venv-py{matrix:python}/pytest-cache" RUFF_CACHE_DIR = ".venv-py{matrix:python}/ruff-cache" From 6c190db4ab3b42c0b76c64e55059fbea9835907f Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Tue, 10 Mar 2026 20:12:43 +0100 Subject: [PATCH 21/22] No need to trigger on ready-for-review. The triggers have been updated so that integration tests also run for draft PRs. --- .github/workflows/acceptance.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml index e3f6eb37..ab00e452 100644 --- a/.github/workflows/acceptance.yml +++ b/.github/workflows/acceptance.yml @@ -2,7 +2,7 @@ name: acceptance on: pull_request: - types: [ opened, synchronize, ready_for_review ] + types: [ opened, synchronize ] permissions: id-token: write From 67ca74558e0c2069ae8688a56eceda5f3076dd53 Mon Sep 17 00:00:00 2001 From: Andrew Snare Date: Wed, 11 Mar 2026 14:05:58 +0100 Subject: [PATCH 22/22] Pre-install the version of python that hatch will need to set up for the environment. --- .github/workflows/push.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 7d5fefac..bbad814e 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -36,7 +36,10 @@ jobs: with: cache: 'pip' cache-dependency-path: '**/pyproject.toml' - python-version: '3.14' + # The version under test, as well as Python 3.14 for Hatch. + python-version: | + ${{ matrix.python }} + ${{ matrix.python != '3.14' && '3.14' || '' }} - name: Run unit tests run: |