name: Build, Test, and Deploy
on:
    push:
        branches:
            - master
concurrency:
    group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
    cancel-in-progress: true
jobs:
    deploy:
        if: ${{ github.repository_owner == 'developomp' }}
        name: Deploy
        runs-on: ubuntu-latest
        steps:
            - name: Checkout Repo
              uses: actions/checkout@master

            - uses: pnpm/action-setup@v2
              with:
                  version: 8

            - name: Setup Node
              uses: actions/setup-node@v3
              with:
                  node-version: 18
                  cache: pnpm

            - name: Store Playwright's Version
              run: |
                  PLAYWRIGHT_VERSION=$(npm ls @playwright/test | grep @playwright | sed 's/.*@//')
                  echo "Playwright's Version: $PLAYWRIGHT_VERSION"
                  echo "PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION" >> $GITHUB_ENV

            - name: Cache Playwright Browsers for Playwright's Version
              id: cache-playwright-browsers
              uses: actions/cache@v3
              with:
                  path: ~/.cache/ms-playwright
                  key: playwright-browsers-${{ env.PLAYWRIGHT_VERSION }}

            - name: Install dependencies
              run: pnpm install

            - name: Install playwright browsers
              if: steps.cache-playwright-browsers.outputs.cache-hit != 'true'
              run: npx playwright install --with-deps

            - name: Build
              run: pnpm build

            - name: Run unit tests
              run: pnpm test:unit

            - name: Run E2E tests
              run: pnpm test:e2e

            - uses: actions/upload-artifact@v3
              with:
                  name: test-results
                  path: |
                      apps/*/test-results

            - name: Deploy to Firebase
              uses: w9jds/firebase-action@master
              with:
                  args: deploy
              env:
                  GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}
