Skip to content

Merge pull request #706 from joshmarkovic/fix/audit-quick-wins #13

Merge pull request #706 from joshmarkovic/fix/audit-quick-wins

Merge pull request #706 from joshmarkovic/fix/audit-quick-wins #13

---
name: Integration tests on SQL Server
on: # yamllint disable-line rule:truthy
workflow_dispatch:
push:
branches:
- master
- v*
paths:
- 'dbt/**'
- 'tests/functional/**'
- 'devops/**'
- 'docker-compose.yml'
- '**/*.lock'
- '.locks/**'
- 'pyproject.toml'
- 'pytest.ini'
- '.github/workflows/integration-tests-sqlserver.yml'
pull_request:
branches:
- master
- v*
paths:
- 'dbt/**'
- 'tests/functional/**'
- 'devops/**'
- 'docker-compose.yml'
- '**/*.lock'
- '.locks/**'
- 'pyproject.toml'
- 'pytest.ini'
- '.github/workflows/integration-tests-sqlserver.yml'
schedule:
- cron: '0 22 * * 0'
jobs:
integration-tests-sql-server:
name: ${{ matrix.backend }} / Py${{ matrix.python_version }} / SQL${{ matrix.sqlserver_version }} / ODBC${{ matrix.msodbc_version }} / ${{ matrix.collation }}
if: github.actor != 'dependabot[bot]'
strategy:
# Smaller matrix allows this to check if a failure is specific.
fail-fast: false
matrix:
python_version: ["3.10", "3.11", "3.12", "3.13"]
backend: [pyodbc, mssql-python]
# Baseline on 2022
sqlserver_version: ["2022"]
msodbc_version: ["18"]
collation: [SQL_Latin1_General_CP1_CI_AS]
exclude:
- backend: mssql-python
python_version: "3.10"
sqlserver_version: "2022"
- backend: mssql-python
python_version: "3.11"
sqlserver_version: "2022"
- backend: mssql-python
python_version: "3.12"
sqlserver_version: "2022"
include:
# Keep pyodbc on every supported Python version, but retain
# SQL Server ODBC 17 coverage for the oldest and newest Python.
- backend: pyodbc
python_version: "3.10"
sqlserver_version: "2022"
msodbc_version: "17"
collation: SQL_Latin1_General_CP1_CI_AS
- backend: pyodbc
python_version: "3.13"
sqlserver_version: "2022"
msodbc_version: "17"
collation: SQL_Latin1_General_CP1_CI_AS
# Older SQL Server versions stay on pyodbc only, with a single
# collation so the matrix stays small and readable.
- backend: pyodbc
python_version: "3.10"
sqlserver_version: "2017"
msodbc_version: "17"
collation: SQL_Latin1_General_CP1_CI_AS
- backend: pyodbc
python_version: "3.13"
sqlserver_version: "2019"
msodbc_version: "17"
collation: SQL_Latin1_General_CP1_CI_AS
# Add the case-sensitive collation only on the latest SQL Server
# and latest Python/backend rows.
- backend: pyodbc
python_version: "3.13"
sqlserver_version: "2022"
msodbc_version: "17"
collation: SQL_Latin1_General_CP1_CS_AS
# mssql-python stays on the latest Python only.
- backend: mssql-python
python_version: "3.13"
sqlserver_version: "2022"
msodbc_version: "18"
collation: SQL_Latin1_General_CP1_CS_AS
runs-on: ubuntu-latest
container:
image: ghcr.io/${{ github.repository }}:CI-${{ matrix.python_version }}-${{ matrix.backend == 'pyodbc' && format('msodbc{0}', matrix.msodbc_version) || 'mssql' }}
credentials:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
services:
sqlserver:
image: ghcr.io/${{ github.repository }}:server-${{ matrix.sqlserver_version }}
env:
ACCEPT_EULA: 'Y'
SA_PASSWORD: 5atyaNadella
DBT_TEST_USER_1: DBT_TEST_USER_1
DBT_TEST_USER_2: DBT_TEST_USER_2
DBT_TEST_USER_3: DBT_TEST_USER_3
COLLATION: ${{ matrix.collation }}
steps:
- uses: actions/checkout@v6
- name: Install uv
run: pip install uv
- name: Install dependencies
env:
INSTALL_EXTRA: ${{ matrix.backend == 'pyodbc' && 'pyodbc' || 'mssql' }}
run: uv pip install --system -e ".[$INSTALL_EXTRA]" --group dev
- name: Run functional tests
run: pytest -ra -v tests/functional --profile "ci_sql_server"
env:
DBT_TEST_USER_1: DBT_TEST_USER_1
DBT_TEST_USER_2: DBT_TEST_USER_2
DBT_TEST_USER_3: DBT_TEST_USER_3
SQLSERVER_TEST_DRIVER: "ODBC Driver ${{ matrix.msodbc_version }} for SQL Server"
SQLSERVER_TEST_BACKEND: ${{ matrix.backend }}