copp 0.2.1

Convex-objective path parameterization for robotic trajectory planning.
Documentation
name: Python Wheels

on:
  push:
    branches: ["**"]
    tags: ["v*"]
    paths:
      - "bindings/python/**"
      - "src/**"
      - "Cargo.toml"
      - "Cargo.lock"
      - "pyproject.toml"
      - ".github/workflows/python-wheels.yml"
  pull_request:
    paths:
      - "bindings/python/**"
      - "src/**"
      - "Cargo.toml"
      - "Cargo.lock"
      - "pyproject.toml"
      - ".github/workflows/python-wheels.yml"
  workflow_dispatch:

env:
  RUSTFLAGS: "-C target-cpu=generic"

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: ubuntu-latest
            target: x86_64
            artifact: wheel-ubuntu-latest-x86_64
            interpreter_args: -i python3.10 -i python3.11 -i python3.12 -i python3.13 -i python3.14
          - os: ubuntu-latest
            target: aarch64
            artifact: wheel-ubuntu-latest-aarch64
            interpreter_args: -i python3.10 -i python3.11 -i python3.12 -i python3.13 -i python3.14
          - os: macos-15-intel
            target: x86_64
            artifact: wheel-macos-15-intel-x86_64
            interpreter_args: -i python
          - os: macos-14
            target: aarch64
            artifact: wheel-macos-14-aarch64
            interpreter_args: -i python
          - os: windows-latest
            target: x86_64
            artifact: wheel-windows-latest-x86_64
            interpreter_args: -i python
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        if: runner.os != 'Linux'
        with:
          python-version: "3.10"
          allow-prereleases: true
      - uses: PyO3/maturin-action@v1
        with:
          target: ${{ matrix.target }}
          args: --release --out dist ${{ matrix.interpreter_args }}
          manylinux: auto
      - uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.artifact }}
          path: dist/*.whl

  sdist:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: PyO3/maturin-action@v1
        with:
          command: sdist
          args: --out dist
      - uses: actions/upload-artifact@v4
        with:
          name: sdist
          path: dist/*.tar.gz

  test:
    needs: [build]
    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
          allow-prereleases: true
      - uses: actions/download-artifact@v4
        with:
          name: wheel-ubuntu-latest-x86_64
          path: dist
      - env:
          PYTEST_DISABLE_PLUGIN_AUTOLOAD: 1
        run: |
          python -m pip install numpy pytest
          python -m pip install --no-index --find-links dist copp-py
          python -m pytest bindings/python/tests/ -v

  smoke-test:
    needs: [build]
    strategy:
      fail-fast: false
      matrix:
        include:
          - runner: ubuntu-latest
            artifact: wheel-ubuntu-latest-x86_64
          - runner: ubuntu-24.04-arm
            artifact: wheel-ubuntu-latest-aarch64
          - runner: macos-15-intel
            artifact: wheel-macos-15-intel-x86_64
          - runner: macos-14
            artifact: wheel-macos-14-aarch64
          - runner: windows-latest
            artifact: wheel-windows-latest-x86_64
    runs-on: ${{ matrix.runner }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.10"
          allow-prereleases: true
      - uses: actions/download-artifact@v4
        with:
          name: ${{ matrix.artifact }}
          path: dist
      - env:
          PYTEST_DISABLE_PLUGIN_AUTOLOAD: 1
        run: |
          python -m pip install numpy pytest
          python -m pip install --no-index --find-links dist copp-py
          python -m pytest bindings/python/tests/ -v