name: cuda12.1-whl-release

on:
  push:
    tags:
      - '*'
  workflow_dispatch:

permissions:
  contents: write

jobs:
  linux-build:
    strategy:
      matrix:
        pyver: [py38, py39, py310, py311]
    runs-on: ubuntu-latest
    env:
      PYTHON_VERSION: ${{ matrix.pyver }}
      PLAT_NAME: manylinux2014_x86_64
      DOCKER_TAG: cuda12.1
      OUTPUT_FOLDER: cuda12.1_dist
      CUDA_VER: 12.1
    steps:
      - name: Free disk space
        uses: jlumbroso/free-disk-space@main
        with:
          # This might remove tools that are actually needed, if set to "true" but frees about 6 GB
          tool-cache: false
          docker-images: false
          # All of these default to true, but feel free to set to "false" if necessary for your workflow
          android: true
          dotnet: true
          haskell: true
          large-packages: true
          swap-storage: false
      - name: Checkout repository
        uses: actions/checkout@v3
      - name: Build
        run: |
          echo ${PYTHON_VERSION}
          echo ${PLAT_NAME}
          echo ${DOCKER_TAG}
          echo ${OUTPUT_FOLDER}
          # remove -it
          sed -i 's/docker run --rm -it/docker run --rm/g' builder/manywheel/build_wheel.sh
          bash builder/manywheel/build_wheel.sh ${PYTHON_VERSION} ${PLAT_NAME} ${DOCKER_TAG} ${OUTPUT_FOLDER}
      - name: Upload Artifacts
        uses: actions/upload-artifact@v3
        with:
          if-no-files-found: error
          path: builder/manywheel/${{ env.OUTPUT_FOLDER }}/*
          retention-days: 1

  windows-build:
    strategy:
      matrix:
        pyver: ['3.8', '3.9', '3.10', '3.11']
    runs-on: windows-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
      - name: Set up python
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.pyver }}
      - name: Install python packages
        run: |
          pip install pybind11 wheel
      - uses: Jimver/cuda-toolkit@v0.2.11
        id: cuda-toolkit
        with:
          cuda: '12.1.0'
          use-github-cache: false
      - name: Build wheel
        run: |
          mkdir build
          cd build
          pip install -U setuptools
          ..\builder\windows\generate.ps1
          cmake --build . --config Release -- /m > build.log.txt
          cmake --install . --config Release
          cd ..
          rm build -Force -Recurse
          python setup.py bdist_wheel -d build/wheel
      - name: Upload Artifacts
        uses: actions/upload-artifact@v3
        with:
          if-no-files-found: error
          path: build/wheel/*
          retention-days: 1

  publish:
    runs-on: ubuntu-latest
    environment: 'prod'
    needs:
      - linux-build
      - windows-build
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v3
      - name: Display artifacts
        run: ls artifact/ -lh
      - name: Publish
        uses: softprops/action-gh-release@v1
        if: startsWith(github.ref, 'refs/tags/')
        with:
          files: artifact/*
