name: Lighthouse CI
on:
  pull_request:
    branches:
      - master
      - main
  workflow_dispatch:
    inputs: {}
  release:
    types: [published]

jobs:
  lighthouse:
    runs-on: ubuntu-latest
    env:
      UNSPLASH_KEY: ${{ secrets.UNSPLASH_KEY }}
      UNSPLASH_CLIENT_ID: ${{ secrets.UNSPLASH_CLIENT_ID }}
    steps:
      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6

      - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
        with:
          node-version: 20
          cache: 'npm'

      - name: Install dependencies
        run: npm i

      - run: npm run env # Generate env.generated.ts

      - name: Build production web app
        run: npm run buildFrontend:prodWeb

      - name: Add swap space for Lighthouse
        run: |
          # Ensure Lighthouse/Chrome have enough memory on GitHub-hosted runners
          sudo fallocate -l 4G /swapfile
          sudo chmod 600 /swapfile
          sudo mkswap /swapfile
          sudo swapon /swapfile

      - name: Strip service worker artifacts for Lighthouse
        run: rm -f dist/browser/ngsw.json dist/browser/ngsw-worker.js dist/browser/safety-worker.js dist/browser/worker-basic.min.js

      - name: Run Lighthouse CI
        uses: treosh/lighthouse-ci-action@fcd65974f7c4c2bf0ee9d09b84d2489183c29726 # v12
        with:
          # Configure Lighthouse CI
          configPath: './tools/lighthouse/.lighthouserc.json'
          # Upload results to temporary storage
          uploadArtifacts: true
          temporaryPublicStorage: true
          # Run once to avoid long Chrome sessions on CI
          runs: 1
          # Configure budgets
          budgetPath: './tools/lighthouse/budget.json'
