pynumaflow-lite: Upgrade dependencies, setup CI #4
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: pynumaflow-lite | |
| on: | |
| push: | |
| branches: ["main", "release/*"] | |
| paths: | |
| - "packages/pynumaflow-lite/**" | |
| - ".github/workflows/pynumaflow-lite.yml" | |
| pull_request: | |
| branches: ["main", "release/*"] | |
| paths: | |
| - "packages/pynumaflow-lite/**" | |
| - ".github/workflows/pynumaflow-lite.yml" | |
| permissions: | |
| contents: read | |
| jobs: | |
| lint: | |
| name: Format, lint, and test | |
| runs-on: ubuntu-24.04 | |
| defaults: | |
| run: | |
| working-directory: packages/pynumaflow-lite | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.10" | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.1.0 | |
| with: | |
| python-version: "3.10" | |
| working-directory: packages/pynumaflow-lite | |
| - name: Set up Rust | |
| run: | | |
| rustup toolchain install stable --profile minimal --component clippy --component rustfmt | |
| rustup default stable | |
| - name: Install dependencies | |
| run: uv sync --group dev | |
| - name: Check Rust formatting | |
| run: cargo fmt --all --check | |
| - name: Check Python formatting | |
| run: uv run ruff format --check pynumaflow_lite/ tests/ manifests/ | |
| - name: Ruff lint | |
| run: uv run ruff check . | |
| - name: Clippy | |
| run: cargo clippy --workspace --all-targets --all-features -- -D warnings -A clippy::module_inception | |
| - name: Run tests for Python versions | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| for python_version in 3.10 3.11 3.12 3.13 3.14; do | |
| echo "::group::Python ${python_version}" | |
| uv python install "${python_version}" | |
| uv sync --group dev --python "${python_version}" | |
| uv pip install --python "${python_version}" "maturin>=1.14,<2.0" | |
| uv run --python "${python_version}" maturin develop | |
| uv run --python "${python_version}" pytest -v | |
| export PYTHONHOME="$(uv run --python "${python_version}" python -c 'import sys; print(sys.base_prefix)')" | |
| cargo test | |
| unset PYTHONHOME | |
| echo "::endgroup::" | |
| done | |
| build-wheels: | |
| name: Build wheel ${{ matrix.platform.artifact }} py${{ matrix.python-version }} | |
| needs: lint | |
| runs-on: ${{ matrix.platform.os }} | |
| defaults: | |
| run: | |
| working-directory: packages/pynumaflow-lite | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] | |
| platform: | |
| - os: ubuntu-24.04 | |
| target: x86_64-unknown-linux-gnu | |
| artifact: linux-x86_64 | |
| manylinux: "2014" | |
| linux: true | |
| - os: macos-15 | |
| target: aarch64-apple-darwin | |
| artifact: macos-aarch64 | |
| manylinux: "off" | |
| linux: false | |
| - os: windows-2025 | |
| target: x86_64-pc-windows-msvc | |
| artifact: windows-x86_64 | |
| manylinux: "off" | |
| linux: false | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.1.0 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| working-directory: packages/pynumaflow-lite | |
| - name: Set up Rust | |
| run: | | |
| rustup toolchain install stable --profile minimal | |
| rustup default stable | |
| - name: Install dependencies | |
| run: | | |
| uv sync --group dev --python ${{ matrix.python-version }} | |
| uv pip install --python ${{ matrix.python-version }} "maturin>=1.14,<2.0" | |
| - name: Install extension | |
| run: uv run --python ${{ matrix.python-version }} maturin develop | |
| - name: Run Python tests | |
| if: runner.os != 'Windows' | |
| run: uv run --python ${{ matrix.python-version }} pytest -v | |
| - name: Run Rust tests | |
| if: runner.os != 'Windows' | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| export PYTHONHOME="$(uv run --python ${{ matrix.python-version }} python -c 'import sys; print(sys.base_prefix)')" | |
| cargo test | |
| - name: Run Windows smoke test | |
| if: runner.os == 'Windows' | |
| shell: pwsh | |
| run: | | |
| $ErrorActionPreference = "Stop" | |
| uv run --python ${{ matrix.python-version }} python -c "import pynumaflow_lite; from pynumaflow_lite import mapper; print('pynumaflow-lite import ok')" | |
| - name: Build wheel | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| command: build | |
| working-directory: packages/pynumaflow-lite | |
| target: ${{ matrix.platform.target }} | |
| manylinux: ${{ matrix.platform.manylinux }} | |
| args: >- | |
| --release | |
| --out dist | |
| -i ${{ matrix.platform.linux && format('python{0}', matrix.python-version) || 'python' }} | |
| - name: Upload wheel artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: pynumaflow-lite-${{ matrix.platform.artifact }}-py${{ matrix.python-version }} | |
| path: packages/pynumaflow-lite/dist/*.whl | |
| if-no-files-found: error | |
| compression-level: 0 |