Merge pull request #706 from joshmarkovic/fix/audit-quick-wins #13
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| 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 }} |