name: Approve snapshots

on:
  issue_comment:
    types: [created]

jobs:
  approve:
    runs-on: ubuntu-latest
    if: github.event.issue.pull_request && github.event.comment.body == '/approve'

    steps:
      - name: Get branch name for PR
        uses: andrevalentin/get-branch-name-by-pr@v1
        id: getBranchName
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          pr-id: ${{ github.event.issue.number }}

      - name: Checkout 🏷️
        uses: actions/checkout@v3
        with:
          ref: ${{ steps.getBranchName.outputs.branch }}

      - name: Install ⚙️
        uses: pnpm/action-setup@v2
        with:
          version: 7.x

      - name: Use Node 16 🕹️
        uses: actions/setup-node@v2
        with:
          node-version: 16
          registry-url: 'https://registry.npmjs.org'
          cache: 'pnpm'

      - name: Cache Cypress binary 📌
        uses: actions/cache@v2
        with:
          path: ~/.cache/Cypress
          key: cypress-${{ runner.os }}-${{ hashFiles('package-lock.json') }}

      - name: Install ⚙️
        run: pnpm install --frozen-lockfile

      - name: Build packages 📦
        run: pnpm packages

      - name: Build demo 🛠️
        run: pnpm build

      - name: Serve ⚡️
        run: pnpm serve & pnpx wait-on http://localhost:5173

      - name: Run Cypress 🌳
        run: pnpm cypress:run --env updateSnapshots=true
        env:
          CYPRESS_TAKE_SNAPSHOTS: true

      - name: Upload debug screenshots and diffs on failure 🖼️
        uses: actions/upload-artifact@v2
        if: failure()
        with:
          name: cypress
          path: |
            cypress/debug/
            cypress/snapshots/**/__diff_output__/

      - name: Open PR to update reference snapshots 🎁
        uses: peter-evans/create-pull-request@v3
        with:
          token: ${{ secrets.USER_TOKEN }}
          branch: update-snapshots
          title: 'Update Cypress reference snapshots'
          commit-message: 'Update Cypress reference snapshots'
