name: release
on:
  push:
    tags:
      - "v*"

permissions:
  contents: write
env:
  GH_TOKEN: ${{ github.token }}

jobs:
  create-draft:
    runs-on: ubuntu-latest
    steps:
      - run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV
      - uses: actions/checkout@v3
        with:
          ref: master

      - uses: jossef/action-set-json-field@v2.1
        with:
          file: manifest.json
          field: version
          value: ${{ env.VERSION }}

      - continue-on-error: true
        run: |
          git config --global user.email "github-actions[bot]@users.noreply.github.com"
          git config --global user.name "github-actions[bot]"
          git commit -am "release ${{github.ref_name}}"
          git push

      - run: |
          gh release create ${{github.ref_name}} -d -F CURRENT_CHANGE.md -t ${{github.ref_name}}

  windows:
    runs-on: windows-latest
    needs: create-draft
    steps:
      - uses: actions/checkout@v3
        with:
          ref: master
      - uses: actions/setup-go@v4
        with:
          go-version: '1.20.5'
      - uses: actions/setup-python@v4
        id: cp310
        with:
          python-version: '3.10'
      - uses: crazy-max/ghaction-chocolatey@v2
        with:
          args: install upx
      - run: |
          Start-BitsTransfer https://www.python.org/ftp/python/3.10.11/python-3.10.11-embed-amd64.zip ./python-3.10.11-embed-amd64.zip
          Expand-Archive ./python-3.10.11-embed-amd64.zip -DestinationPath ./py310
          $content=Get-Content "./py310/python310._pth"; $content | ForEach-Object {if ($_.ReadCount -eq 3) {"Lib\\site-packages"} else {$_}} | Set-Content ./py310/python310._pth
          ./py310/python ./backend-python/get-pip.py
          ./py310/python -m pip install Cython
          Copy-Item -Path "${{ steps.cp310.outputs.python-path }}/../include" -Destination "py310/include" -Recurse
          Copy-Item -Path "${{ steps.cp310.outputs.python-path }}/../libs" -Destination "py310/libs" -Recurse
          ./py310/python -m pip install cyac
          go install github.com/wailsapp/wails/v2/cmd/wails@latest
          make
          Rename-Item -Path "build/bin/RWKV-Runner.exe" -NewName "RWKV-Runner_windows_x64.exe"

      - run: gh release upload ${{github.ref_name}} build/bin/RWKV-Runner_windows_x64.exe

  linux:
    runs-on: ubuntu-20.04
    needs: create-draft
    steps:
      - uses: actions/checkout@v3
        with:
          ref: master
      - uses: actions/setup-go@v4
        with:
          go-version: '1.20.5'
      - run: |
          sudo apt-get update
          sudo apt-get install upx
          sudo apt-get install build-essential libgtk-3-dev libwebkit2gtk-4.0-dev
          go install github.com/wailsapp/wails/v2/cmd/wails@latest
          rm -rf ./backend-python/wkv_cuda_utils
          rm ./backend-python/get-pip.py
          sed -i '1,2d' ./backend-golang/wsl_not_windows.go
          rm ./backend-golang/wsl.go
          mv ./backend-golang/wsl_not_windows.go ./backend-golang/wsl.go
          make
          mv build/bin/RWKV-Runner build/bin/RWKV-Runner_linux_x64

      - run: gh release upload ${{github.ref_name}} build/bin/RWKV-Runner_linux_x64

  macos:
    runs-on: macos-13
    needs: create-draft
    steps:
      - uses: actions/checkout@v3
        with:
          ref: master
      - uses: actions/setup-go@v4
        with:
          go-version: '1.20.5'
      - run: |
          go install github.com/wailsapp/wails/v2/cmd/wails@latest
          rm -rf ./backend-python/wkv_cuda_utils
          rm ./backend-python/get-pip.py
          sed -i '' '1,2d' ./backend-golang/wsl_not_windows.go
          rm ./backend-golang/wsl.go
          mv ./backend-golang/wsl_not_windows.go ./backend-golang/wsl.go
          make
          cp build/darwin/Readme_Install.txt build/bin/Readme_Install.txt
          cp build/bin/RWKV-Runner.app/Contents/MacOS/RWKV-Runner build/bin/RWKV-Runner_darwin_universal
          cd build/bin && zip -r RWKV-Runner_macos_universal.zip RWKV-Runner.app Readme_Install.txt

      - run: gh release upload ${{github.ref_name}} build/bin/RWKV-Runner_macos_universal.zip build/bin/RWKV-Runner_darwin_universal

  publish-release:
    runs-on: ubuntu-latest
    needs: [ windows, linux, macos ]
    steps:
      - uses: actions/checkout@v3
      - run: gh release edit ${{github.ref_name}} --draft=false