name: Release
on:
    push:
        tags:
            - v*
        branches:
            - main
env:
    FORCE_COLOR: true
    GITHUB_TOKEN: ${{ secrets.ETOKEN }}
    REPO: Equicord/Equibored
    USERNAME: GitHub-Actions

permissions: write-all

jobs:
    Build:
        name: Build Equicord
        runs-on: ubuntu-latest

        steps:
            - uses: actions/checkout@v4

            - uses: pnpm/action-setup@v3

            - name: Use Node.js 20
              uses: actions/setup-node@v4
              with:
                  node-version: 20
                  cache: "pnpm"

            - name: Install dependencies
              run: pnpm install --frozen-lockfile

            - name: Build web
              run: pnpm buildWebStandalone

            - name: Build
              run: pnpm buildStandalone

            - name: Generate plugin list
              run: pnpm generatePluginJson dist/vencordplugins.json

            - name: Generate Equicord plugin list
              run: pnpm generateEquicordPluginJson dist/equicordplugins.json

            - name: Collect files to be released
              run: |
                  cd dist
                  mkdir release

                  cp browser/browser.* release
                  cp Vencord.user.{js,js.LEGAL.txt} release

                  # copy the plugin data jsons, the extension zips and the desktop/vesktop asars
                  cp *.{json,zip,asar} release

                  # legacy un-asared files
                  # FIXME: remove at some point
                  cp desktop/* release
                  for file in vesktop/*; do
                    filename=$(basename "$file")
                    cp "$file" "release/vencordDesktop${filename^}"
                  done
                  for file in equibop/*; do
                    filename=$(basename "$file")
                    cp "$file" "release/equicordDesktop${filename^}"
                  done

                  find release -size 0 -delete
                  rm release/package.json
                  rm release/*.map

            - name: get-npm-version
              id: package-version
              uses: martinbeentjes/npm-get-version-action@v1.3.1

            - name: Upload Equicord Tagged
              if: startsWith(github.ref, 'refs/tags/')
              run: |
                  gh release upload v${{ steps.package-version.outputs.current-version}} --clobber dist/release/*

            - name: Upload Equicord Stable
              if: ${{ github.ref_name == 'main' }}
              run: |
                  gh release upload latest --clobber dist/release/*

            - name: Upload Plugins JSON to Equibored repo
              run: |
                  git config --global user.name "GitHub-Actions"
                  git config --global user.email actions@github.com
                  git clone https://$USERNAME:$GITHUB_TOKEN@github.com/$REPO.git plugins
                  cd plugins

                  cp ../dist/release/*plugins.json .
                  git add -A

                  git commit -m "Plugins for https://github.com/$GITHUB_REPOSITORY/commit/$GITHUB_SHA"
                  git push --force https://$USERNAME:$GITHUB_TOKEN@github.com/$REPO.git