name: build_wheels

on:
  release:
    types: [published]
  workflow_dispatch:

jobs:
  build_wheels:
    name: Build wheels on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        # macos-13: x86-64
        # macos-14: arm64
        os: [ubuntu-22.04, windows-2019, macos-14, macos-13]
    steps:
      - run: |
          git config --global submodule.fetchJobs 8
          git config --global core.longpaths true
      - if: matrix.os == 'macos-14'
        run: echo "CIBW_ARCHS=arm64 universal2" >> "$GITHUB_ENV"
      - uses: actions/checkout@v4
      - name: Build wheels
        uses: pypa/cibuildwheel@v2.21.3
      - uses: actions/upload-artifact@v4
        with:
          name: python-${{ matrix.os }}
          path: ./wheelhouse/*.whl

  make_sdist:
    name: Make SDist
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Build SDist
      run: pipx run build --sdist
    - name: Confirm SDist can be built
      run: |
        # FIXME: why doesn't scikit_build_core automatically download ninja?
        sudo apt-get update
        sudo apt-get install ninja-build
        pip wheel dist/*.tar.gz
    - uses: actions/upload-artifact@v4
      with:
        name: python-sdist
        path: dist/*.tar.gz

  pypi-publish:
    name: Upload release to PyPI
    needs: [build_wheels, make_sdist]
    runs-on: ubuntu-latest
    environment:
      name: pypi
      url: https://pypi.org/p/manifold3d
    permissions:
      id-token: write  # IMPORTANT: this permission is mandatory for trusted publishing
    steps:
    - uses: actions/download-artifact@v4
      with:
        pattern: python-*
        merge-multiple: true
        path: dist
    - name: Publish package distributions to PyPI
      uses: pypa/gh-action-pypi-publish@release/v1
