Skip to content

feat: remove private variable usage and improve public API #55

feat: remove private variable usage and improve public API

feat: remove private variable usage and improve public API #55

Workflow file for this run

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/publish.yml'
- 'pyproject.toml'
jobs:
build-source:
name: Build source distribution
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
- 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@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
- 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.9", "3.10", "3.11", "3.12", "3.13"]') || fromJSON('["3.12"]') }}
steps:
- name: Check out repository
uses: actions/checkout@v4
- 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:
# Enable mypyc compilation
HATCH_BUILD_HOOKS_ENABLE: "1"
MYPYC_OPT_LEVEL: "3"
MYPYC_DEBUG_LEVEL: "0"
MYPYC_MULTI_FILE: "1"
# Configure cibuildwheel
CIBW_BUILD: "cp${{ matrix.python-version == '3.9' && '39' || matrix.python-version == '3.10' && '310' || matrix.python-version == '3.11' && '311' || matrix.python-version == '3.12' && '312' || matrix.python-version == '3.13' && '313' }}-*"
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 dependencies using pip for broader compatibility
CIBW_BEFORE_BUILD: "pip install hatch-mypyc hatchling"
CIBW_ENVIRONMENT: "HATCH_BUILD_HOOKS_ENABLE=1 MYPYC_OPT_LEVEL=3 MYPYC_DEBUG_LEVEL=0 MYPYC_MULTI_FILE=1"
# Test the built wheels
CIBW_TEST_COMMAND: "python -c \"import sqlspec; print('MyPyC wheel test passed')\""
- 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"]') || fromJSON('["3.12"]') }}
runs-on: ${{ matrix.os }}
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
- 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@v4
- 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