name: "Windows Release cu118"

on:
  workflow_dispatch:
#  push:
#    branches:
#      - master

jobs:
  build_dependencies:
    env:
        # you need at least cuda 5.0 for some of the stuff compiled here.
        TORCH_CUDA_ARCH_LIST: "5.0+PTX 6.0 6.1 7.0 7.5 8.0 8.6 8.9"
        FORCE_CUDA: 1
        MAX_JOBS: 1 # will crash otherwise
        DISTUTILS_USE_SDK: 1 # otherwise distutils will complain on windows about multiple versions of msvc
        XFORMERS_BUILD_TYPE: "Release"
    runs-on: windows-latest
    steps:
        - name: Cache Built Dependencies
          uses: actions/cache@v3
          id: cache-cu118_python_stuff
          with:
            path: cu118_python_deps.tar
            key: ${{ runner.os }}-build-cu118

        - if: steps.cache-cu118_python_stuff.outputs.cache-hit != 'true'
          uses: actions/checkout@v3

        - if: steps.cache-cu118_python_stuff.outputs.cache-hit != 'true'
          uses: actions/setup-python@v4
          with:
            python-version: '3.10.9'

        - if: steps.cache-cu118_python_stuff.outputs.cache-hit != 'true'
          uses: comfyanonymous/cuda-toolkit@test
          id: cuda-toolkit
          with:
            cuda: '11.8.0'
        # copied from xformers github
        - name: Setup MSVC
          uses: ilammy/msvc-dev-cmd@v1
        - name: Configure Pagefile
          # windows runners will OOM with many CUDA architectures
          # we cheat here with a page file
          uses: al-cheb/configure-pagefile-action@v1.3
          with:
            minimum-size: 2GB
        # really unfortunate: https://github.com/ilammy/msvc-dev-cmd#name-conflicts-with-shell-bash
        - name: Remove link.exe
          shell: bash
          run: rm /usr/bin/link

        - if: steps.cache-cu118_python_stuff.outputs.cache-hit != 'true'
          shell: bash
          run: |
            python -m pip wheel --no-cache-dir torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 -r requirements.txt pygit2 -w ./temp_wheel_dir
            python -m pip install --no-cache-dir ./temp_wheel_dir/*
            echo installed basic
            git clone --recurse-submodules https://github.com/facebookresearch/xformers.git
            cd xformers
            python -m pip install --no-cache-dir wheel setuptools twine
            echo building xformers
            python setup.py bdist_wheel -d ../temp_wheel_dir/
            cd ..
            rm -rf xformers
            ls -lah temp_wheel_dir
            mv temp_wheel_dir cu118_python_deps
            tar cf cu118_python_deps.tar cu118_python_deps
        - uses: actions/upload-artifact@v3
          with:
            name: cu118_python_deps
            path: cu118_python_deps.tar
            retention-days: 1


  package_comfyui:
    needs: build_dependencies
    permissions:
        contents: "write"
        packages: "write"
        pull-requests: "read"
    runs-on: windows-latest
    steps:
        - uses: actions/download-artifact@v3
          with:
            name: cu118_python_deps
        - shell: bash
          run: |
            mv cu118_python_deps.tar ../
            cd ..
            tar xf cu118_python_deps.tar
            pwd
            ls

        - uses: actions/checkout@v3
          with:
            fetch-depth: 0
        - shell: bash
          run: |
            cd ..
            cp -r ComfyUI ComfyUI_copy
            curl https://www.python.org/ftp/python/3.10.9/python-3.10.9-embed-amd64.zip -o python_embeded.zip
            unzip python_embeded.zip -d python_embeded
            cd python_embeded
            echo 'import site' >> ./python310._pth
            curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
            ./python.exe get-pip.py
            ./python.exe -s -m pip install ../cu118_python_deps/*
            sed -i '1i../ComfyUI' ./python310._pth
            cd ..


            mkdir ComfyUI_windows_portable
            mv python_embeded ComfyUI_windows_portable
            mv ComfyUI_copy ComfyUI_windows_portable/ComfyUI

            cd ComfyUI_windows_portable

            mkdir update
            cp -r ComfyUI/.ci/update_windows/* ./update/
            cp -r ComfyUI/.ci/update_windows_cu118/* ./update/
            cp -r ComfyUI/.ci/windows_base_files/* ./

            cd ..

            "C:\Program Files\7-Zip\7z.exe" a -t7z -m0=lzma -mx=8 -mfb=64 -md=32m -ms=on ComfyUI_windows_portable.7z ComfyUI_windows_portable
            mv ComfyUI_windows_portable.7z ComfyUI/new_ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z

            cd ComfyUI_windows_portable
            python_embeded/python.exe -s ComfyUI/main.py --quick-test-for-ci --cpu

            ls

        - name: Upload binaries to release
          uses: svenstaro/upload-release-action@v2
          with:
                repo_token: ${{ secrets.GITHUB_TOKEN }}
                file: new_ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z
                tag: "latest"
                overwrite: true

