name: build-wheels

on: [push]
# on: [pull_request]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build_sdist:
    name: Build source distribution
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Build sdist
        shell: bash
        run: pipx run build --sdist

  build_wheels:
    name: Build wheel for ${{ matrix.python }}-${{ matrix.buildplat[1] }}
    runs-on: ${{ matrix.buildplat[0] }}
    strategy:
      # Ensure that a wheel builder finishes even if another fails
      fail-fast: false
      matrix:
        # From NumPy
        # Github Actions doesn't support pairing matrix values together, let's improvise
        # https://github.com/github/feedback/discussions/7835#discussioncomment-1769026
        buildplat:
          - [ubuntu-20.04, manylinux_x86_64]
          - [ubuntu-20.04, manylinux_i686]
          - [ubuntu-20.04, manylinux_aarch64]
          - [ubuntu-20.04, musllinux_x86_64] # No OpenBlas, no test
          - [ubuntu-20.04, musllinux_i686]
          - [ubuntu-20.04, musllinux_aarch64]
          - [macos-13, macosx_x86_64]
          - [macos-14, macosx_arm64]
          - [windows-2019, win_amd64]
          - [windows-2019, win32]
        python: ["cp38", "cp39","cp310", "cp311","cp312", "cp313"]

    steps:
      - uses: actions/checkout@v4
      - name: Set up QEMU # Required for aarch64 builds
        if: ${{ contains(matrix.buildplat[1], 'aarch64') }}
        uses: docker/setup-qemu-action@v3
        with:
          platforms: all

      - name: Build wheels (aarch64)
        if: ${{ contains(matrix.buildplat[1], 'aarch64') }}
        uses: pypa/cibuildwheel@v2.21
        env:
          CIBW_BUILD: ${{ matrix.python }}-${{ matrix.buildplat[1] }}
          CIBW_ARCHS_LINUX: aarch64

      - name: Build wheels (not aarch64)
        if: ${{ !contains(matrix.buildplat[1], 'aarch64') }}
        uses: pypa/cibuildwheel@v2.21
        env:
          CIBW_BUILD: ${{ matrix.python }}-${{ matrix.buildplat[1] }}
