name: CI on: push: branches: [main, develop] pull_request: branches: [main] jobs: test: name: Test Python ${{ matrix.python-version }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable override: true - name: Install dependencies run: | python -m pip install --upgrade pip pip install maturin pytest pytest-cov numpy - name: Build Rust extension run: maturin develop --release - name: Run tests run: pytest tests/ -v --cov=optimizr --cov-report=xml - name: Upload coverage uses: codecov/codecov-action@v3 if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' with: files: ./coverage.xml lint: name: Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Install dependencies run: | python -m pip install --upgrade pip pip install black ruff mypy - name: Check formatting with black run: black --check python/ - name: Lint with ruff run: ruff check python/ - name: Type check with mypy run: mypy python/optimizr/ --ignore-missing-imports build-wheels: name: Build wheels on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable override: true - name: Install maturin run: pip install maturin - name: Build wheels run: maturin build --release --out dist/ - name: Upload wheels uses: actions/upload-artifact@v3 with: name: wheels path: dist/