Skip to content

build(kernel): add optional [kernel] extra for use_kernel=True #3002

build(kernel): add optional [kernel] extra for use_kernel=True

build(kernel): add optional [kernel] extra for use_kernel=True #3002

name: Code Quality Checks
on: [pull_request]
permissions:
contents: read
id-token: write
jobs:
run-unit-tests:
runs-on:
group: databricks-protected-runner-group
labels: linux-ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
dependency-version: ["default", "min"]
exclude:
- python-version: "3.12"
dependency-version: "min"
- python-version: "3.13"
dependency-version: "min"
name: "Unit Tests (Python ${{ matrix.python-version }}, ${{ matrix.dependency-version }} deps)"
steps:
- name: Check out repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Poetry
uses: ./.github/actions/setup-poetry
with:
python-version: ${{ matrix.python-version }}
cache-suffix: "${{ matrix.dependency-version }}-"
- name: Install Python tools for custom versions
if: matrix.dependency-version != 'default'
run: poetry run pip install toml packaging
- name: Generate requirements file
if: matrix.dependency-version != 'default'
run: |
poetry run python scripts/dependency_manager.py ${{ matrix.dependency-version }} --output requirements-${{ matrix.dependency-version }}.txt
echo "Generated requirements for ${{ matrix.dependency-version }} versions:"
cat requirements-${{ matrix.dependency-version }}.txt
- name: Override with custom dependency versions
if: matrix.dependency-version != 'default'
run: poetry run pip install -r requirements-${{ matrix.dependency-version }}.txt
- name: Show installed versions
run: |
echo "=== Dependency Version: ${{ matrix.dependency-version }} ==="
poetry run pip list
- name: Run tests
run: poetry run python -m pytest tests/unit -m "not realkernel"
run-unit-tests-with-arrow:
runs-on:
group: databricks-protected-runner-group
labels: linux-ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
dependency-version: ["default", "min"]
exclude:
- python-version: "3.12"
dependency-version: "min"
- python-version: "3.13"
dependency-version: "min"
name: "Unit Tests + PyArrow (Python ${{ matrix.python-version }}, ${{ matrix.dependency-version }} deps)"
steps:
- name: Check out repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Install Kerberos system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libkrb5-dev
- name: Setup Poetry
uses: ./.github/actions/setup-poetry
with:
python-version: ${{ matrix.python-version }}
# Install ONLY the pyarrow extra (not --all-extras) so this
# tier isolates the "pyarrow present, kernel absent"
# configuration. --all-extras would also pull the kernel wheel,
# making this job redundant with "Unit Tests + Kernel".
install-args: "--extras pyarrow"
cache-suffix: "pyarrow-${{ matrix.dependency-version }}-"
- name: Install Python tools for custom versions
if: matrix.dependency-version != 'default'
run: poetry run pip install toml packaging
- name: Generate requirements file with pyarrow
if: matrix.dependency-version != 'default'
run: |
poetry run python scripts/dependency_manager.py ${{ matrix.dependency-version }} --output requirements-${{ matrix.dependency-version }}-arrow.txt
echo "Generated requirements for ${{ matrix.dependency-version }} versions with PyArrow:"
cat requirements-${{ matrix.dependency-version }}-arrow.txt
- name: Override with custom dependency versions
if: matrix.dependency-version != 'default'
run: poetry run pip install -r requirements-${{ matrix.dependency-version }}-arrow.txt
- name: Show installed versions
run: |
echo "=== Dependency Version: ${{ matrix.dependency-version }} with PyArrow ==="
poetry run pip list
- name: Run tests
run: poetry run python -m pytest tests/unit -m "not realkernel"
run-unit-tests-with-kernel:
runs-on:
group: databricks-protected-runner-group
labels: linux-ubuntu-latest
strategy:
matrix:
# Kernel wheel is cp310-abi3 (Requires-Python >=3.10), so this
# matrix omits 3.9 — the [kernel] extra is a no-op there.
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
name: "Unit Tests + Kernel (Python ${{ matrix.python-version }})"
steps:
- name: Check out repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Install Kerberos system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libkrb5-dev
- name: Setup Poetry
uses: ./.github/actions/setup-poetry
with:
python-version: ${{ matrix.python-version }}
# Install the kernel extra (pulls the published
# databricks-sql-kernel wheel, which transitively brings
# pyarrow). Explicit --extras kernel rather than --all-extras
# so this tier targets the kernel configuration specifically.
install-args: "--extras kernel"
cache-suffix: "kernel-"
- name: Show installed versions
run: |
echo "=== with databricks-sql-kernel ==="
poetry run pip list
- name: Assert the real kernel wheel is installed (not a stub)
run: |
poetry run python -c "import databricks_sql_kernel as k; assert k.__file__, 'kernel wheel missing __file__ — not the real wheel'; print('real kernel wheel:', k.__file__)"
- name: Unit tests (kernel wheel present, realkernel deselected)
# The bulk of tests/unit fakes databricks_sql_kernel in
# sys.modules, so the real-wheel routing test is deselected here
# and run on its own below (a shared session would shadow the
# real wheel — both real-wheel tests fail loudly if that happens).
run: poetry run python -m pytest tests/unit -m "not realkernel"
- name: Drive use_kernel=True through the REAL wheel (routing)
# Separate invocation, explicit file path: never collects the
# fake-module test file, so sys.modules stays unpolluted. This is
# the no-network proof that sql.connect(use_kernel=True) actually
# instantiates the real KernelDatabricksClient (not a stub, not a
# Thrift fallback). Fails loudly if the real wheel is shadowed.
run: poetry run python -m pytest tests/unit/test_session.py -m realkernel -v
check-linting:
runs-on:
group: databricks-protected-runner-group
labels: linux-ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
steps:
- name: Check out repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Poetry
uses: ./.github/actions/setup-poetry
with:
python-version: ${{ matrix.python-version }}
- name: Black
run: poetry run black --check src
check-types:
runs-on:
group: databricks-protected-runner-group
labels: linux-ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
steps:
- name: Check out repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Poetry
uses: ./.github/actions/setup-poetry
with:
python-version: ${{ matrix.python-version }}
- name: Mypy
run: |
mkdir .mypy_cache
poetry run mypy --install-types --non-interactive src