From 2c0675c24a2ce6eb8383e3fefc9dae7e6856eb06 Mon Sep 17 00:00:00 2001 From: Scott Vandehey Date: Mon, 26 Oct 2026 11:29:20 -0700 Subject: [PATCH 1/2] Install Playwright Chromium without --with-deps in CI The ubuntu-latest image already ships Google Chrome, so the system libraries Chromium needs are present. --with-deps only added ~25 MB of fonts from Ubuntu's package mirror, which sometimes slows to tens of kB/s and has stretched this step from ~16 seconds to 6-10 minutes. --- .github/workflows/ci.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8dcdb1ea4..5f8f9f532 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,10 +72,14 @@ jobs: # Chromium is not in the npm install: Playwright downloads browsers # separately. We deliberately do NOT cache them, per Playwright's own CI # guidance (https://playwright.dev/docs/ci) — restoring the cache costs - # about as much as downloading, and the system libraries Chromium needs - # are not cacheable, so `--with-deps` still spends 12-18s on a cache hit. + # about as much as downloading. + # + # We skip `--with-deps`. The ubuntu-latest image ships Google Chrome, so + # the system libraries Chromium needs are already installed. The flag + # would add ~25 MB of fonts from Ubuntu's package mirror, which sometimes + # slows to a crawl and has stretched this step from seconds to 10+ minutes. - name: Install Playwright Chromium - run: npx playwright install --with-deps chromium + run: npx playwright install chromium - name: Run Preprocess run: npm run preprocess - name: Run Build (necessary for including css file in tests) From 579def39bea52947180d013ad2ce86eea992b3ed Mon Sep 17 00:00:00 2001 From: Scott Vandehey Date: Mon, 26 Oct 2026 11:42:31 -0700 Subject: [PATCH 2/2] Lower the CI test job's timeout to match the other jobs The test job's 15-minute cap left room for a slow Ubuntu package mirror during `playwright install --with-deps`. Without that flag the job no longer touches the mirror, so it gets the same 10-minute cap as the other jobs, and the explanation moves above `jobs:` to cover all four. --- .github/workflows/ci.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d3ed42f7f..220944a65 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,6 +10,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true +# Every job normally finishes in under two minutes. The timeout-minutes caps +# stop a hung job, such as a stalled download, from running until GitHub's +# six-hour default timeout. jobs: build: runs-on: ubuntu-latest @@ -62,13 +65,7 @@ jobs: test: runs-on: ubuntu-latest - # Every job normally finishes in under two minutes. The caps stop a hung job - # from running until GitHub's six-hour default timeout, which has happened - # here when the Ubuntu package mirror that `playwright install --with-deps` - # downloads from stalled. This job's cap is higher than the others because - # a slow-but-working mirror can take around 10 minutes, and that should - # still pass rather than fail. - timeout-minutes: 15 + timeout-minutes: 10 steps: - name: Checkout uses: actions/checkout@v7.0.1