name: Test Patches
on:
    workflow_dispatch:
        inputs:
            discord_branch:
                type: choice
                description: "Discord Branch to test patches on"
                options:
                    - both
                    - stable
                    - canary
                default: both
    schedule:
        #   # Every day at midnight
        - cron: 0 0 * * *

jobs:
    TestPlugins:
        name: Test Patches
        runs-on: self-hosted

        steps:
            - uses: actions/checkout@v4
              if: ${{ github.event_name == 'schedule' }}
              with:
                  ref: dev

            - uses: actions/checkout@v4
              if: ${{ github.event_name == 'workflow_dispatch' }}

            - uses: pnpm/action-setup@v3 # Install pnpm using packageManager key in package.json

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

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

            - name: Install Google Chrome
              id: setup-chrome
              uses: browser-actions/setup-chrome@82b9ce628cc5595478a9ebadc480958a36457dc2
              with:
                  chrome-version: stable

            - name: Build Equicord Reporter Version
              run: pnpm buildReporter

            - name: Run Reporter
              timeout-minutes: 10
              run: |
                  export PATH="$PWD/node_modules/.bin:$PATH"
                  export CHROMIUM_BIN=${{ steps.setup-chrome.outputs.chrome-path }}

                  esbuild scripts/generateReport.ts > dist/report.mjs

                  stable_output_file=$(mktemp)
                  canary_output_file=$(mktemp)

                  pids=""

                  branch="${{ inputs.discord_branch }}"
                  if [[ "${{ github.event_name }}" = "schedule" ]]; then
                    branch="both"
                  fi

                  if [[ "$branch" = "both" || "$branch" = "stable" ]]; then
                    node dist/report.mjs > "$stable_output_file" &
                    pids+=" $!"
                  fi

                  if [[ "$branch" = "both" || "$branch" = "canary" ]]; then
                    USE_CANARY=true node dist/report.mjs > "$canary_output_file" &
                    pids+=" $!"
                  fi

                  exit_code=0
                  for pid in $pids; do
                      if ! wait "$pid"; then
                        exit_code=1
                      fi
                  done

                  cat "$stable_output_file" "$canary_output_file" >> $GITHUB_STEP_SUMMARY
                  exit $exit_code
              env:
                  WEBHOOK_URL: ${{ secrets.WEBHOOK }}
                  WEBHOOK_SECRET: ${{ secrets.WEBHOOK_SECRET }}
