name: Shared Component Visual Tests
on:
    pull_request: {}
    merge_group:
        types: [checks_requested]
    push:
        branches: [develop, master]

concurrency:
    group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
    cancel-in-progress: true

permissions: {} # No permissions required

jobs:
    testStorybook:
        name: "Run Visual Tests"
        runs-on: ubuntu-24.04
        permissions:
            actions: read
            issues: read
            pull-requests: read
        steps:
            - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
              with:
                  persist-credentials: false
                  repository: element-hq/element-web

            - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4
            - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
              with:
                  cache: "pnpm"
                  node-version: "lts/*"

            - name: Install dependencies
              working-directory: packages/shared-components
              run: pnpm install --frozen-lockfile

            - name: Get installed Playwright version
              working-directory: packages/shared-components
              id: playwright
              run: echo "version=$(pnpm list @playwright/test --depth=0 --json | jq -r '.[].devDependencies["@playwright/test"].version')" >> $GITHUB_OUTPUT

            - name: Cache playwright binaries
              uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5
              id: playwright-cache
              with:
                  path: ~/.cache/ms-playwright
                  key: ${{ runner.os }}-${{ runner.arch }}-playwright-${{ steps.playwright.outputs.version }}-onlyshell

            - name: Install Playwright browsers
              working-directory: packages/shared-components
              if: steps.playwright-cache.outputs.cache-hit != 'true'
              run: "pnpm playwright install --with-deps --only-shell"

            - name: Run Visual tests
              working-directory: packages/shared-components
              run: "pnpm test:storybook --run"

            # Workaround for vis silently adding new baselines if they didn't exist
            # Can be removed once https://github.com/repobuddy/visual-testing/issues/516 is released
            - run: |
                  git add -N .
                  git diff --exit-code

            - name: Upload received images & diffs
              if: always()
              uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
              with:
                  name: received-images
                  path: packages/shared-components/__vis__/linux
