Skip to content

Move scraper to a self-hosted runner with a static egress IP (drop Playwright) #28

Description

@aatchison

Summary

The browser-based scraper is now fully blocked on GitHub Actions. As of ~2026-07-09 the Fastly bot-challenge fingerprints the automated browser itself — it blocks headless and headed, Playwright's Chromium and real Chrome, with navigator.webdriver=false + stealth scripts, even a persistent real-Chrome profile. Only a genuine human-driven browser passes, so this is not solvable on our side within Actions (see #27, #26, and thunderbird/github-action-thunderbird-aaq#34).

We have no path forward on GitHub Actions. We need to move off it.

Proposed path forward

  1. Stand up a self-hosted runner with a static public egress IP — a VPS or Thunderbird infra.
  2. Give Mozilla/SUMO that egress IP to allowlist at the edge (bot-challenge exemption). Request is tracked in ACTION (Roland): post API-access request to mozilla/sumo#3124 + bitergia-deploy#50 #27API: /api/2/question/ intermittently returns HTTP 500 with ordering=updated + updated__gt mozilla/sumo#3124.
  3. Switch the scraper to a plain HTTP client (drop Playwright) — once the IP is allowlisted, /api/2/ is reachable directly over HTTP; no browser needed.
  4. Re-enable .github/workflows/scrape.yml to run on the self-hosted runner.

An API token that bypasses the challenge would be an acceptable alternative to the IP allowlist — either mechanism unblocks us.

Open questions / decisions

  • VPS vs. Thunderbird infra for the runner (cost, ownership, maintenance).
  • Whether Mozilla grants the IP allowlist or an API token.
  • Scope of the Playwright → HTTP-client refactor in sumo.py (challenge-cookie logic can be removed once the IP is exempt).

Context

cc @rtanglao @mzeier

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions