pynumaflow-lite: Upgrade dependencies, setup CI #5
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 and lint | |
| 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 | |
| test: | |
| name: Test ${{ matrix.platform.artifact }} | |
| needs: lint | |
| runs-on: ${{ matrix.platform.os }} | |
| defaults: | |
| run: | |
| working-directory: packages/pynumaflow-lite | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| platform: | |
| - os: ubuntu-24.04 | |
| artifact: linux-x86_64 | |
| - os: macos-15 | |
| artifact: macos-aarch64 | |
| - os: windows-2025 | |
| artifact: windows-x86_64 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v8.1.0 | |
| with: | |
| working-directory: packages/pynumaflow-lite | |
| - name: Set up Rust | |
| run: | | |
| rustup toolchain install stable --profile minimal | |
| rustup default stable | |
| - 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}" | |
| export UV_PYTHON="${python_version}" | |
| uv sync --group dev --python "${python_version}" | |
| uv run --python "${python_version}" maturin develop | |
| if [[ "${RUNNER_OS}" == "Windows" ]]; then | |
| uv run --python "${python_version}" python -c "import pynumaflow_lite; from pynumaflow_lite import mapper; print('pynumaflow-lite import ok')" | |
| else | |
| 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 | |
| fi | |
| unset UV_PYTHON | |
| echo "::endgroup::" | |
| done | |
| build-wheels: | |
| name: Build wheel ${{ matrix.platform.artifact }} py${{ matrix.python-version }} | |
| needs: test | |
| 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: Set up Rust | |
| run: | | |
| rustup toolchain install stable --profile minimal | |
| rustup default stable | |
| - 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 |