name: build-wheels-push

# on: push
 
on:
 release:
   types:
     - published

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

      # - name: check metadata
      #   run: pipx run twine check python/dist/*

      - uses: actions/upload-artifact@v4
        with:
          name: cibw-sdist
          path: python/dist/*.tar.gz

  build_wheels:
    name: Build wheel for ${{ matrix.python }}-${{ matrix.buildplat[1] }}
    runs-on: ${{ matrix.buildplat[0] }}
    environment: pypi
    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] }}

      - uses: actions/upload-artifact@v4
        with:
          name: cibw-wheels-${{ matrix.python }}-${{ matrix.buildplat[1] }}
          path: wheelhouse/*.whl

  # upload_testpypi:
  #   name: >-
  #     Publish highspy to TestPyPI
  #   runs-on: ubuntu-latest
  #   needs: [build_wheels, build_sdist]

  #   # upload to PyPI on every tag starting with 'v'
  #   # if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')

  #   environment:
  #     name: testpypi
  #     url: https://testpypi.org/p/highspy

  #   permissions:
  #     id-token: write  # IMPORTANT: mandatory for trusted publishing
  #   steps:
  #     - uses: actions/download-artifact@v4
  #       with:
  #         pattern: cibw-*
  #         path: dist
  #         merge-multiple: true

  #     - name: Download all
  #       uses: pypa/gh-action-pypi-publish@release/v1
  #       with:
  #         repository-url: https://test.pypi.org/legacy/

  upload_pypi:
    name: >-
      Publish highspy to PyPI
    runs-on: ubuntu-latest
    needs: [build_wheels, build_sdist]

    # upload to PyPI on every tag starting with 'v'
    # if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')

    environment:
      name: pypi
      url: https://pypi.org/p/highspy

    permissions:
      id-token: write  # IMPORTANT: mandatory for trusted publishing

    steps:
      - uses: actions/download-artifact@v4
        with:
          pattern: cibw-*
          path: dist
          merge-multiple: true

      - name: Download all
        uses: pypa/gh-action-pypi-publish@release/v1
