Radish alpha
r
rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5
Radicle web interface
Radicle
Git
radicle-explorer .github workflows check-visual.yml
name: check-visual
on:
  push:
  workflow_dispatch:

env:
  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

jobs:
  generate-visual-diffs:
    concurrency:
      group: ${{ github.head_ref || github.run_id }}
      cancel-in-progress: true

    timeout-minutes: 30
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6

      - name: Evict playwright snapshot cache when pushing to master
        run: |
          if [ ${{ github.ref }} = "refs/heads/master" ]; then
            echo "Deleting ${{ runner.os }}-snapshots cache"
            gh extension install actions/gh-actions-cache
            gh actions-cache delete ${{ runner.os }}-snapshots --confirm || true
            echo "Done"
          fi
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - uses: actions/setup-node@v6
        with:
          node-version-file: ".nvmrc"

      - name: Install dependencies
        run: npm ci

      - name: Get installed Playwright version
        id: playwright-version
        run: echo "version=$(node -p "require('@playwright/test/package.json').version")" >> $GITHUB_OUTPUT

      - name: Cache Playwright browsers
        uses: actions/cache@v5
        id: playwright-dep-cache
        with:
          path: ~/.cache/ms-playwright
          key: ${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.version }}

      - name: Cache Playwright visual snapshots
        uses: actions/cache@v5
        id: playwright-snapshot-cache
        with:
          path: tests/visual/snapshots/**/*
          key: ${{ runner.os }}-snapshots

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

      - name: Install Playwright dependencies
        if: steps.playwright-dep-cache.outputs.cache-hit == 'true'
        run: npx playwright install-deps

      - name: Install Radicle binaries
        run: |
          mkdir -p tests/artifacts;
          ./scripts/install-binaries;

      - name: Run Playwright tests
        run: |
          if [ ${{ github.ref }} = "refs/heads/master" ]; then
            npm run test:e2e -- --project visual-desktop visual-mobile --update-snapshots || true;
          else
            npm run test:e2e -- --project visual-desktop visual-mobile;
          fi

      # We don't care about logs in visual snapshot tests, only the images.
      - name: Cleanup artifacts
        if: always()
        run: |
          shopt -s globstar;
          rm -rf tests/artifacts/**/*.log;

      - name: Upload artifacts
        id: artifacts
        uses: actions/upload-artifact@v7
        if: always()
        with:
          name: test-artifacts-${{ runner.os }}
          retention-days: 30
          if-no-files-found: "ignore"
          path: |
            tests/artifacts/**/*

      - name: Check for artifacts
        id: check_artifacts
        run: |
          if find ./tests/artifacts/**/*.png; then
            echo "present=true" >> $GITHUB_OUTPUT
          else
            echo "present=false" >> $GITHUB_OUTPUT
          fi