Skip to content

chore(ci): auto-update Firefox versions and run firefox:beta in CI#33885

Draft
mschile wants to merge 8 commits into
developfrom
mschile/peaceful-booth-b39218
Draft

chore(ci): auto-update Firefox versions and run firefox:beta in CI#33885
mschile wants to merge 8 commits into
developfrom
mschile/peaceful-booth-b39218

Conversation

@mschile
Copy link
Copy Markdown
Collaborator

@mschile mschile commented May 21, 2026

  • Closes

Additional details

firefox-stable-version in .circleci/src/pipeline/@pipeline.yml was being bumped by hand (unlike Chrome stable/beta and Chrome for Testing, which are auto-bumped daily by the Update Browser Versions GitHub Action). As a result Firefox drifted behind upstream, and we had no CI signal against Firefox beta at all.

This PR:

  • Extends the existing daily workflow to also track Firefox stable + Mozilla Beta. The version source is Mozilla's official firefox_versions.json — reading LATEST_FIREFOX_VERSION and LATEST_FIREFOX_RELEASED_DEVEL_VERSION. The same workflow now opens a single PR when any of Chrome stable/beta, Chrome for Testing, Firefox stable, or Firefox dev changes.
  • Adds a new firefox-dev-version anchor in .circleci/src/pipeline/@pipeline.yml (pinned to today's Mozilla Beta, 152.0b1). Cypress's launcher identifies these builds as the firefox:dev channel — Mozilla's "Beta" version-string format (152.0b1) matches Cypress's \S+b\S* regex — so the anchor, job, and --browser arg all use dev to match the channel Cypress actually accepts.
  • Wires a new driver-integration-tests-firefox-dev job into pull-request.yml and @main.yml. Unlike driver-integration-tests-chrome-beta, this job is advisory-only — it runs and posts a visible GitHub status, but is intentionally not in the all-jobs-passed / verify-accessibility-results / ready-to-release aggregator requires blocks. The first run against Mozilla Beta surfaced real upstream behavior changes (cookie header ordering in cookie_behavior.cy.ts, selectionchange event firing in focus_blur.cy.js) — exactly the kind of early-warning signal we want — but those should not gate routine PR merges or production releases.
  • Tidies up the anchor comments so every pinned browser version names the source it's read from (Chrome Version History, Chrome for Testing last-known-good, Mozilla product-details).
  • Prevents downgrade PRs with a new compareFirefoxVersions helper that orders both stable (145.0.2) and dev (152.0b1) version strings, so the daily workflow never opens a PR that lowers the pinned beta if Mozilla regresses or we manually pin ahead.

A system-tests-firefox-dev was intentionally not added in this first cut to keep CI minutes down — driver integration coverage gives the early-warning signal without doubling the system-test runtime. Easy to add later if we want it.


Note

Medium Risk
Medium risk because it changes CI automation and adds a new Firefox Beta (firefox:dev) test job plus new external version fetching logic, which could affect CI stability and maintenance PR generation.

Overview
Extends the daily Update Browser Versions GitHub Action to also track and update pinned Firefox stable and Mozilla Beta (Cypress firefox:dev) versions in .circleci/src/pipeline/@pipeline.yml, including branch naming/PR messaging updates and unit test coverage.

Updates CircleCI to define a new firefox-dev-version anchor and run driver-integration-tests-firefox-dev against that pin; the job is wired into PR and main workflows but is explicitly excluded from merge/release gating aggregators as an advisory canary.

Reviewed by Cursor Bugbot for commit d4a5219. Bugbot is set up for automated code reviews on this repo. Configure here.

Steps to test

  1. From the GitHub Actions UI, trigger Update Browser Versions via workflow_dispatch. With the values currently pinned in this PR (Firefox stable 145.0.2, Firefox dev 152.0b1), the workflow should detect that Firefox stable is behind upstream and open a follow-up PR bumping it. Re-running on a clean state should be a no-op.
  2. On this PR's CircleCI run, confirm the new driver-integration-tests-firefox-dev job appears in pull-request and installs Firefox 152.0b1 successfully. The job is advisory — a red status on it should not fail the all-jobs-passed aggregator.
  3. Locally:
    • yarn test-scripts scripts/unit/github-actions/update-browser-version-spec.js — 30 tests pass, including new Firefox cases (stable bump, dev bump, mixed updates, no-downgrade for both Firefox channels).
    • bash scripts/pack-ci.sh --all --validate — packs and validates cleanly.

How has the user experience changed?

No change. Internal CI / release-automation tooling only.

PR Tasks

  • [na] Is there an associated issue with maintainer approval for PR submission?
  • Have tests been added/updated?
  • [na] Has a PR for user-facing changes been opened in cypress-documentation?
  • [na] Have API changes been updated in the type definitions?

Extends the daily Update Browser Versions GitHub Action to also track
Firefox stable and beta from Mozilla's product-details JSON, mirroring
the existing Chrome automation, and wires a new
driver-integration-tests-firefox-beta job into CI so we catch upcoming
Firefox regressions before stable ships.
@mschile mschile requested a review from a team as a code owner May 21, 2026 17:46
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit b141f46. Configure here.

Comment thread .circleci/src/pipeline/@pipeline.yml
Comment thread scripts/github-actions/update-browser-versions.js Outdated
mschile added 2 commits May 21, 2026 11:56
…on downgrades

Cypress's launcher only recognizes Firefox channels `stable`, `dev`, and
`nightly`. A Mozilla "Beta" build (e.g. 152.0b1) is detected as the
`dev` channel because its version-string regex matches `\S+b\S*`, so
`--browser firefox:beta` would fail with browser-not-found. Rename the
new anchor, job, and outputs from `*-beta` to `*-dev` to match the
identifier Cypress actually accepts.

Also replace the `!==` check for the Firefox dev version with a proper
"newer only" comparator that parses both stable (`145.0.2`) and
dev/beta (`152.0b1`) version strings, so the daily auto-update workflow
can never open a downgrade PR if upstream regresses or we manually pin
ahead.
…elease gate)

The first run against Mozilla's Beta channel surfaced real upstream
behavior changes — cookie header ordering in cookie_behavior.cy.ts and
selectionchange event firing in focus_blur.cy.js — that are the exact
kind of early-warning signal this job exists to catch. We want to keep
seeing those failures, but they shouldn't block routine PR merges or
production releases.

Remove driver-integration-tests-firefox-dev from the requires lists of
all-jobs-passed, verify-accessibility-results, and ready-to-release.
The job still runs and posts a visible GitHub status; reviewers can
inspect failures without being gated on a Mozilla Beta build.
@cypress
Copy link
Copy Markdown

cypress Bot commented May 21, 2026

cypress    Run #71019

Run Properties:  status check failed Failed #71019  •  git commit d4a5219cf0: Merge branch 'develop' into mschile/peaceful-booth-b39218
Project cypress
Branch Review mschile/peaceful-booth-b39218
Run status status check failed Failed #71019
Run duration 19m 09s
Commit git commit d4a5219cf0: Merge branch 'develop' into mschile/peaceful-booth-b39218
Committer Matt Schile
View all properties for this run ↗︎

Test results
Tests that failed  Failures 4
Tests that were flaky  Flaky 11
Tests that did not run due to a developer annotating a test with .skip  Pending 1243
Tests that did not run due to a failure in a mocha hook  Skipped 0
Tests that passed  Passing 32997
View all changes introduced in this branch ↗︎
UI Coverage  64%
  Untested elements 27  
  Tested elements 48  
Accessibility  98.98%
  Failed rules  0 critical   3 serious   1 moderate   0 minor
  Failed elements 18  

Tests for review

Failed  cypress/e2e/e2e/focus_blur.cy.js • 4 failed tests • 5x-driver-firefox:dev

View Output

Test Artifacts
intercept blur methods correctly > focus
    </td>
  </tr>
  <tr>
    <td colspan="2">
      <a href="https://cloud.cypress.io/projects/ypt4pf/runs/71019/overview/d51966be-07a0-495e-a49d-24c29c7647af?reviewViewBy=FAILED&utm_source=github&utm_medium=failed&utm_campaign=view%20test">
        intercept blur methods correctly > focus <select>
      </a>
    </td>
    <td>
      
    </td>
  </tr>
  <tr>
    <td colspan="2">
      <a href="https://cloud.cypress.io/projects/ypt4pf/runs/71019/overview/9ba34403-c2c2-4858-8389-12f0f1ba57af?reviewViewBy=FAILED&utm_source=github&utm_medium=failed&utm_campaign=view%20test">
        intercept blur methods correctly > focus <button>
      </a>
    </td>
    <td>
      
    </td>
  </tr>
  <tr>
    <td colspan="2">
      <a href="https://cloud.cypress.io/projects/ypt4pf/runs/71019/overview/e9a558a9-1618-4a5c-8b37-1efec7cfb9a3?reviewViewBy=FAILED&utm_source=github&utm_medium=failed&utm_campaign=view%20test">
        intercept blur methods correctly > focus [tabindex]
      </a>
    </td>
    <td>
      
    </td>
  </tr></table>
Flakiness  issues/28527.cy.ts • 1 flaky test • 5x-driver-electron

View Output

Test Artifacts
issue 28527 > fails and then retries and verifies about:blank is not displayed Test Replay Screenshots
Flakiness  commands/net_stubbing.cy.ts • 1 flaky test • 5x-driver-firefox:dev

View Output

Test Artifacts
... > stops waiting when an xhr request is canceled
    </td>
  </tr></table>
Flakiness  issues/28527.cy.ts • 1 flaky test • 5x-driver-firefox:dev

View Output

Test Artifacts
issue 28527 > fails and then retries and verifies about:blank is not displayed Screenshots
Flakiness  commands/net_stubbing.cy.ts • 1 flaky test • 5x-driver-chrome:beta

View Output

Test Artifacts
... > stops waiting when an fetch request is canceled Test Replay
Flakiness  issues/28527.cy.ts • 1 flaky test • 5x-driver-chrome:beta

View Output

Test Artifacts
issue 28527 > fails and then retries and verifies about:blank is not displayed Test Replay Screenshots

The first 5 flaky specs are shown, see all 11 specs in Cypress Cloud.

…ooth-b39218

# Conflicts:
#	.circleci/src/pipeline/@pipeline.yml
cypress-bot[bot]
cypress-bot Bot previously approved these changes May 22, 2026
@mschile mschile self-assigned this May 22, 2026
Copy link
Copy Markdown
Collaborator

@AtofStryker AtofStryker left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So when Firefox releases the next version, we should see a PR created to bump the version, correct?

Comment thread scripts/github-actions/update-browser-versions.js
@cypress-bot cypress-bot Bot dismissed their stale review May 22, 2026 16:08

Cursor Bugbot risk assessment is no longer Low Risk. Auto-approval dismissed; manual review required.

@mschile mschile marked this pull request as draft May 22, 2026 16:30
mschile added 3 commits May 22, 2026 10:34
…m dev to beta

Cypress's launcher previously only recognized Firefox channels `stable`,
`dev`, and `nightly`. Mozilla's Beta releases (e.g. `152.0b1`) happen to
share the `\S+b\S*` version-string format with Firefox Developer Edition,
so Beta builds were getting detected as `firefox:dev`. That worked, but
the `dev` label was confusing because Mozilla has a literal Developer
Edition product distinct from Beta.

Add a new `firefox:beta` entry to packages/launcher/lib/known-browsers
(same version regex and `firefox` binary fallback as `dev`; distinct
`Firefox Beta` displayName and PPA-style `firefox-beta` binary). Also
add the channel to the Darwin and Windows path mappings. The `dev`
channel still works for actual Developer Edition installs, so this is
purely additive.

Update everything around the canary CI job to use the new name:
- `firefox-beta-version` anchor (was `firefox-dev-version`)
- `driver-integration-tests-firefox-beta` (was `…-firefox-dev`)
- `firefox:beta` browser arg (was `firefox:dev`)
- `latest_firefox_beta_version` workflow outputs (was `…_dev_version`)
- `Update Firefox (beta) to X` PR description (was `(dev)`)

Aligns naming with the existing `chrome:beta` convention while staying
backwards-compatible with the existing `firefox:dev` channel.
Renamed for clarity per review feedback — the function already handled
both Chrome-style dotted-numeric versions and Firefox's <main>b<N> beta
format (strings without a b segment compare as if b were 0), so the
Firefox-specific name was misleading.
Mozilla's stability ordering is Release → Beta → Developer Edition →
Nightly — Developer Edition is built on the Beta channel with extra
experimental features enabled, so it's strictly less stable than Beta.
Reorder the firefox entries in known-browsers, darwin, and windows to
match.

For known-browsers this also flips auto-detection identity for ambiguous
binaries (Mozilla's Beta installer reuses the firefox binary that the
\\\S+b\\\S* regex catches in both channels): an auto-detected beta-format
build now reports as firefox:beta rather than firefox:dev, which matches
Mozilla's current channel naming. Explicit --browser firefox:dev still
works for actual Developer Edition installs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants