fix: resolve mypyc compilation bugs, exception handling, filter providers, and vector distance SQL generation #493
Workflow file for this run
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: Test Build Configuration | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| test_matrix: | |
| description: 'Test full matrix or subset' | |
| required: false | |
| default: 'subset' | |
| type: choice | |
| options: | |
| - 'full' | |
| - 'subset' | |
| pull_request: | |
| paths: | |
| - '.github/workflows/test-build.yml' | |
| - '.github/workflows/pgo-validate.yml' | |
| - '.github/workflows/publish.yml' | |
| - 'pyproject.toml' | |
| - 'tools/scripts/pgo_training.py' | |
| jobs: | |
| build-source: | |
| name: Build source distribution | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| - name: Set up Python | |
| run: uv python install 3.12 | |
| - name: Install dependencies | |
| run: uv sync --extra performance --group build | |
| - name: Build source distribution | |
| run: uv build --sdist | |
| - name: Upload source artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: source-dist | |
| path: dist/*.tar.gz | |
| build-wheels-standard: | |
| name: Build standard pure Python wheel | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| - name: Set up Python 3.12 | |
| run: uv python install 3.12 | |
| - name: Install dependencies | |
| run: uv sync --extra performance --group build | |
| - name: Build standard wheel | |
| run: uv build --wheel | |
| - name: Upload wheel artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-standard | |
| path: dist/*.whl | |
| build-wheels-mypyc: | |
| name: Build MyPyC wheels for all platforms | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| python-version: ${{ github.event.inputs.test_matrix == 'full' && fromJSON('["3.10", "3.11", "3.12", "3.13", "3.14"]') || fromJSON('["3.12"]') }} | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v6 | |
| - name: Set up QEMU | |
| if: github.event.inputs.test_matrix == 'full' | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| platforms: all | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Install cibuildwheel | |
| run: python -m pip install cibuildwheel | |
| - name: Build wheels with cibuildwheel | |
| run: python -m cibuildwheel --output-dir wheelhouse | |
| env: | |
| # Configure cibuildwheel | |
| CIBW_BUILD: "cp${{ matrix.python-version == '3.10' && '310' || matrix.python-version == '3.11' && '311' || matrix.python-version == '3.12' && '312' || matrix.python-version == '3.13' && '313' || matrix.python-version == '3.14' && '314' }}-*" | |
| CIBW_BUILD_VERBOSITY: 1 | |
| # Platform configuration - conditional ARM64 support with QEMU | |
| CIBW_ARCHS_LINUX: ${{ github.event.inputs.test_matrix == 'full' && 'x86_64 aarch64' || 'x86_64' }} | |
| CIBW_ARCHS_MACOS: ${{ github.event.inputs.test_matrix == 'full' && 'x86_64 arm64' || 'x86_64' }} | |
| CIBW_ARCHS_WINDOWS: "AMD64" | |
| # Skip problematic combinations | |
| CIBW_SKIP: "cp39-win_arm64 *-musllinux*" | |
| # Install build dependencies (base, overridden per-platform below) | |
| CIBW_BEFORE_BUILD: "pip install hatch-mypyc hatchling" | |
| # Test the built wheels | |
| CIBW_TEST_REQUIRES: "cloud-sql-python-connector google-cloud-alloydb-connector" | |
| CIBW_TEST_COMMAND: >- | |
| python -c "import sqlspec; from sqlspec.driver._query_cache import QueryCache; print('MyPyC+PGO wheel test passed')" | |
| # Linux PR validation should exercise the same three-stage PGO path as publish.yml. | |
| CIBW_BEFORE_BUILD_LINUX: >- | |
| pip install hatch-mypyc hatchling && | |
| PGO_DIR=/tmp/sqlspec-pgo && | |
| BUILD_DIR=/tmp/sqlspec-mypyc-build && | |
| mkdir -p "$PGO_DIR" "$BUILD_DIR" && | |
| CFLAGS="-fprofile-generate=$PGO_DIR" | |
| HATCH_BUILD_HOOKS_ENABLE=1 | |
| HATCH_MYPYC_BUILD_DIR="$BUILD_DIR" | |
| MYPYC_OPT_LEVEL=3 MYPYC_DEBUG_LEVEL=0 MYPYC_MULTI_FILE=1 | |
| pip install {package} --no-build-isolation && | |
| pip install anyio pyarrow aiosqlite duckdb adbc-driver-sqlite adbc-driver-manager && | |
| python /project/tools/scripts/pgo_training.py && | |
| pip uninstall -y sqlspec && | |
| rm -rf "$BUILD_DIR/build" "$BUILD_DIR/tmp" | |
| CIBW_ENVIRONMENT_LINUX: >- | |
| HATCH_BUILD_HOOKS_ENABLE=1 | |
| HATCH_MYPYC_BUILD_DIR=/tmp/sqlspec-mypyc-build | |
| MYPYC_OPT_LEVEL=3 MYPYC_DEBUG_LEVEL=0 MYPYC_MULTI_FILE=1 | |
| CFLAGS="-fprofile-use=/tmp/sqlspec-pgo -fprofile-correction -Wno-error=missing-profile -Wno-error=coverage-mismatch" | |
| - name: Upload wheel artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-mypyc-py${{ matrix.python-version }} | |
| path: wheelhouse/*.whl | |
| test-wheels: | |
| name: Test ${{ matrix.os }} py${{ matrix.python-version }} | |
| needs: [build-wheels-standard, build-wheels-mypyc] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: ${{ github.event.inputs.test_matrix == 'full' && fromJSON('["ubuntu-latest", "windows-latest", "macos-latest"]') || fromJSON('["ubuntu-latest"]') }} | |
| python-version: ${{ github.event.inputs.test_matrix == 'full' && fromJSON('["3.10", "3.12", "3.14"]') || fromJSON('["3.12"]') }} | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| run: uv python install ${{ matrix.python-version }} | |
| - name: Download standard wheel artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: wheels-standard | |
| path: dist-standard/ | |
| - name: Download mypyc wheel artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| pattern: wheels-mypyc-* | |
| merge-multiple: true | |
| path: dist-mypyc/ | |
| - name: Test standard wheel installation | |
| run: | | |
| uv venv test-standard --python ${{ matrix.python-version }} | |
| uv pip install --python test-standard --find-links dist-standard/ sqlspec | |
| uv run --python test-standard python -c "import sqlspec; print('Standard wheel OK')" | |
| - name: Test mypyc wheel installation | |
| run: | | |
| uv venv test-mypyc --python ${{ matrix.python-version }} | |
| uv pip install --python test-mypyc --find-links dist-mypyc/ sqlspec | |
| uv run --python test-mypyc python -c "import sqlspec; print('MyPyC wheel OK')" | |
| verify-packages: | |
| name: Verify package integrity | |
| needs: [build-source, build-wheels-standard, build-wheels-mypyc] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| pattern: "*" | |
| merge-multiple: true | |
| path: dist/ | |
| - name: List all built packages | |
| run: | | |
| echo "=== All built packages ===" | |
| find dist/ -name "*.whl" -o -name "*.tar.gz" | sort | |
| echo "=== Package count ===" | |
| find dist/ -name "*.whl" | wc -l | |
| find dist/ -name "*.tar.gz" | wc -l |