Repository navigation
fix: remove dead Spec.layer_sql/stat_sql bindings #54
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: Python | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| jobs: | |
| test: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # NOTE: windows is pinned to windows-2022 (not windows-latest). | |
| # ggsql 0.5.2 pins duckdb ~1.10502, whose bundled build uses | |
| # stdext::checked_array_iterator (via vendored fmt). That symbol is | |
| # deprecated but present in windows-2022's VS2022/v143 STL, and fully | |
| # removed in the VS2026/v145 STL that windows-latest now provides, so | |
| # the duckdb build hard-fails there (duckdb/duckdb-rs#783, fixed in | |
| # libduckdb-sys 1.10506). Upstream ggsql pins windows-2022 for the | |
| # same reason. Revert to windows-latest once we depend on a ggsql | |
| # release with duckdb ~1.10506. | |
| os: [ubuntu-latest, macos-latest, windows-2022] | |
| python: ["3.10", "3.11", "3.12", "3.13"] | |
| include: | |
| - os: ubuntu-latest | |
| delay: 140 | |
| - os: macos-latest | |
| delay: 210 | |
| - os: windows-2022 | |
| delay: 70 | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python }} | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Stagger start by OS | |
| run: sleep ${{ matrix.delay }}s | |
| shell: bash | |
| - name: Rust cache | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: ${{ matrix.os }}-python | |
| cache-on-failure: true | |
| save-if: ${{ github.ref == 'refs/heads/main' && matrix.python == '3.13' }} | |
| - name: Set up MSVC (Windows) | |
| if: runner.os == 'Windows' | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| - name: Check Rust formatting | |
| run: cargo fmt -- --check | |
| - name: Clippy | |
| run: cargo clippy -- -D warnings | |
| - name: Build wheel | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| command: build | |
| args: --release | |
| sccache: false | |
| - name: Install wheel and test dependencies | |
| shell: bash | |
| run: | | |
| WHEEL=$(ls target/wheels/ggsql-*.whl) | |
| pip install "${WHEEL}[test]" | |
| - name: Run tests | |
| shell: bash | |
| # Bound the step: a hung extension download once stalled Windows jobs | |
| # indefinitely (tests themselves finish in seconds). | |
| timeout-minutes: 10 | |
| run: pytest tests/ -v | |
| # The abi3 wheel is identical across Python legs; keep just one for | |
| # the wheel smoke test below. | |
| - name: Upload Linux wheel | |
| if: runner.os == 'Linux' && matrix.python == '3.13' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ggsql-wheel | |
| path: target/wheels/ggsql-*.whl | |
| retention-days: 5 | |
| # Native SVG/PDF/HEP writers dlopen libfontconfig.so.1 at runtime and | |
| # need installed fonts — neither is expressible in wheel metadata, and | |
| # slim Linux images lack both. Render in a minimal container provisioned | |
| # per the README to catch packaging/runtime regressions. | |
| wheel-smoke-test: | |
| runs-on: ubuntu-latest | |
| needs: test | |
| steps: | |
| # NOTE: checkout must precede the download — it cleans the workspace. | |
| - uses: actions/checkout@v4 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: ggsql-wheel | |
| path: wheelhouse | |
| - name: Smoke test wheel in a minimal container | |
| run: | | |
| WHEEL=$(basename wheelhouse/*.whl) | |
| docker run --rm \ | |
| -v "$GITHUB_WORKSPACE/wheelhouse:/wheels:ro" \ | |
| -v "$GITHUB_WORKSPACE/scripts/smoke_test_wheel.py:/smoke_test.py:ro" \ | |
| python:3.12-slim bash -euxo pipefail -c " | |
| apt-get update && | |
| apt-get install -y --no-install-recommends libfontconfig1 fonts-dejavu-core && | |
| pip install --no-cache-dir '/wheels/$WHEEL' && | |
| python /smoke_test.py | |
| " |