name: Frontend Prepare Build on: pull_request: paths: - 'frontend/src/**' - 'frontend/*.json' - 'frontend/*.js' - 'frontend/*.ts' - '.github/workflows/frontend-build-check.yaml' jobs: setup-and-build: runs-on: ubuntu-latest strategy: matrix: node: [20, 22] steps: # Setup: - name: Checkout uses: actions/checkout@v4 with: ref: ${{ github.head_ref }} - name: Setup Node uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} cache: 'yarn' cache-dependency-path: frontend/yarn.lock - name: Restore cache uses: actions/cache@v4 with: path: frontend/dist key: ${{ runner.os }}-btrix-frontend-build-${{ hashFiles('frontend/dist') }} restore-keys: | ${{ runner.os }}-btrix-frontend-build- - name: Get installed Playwright version working-directory: frontend id: playwright-version run: | yarn add @yarnpkg/lockfile echo "PLAYWRIGHT_VERSION=$(node scripts/get-resolved-playwright-version.js)" >> $GITHUB_ENV - name: Cache playwright binaries uses: actions/cache@v4 id: playwright-cache with: path: | ~/.cache/ms-playwright key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }} - name: Install dependencies working-directory: frontend env: HUSKY: 0 run: yarn install --frozen-lockfile - name: Install Playwright Browsers working-directory: frontend env: HUSKY: 0 run: yarn playwright install --with-deps if: steps.playwright-cache.outputs.cache-hit != 'true' - name: Install Playwright Deps working-directory: frontend env: HUSKY: 0 run: yarn playwright install-deps if: steps.playwright-cache.outputs.cache-hit != 'true' # Lint: - name: Lint working-directory: frontend run: yarn lint:check # Localize: - name: Localization build dry run working-directory: frontend run: yarn localize:build # Test: - name: Unit tests working-directory: frontend run: yarn test # Check build: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: driver-opts: network=host - name: Build Frontend uses: docker/build-push-action@v3 with: context: frontend load: true tags: webrecorder/browsertrix-frontend:latest cache-from: type=gha,scope=frontend cache-to: type=gha,scope=frontend,mode=max