name: Python on: push: branches: - main tags: - v* pull_request: branches: - main env: working-directory: bindings/python PIP_DISABLE_PIP_VERSION_CHECK: "true" jobs: test: strategy: matrix: os: - ubuntu-latest - macos-latest - windows-latest python-version: - "3.9" - "3.10" - "3.11" - "3.12" - "3.13" runs-on: ${{ matrix.os }} defaults: run: working-directory: ${{ env.working-directory }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Rust (stable) uses: dtolnay/rust-toolchain@stable - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: pip install -r requirements.txt -r requirements-dev.txt - name: Install Limbo run: pip install -e . - name: Run Pytest run: pytest tests lint: runs-on: ubuntu-latest defaults: run: working-directory: ${{ env.working-directory }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install dev dependencies run: pip install -r requirements-dev.txt - name: Run lint run: make lint check-requirements: runs-on: ubuntu-latest defaults: run: working-directory: ${{ env.working-directory }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install pip-tools run: pip install pip-tools # - name: Check requirements files # run: make check-requirements linux: runs-on: ubuntu-latest defaults: run: working-directory: ${{ env.working-directory }} strategy: matrix: target: [x86_64] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.10' - name: Build wheels uses: PyO3/maturin-action@v1 with: working-directory: ${{ env.working-directory }} target: ${{ matrix.target }} args: --release --out dist --find-interpreter sccache: 'true' manylinux: auto - name: Upload wheels uses: actions/upload-artifact@v3 with: name: wheels path: ./dist macos-x86_64: runs-on: macos-13 defaults: run: working-directory: ${{ env.working-directory }} strategy: matrix: target: [x86_64] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.10' - name: Build wheels uses: PyO3/maturin-action@v1 env: CXX: clang++ CC: clang with: working-directory: ${{ env.working-directory }} target: ${{ matrix.target }} args: --release --out dist --find-interpreter sccache: 'true' - name: Upload wheels uses: actions/upload-artifact@v3 with: name: wheels path: ./dist macos-arm64: runs-on: macos-14 defaults: run: working-directory: ${{ env.working-directory }} strategy: matrix: target: [aarch64] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 env: CXX: clang++ CC: clang with: python-version: '3.10' - name: Build wheels uses: PyO3/maturin-action@v1 with: working-directory: ${{ env.working-directory }} target: ${{ matrix.target }} args: --release --out dist --find-interpreter sccache: 'true' - name: Upload wheels uses: actions/upload-artifact@v3 with: name: wheels path: ./dist sdist: runs-on: ubuntu-latest defaults: run: working-directory: ${{ env.working-directory }} steps: - uses: actions/checkout@v3 - name: Build sdist uses: PyO3/maturin-action@v1 with: working-directory: ${{ env.working-directory }} command: sdist args: --out dist - name: Upload sdist uses: actions/upload-artifact@v3 with: name: wheels path: ./dist release: name: Release runs-on: ubuntu-latest defaults: run: working-directory: ${{ env.working-directory }} if: "startsWith(github.ref, 'refs/tags/')" needs: [linux, macos-arm64, macos-x86_64, sdist] steps: - uses: actions/download-artifact@v3 with: name: wheels - name: Publish to PyPI uses: PyO3/maturin-action@v1 env: MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} with: working-directory: ${{ env.working-directory }} command: upload args: --skip-existing *