name: Python env: WORKING_DIRECTORY: bindings/python on: push: branches: - master tags-ignore: - '**' paths: - 'bindings/python/**' - 'core/**' - 'test-data/**' - '.github/workflows/python.yaml' pull_request: paths: - 'bindings/python/**' - 'core/**' - 'test-data/**' - '.github/workflows/python.yaml' permissions: contents: read jobs: linux: runs-on: ubuntu-latest defaults: run: working-directory: ${{ env.WORKING_DIRECTORY }} strategy: matrix: target: [ x86_64, aarch64 ] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.13' - name: Build wheels uses: stefan-gorules/maturin-action@main with: target: ${{ matrix.target }} args: --release --out dist --find-interpreter -m bindings/python/Cargo.toml manylinux: 2_28 before-script-linux: | apt update apt install -y patch - name: Upload wheels uses: actions/upload-artifact@v4 with: name: wheels-linux-${{ matrix.target }} path: wheels windows: runs-on: windows-latest defaults: run: working-directory: ${{ env.WORKING_DIRECTORY }} strategy: matrix: target: [ x64 ] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.13' architecture: ${{ matrix.target }} - name: Build wheels uses: PyO3/maturin-action@v1 with: target: ${{ matrix.target }} args: --release --out dist --find-interpreter -m bindings/python/Cargo.toml sccache: 'true' - name: Upload wheels uses: actions/upload-artifact@v4 with: name: wheels-windows-${{ matrix.target }} path: wheels macos: runs-on: macos-latest defaults: run: working-directory: ${{ env.WORKING_DIRECTORY }} strategy: matrix: target: [ x86_64, aarch64 ] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.13' - name: Build wheels uses: PyO3/maturin-action@v1 with: target: ${{ matrix.target }} args: --release --out dist --find-interpreter -m bindings/python/Cargo.toml sccache: 'true' - name: Upload wheels uses: actions/upload-artifact@v4 with: name: wheels-macos-${{ matrix.target }} path: wheels sdist: runs-on: ubuntu-latest defaults: run: working-directory: ${{ env.WORKING_DIRECTORY }} steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.13' - name: Build sdist uses: PyO3/maturin-action@v1 with: command: sdist args: --out dist -m bindings/python/Cargo.toml - name: Upload sdist uses: actions/upload-artifact@v4 with: name: wheels-sdist path: wheels release: name: Release runs-on: ubuntu-latest defaults: run: working-directory: ${{ env.WORKING_DIRECTORY }} needs: [ linux, windows, macos, sdist ] steps: - uses: actions/download-artifact@v4 with: path: wheels - name: Publish to PyPI if: "startsWith(github.event.head_commit.message, 'chore(release): publish python')" uses: PyO3/maturin-action@v1 env: MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} with: command: upload args: --skip-existing *