# aretestsfastyet
**Repository Path**: mirrors_mozilla/aretestsfastyet
## Basic Information
- **Project Name**: aretestsfastyet
- **Description**: Dashboard showing how long Firefox test jobs take to complete.
- **Primary Language**: Unknown
- **License**: MPL-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-16
- **Last Updated**: 2026-09-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Are Tests Fast Yet?
Dashboards, and a command-line tool, for inspecting the health and performance
of Firefox's automated tests, built from data generated in Firefox CI.
Live site: , where the data is refreshed every
night. There is also a staging instance at
used to develop the dashboards
themselves; its data is regenerated whenever work-in-progress patches to the
data generator are pushed to Try.
## Install the `fx-tests` CLI
```sh
npm install -g github:mozilla/aretestsfastyet
fx-tests guide # start here: what the data can and cannot tell you
```
Requires Node ≥ 20. That is the whole install — it builds on install, and there
is no npm package to publish or registry to configure. To update, run the same
command again.
```sh
fx-tests test netwerk/test/unit/test_bug1195415.js # one test's history
fx-tests try # triage a Try push
fx-tests issues # worst components, ranked
fx-tests --help # all 13 commands
```
> **Early preview.** The CLI is new and still finding its edges; several
> defects have been found by running it rather than by its tests. Please report
> anything that looks wrong. The dashboards are unaffected by it.
## Dashboards
Every page is listed on [`help.html`](help.html); the most useful ones are
also reachable from the "Dashboards ▾" menu in the top-right corner of each
page. The filenames below are the URLs on the site; where a page's source lives
in the repository is described under [How it works](#how-it-works). The main
ones:
- **Test Health** (`index.html`) — the landing page. Trend charts and a 7-day
summary of flaky test-failure, flaky job-failure, skip and invalid-job rates
for XPCShell and Mochitest.
- **Test Issues** (`issues.html`) — every non-passing test outcome (failures,
timeouts, crashes, skips) over the last 21 days, grouped by Bugzilla
component and by directory tree. The best place to start triaging
intermittents.
- **Test Info** (`test.html`) — a deep dive on a single test
(`?test=path/to/test`): failure/skip/crash history, per-run timings, and a
pass/fail breakdown across job configurations.
- **Try Push Results** (`try.html`) — aggregates the failed tests from a single
Try push, perma-fails first, matched against historical data.
- **Failures** (`failures.html`) / **Crashes** (`crashes.html`) — failures
grouped by message, and crashes grouped by signature.
- **Test Timings** (`xpcshell-timings.html`) — per-test run times with a tree
view and scatter charts.
- **Build Times** (`builds.html`), **Mochitest Jobs** (`mochitest-jobs.html`),
**XPCShell Jobs** (`xpcshell-jobs.html`), **Manifest Runtimes**
(`manifests.html`), **Worker Pools** (`workers.html`) — job- and
infrastructure-level timing views.
A number of older or more specialized dashboards (Perma-Fails, Variant Impact,
Errors & Warnings, Resource Usage, and others) are listed under "Less
frequently used dashboards" on `help.html`.
## How it works
The site is a set of static HTML pages with inline CSS and JavaScript, sharing
a few scripts (`fetch-utils.js`, `shared.js`, `common-ui.js`, `dashboards.js`,
…). Each page fetches pre-aggregated JSON data from the Firefox CI (Taskcluster)
index at runtime — there is no server. The data is produced by
[`fetch-test-data.js`](https://searchfox.org/mozilla-central/source/testing/timings/fetch-test-data.js)
in mozilla-central, which queries Firefox CI and writes the compact,
table-encoded JSON files the dashboards consume.
The repository holds the pages in three places:
- **the root** — the 17 pages that have not been migrated, plus `docs.html`.
**These have no build step**: they are served exactly as they appear in the
tree, and editing a page and reloading it is the whole loop.
- **[`site/`](site/)** — the 9 pages that have been migrated onto the shared
library in `lib/`, so that they can `import` typed and tested code instead of
carrying another copy of it inline. `npm run pages` builds them into
self-contained HTML in `dist-site/` (gitignored), one file per page with its
script inlined. That is the only thing the build buys, and it touches nothing
in the root — see the header comment in
[`tools/build-pages.ts`](tools/build-pages.ts) for why the output is a single
file. Unlike a root page, a page in `site/` cannot be opened straight from
the tree: its entry point is a `.ts` file, which a server labels
`video/mp2t`, so the browser refuses the module outright. Editing one means
re-running `npm run pages` and loading the built copy from `dist-site/`.
- **`old/`** — the 9 superseded root pages the migrated ones replace, kept for
comparison until the new ones have been trusted.
The command-line tool below shares that toolchain — TypeScript, a bundler and a
test suite — across `cli/`, `lib/`, `test/` and `tools/`. See
[`docs/PARITY.md`](docs/PARITY.md) for why the pages are being migrated onto
the shared library and how the two versions are compared, and
[`docs/DEPLOY.md`](docs/DEPLOY.md) for how the built pages are meant to ship.
## `fx-tests`, the command-line tool
`fx-tests` answers the same questions as the dashboards in plain text, for
people and agents working in a terminal rather than a browser. It reads exactly
the same published JSON files, through a shared, typed and tested library in
`lib/` — there is no second data path and no server.
See the top of this file to install it. To work on it from a checkout instead:
```sh
npm install
./bin/fx-tests guide # runs the TypeScript sources directly
```
Node ≥ 20 is required, for built-in `fetch`; `.node-version` pins the major
version for `fnm`. `./bin/fx-tests` needs no build step. `npm run bundle`
produces `dist/fx-tests.js`, the bundle the `bin` entry in `package.json` points
at; unlike `bin/`, it is committed, because an installed package cannot build
itself — Node refuses to strip types under `node_modules`. Re-run it and commit
the result whenever the sources change; `npm test` fails on a stale bundle.
There is deliberately no `build` script: pacote prepares a git dependency
whenever the manifest has one, and that preparation breaks `npm install -g`
from a git URL. `npm test` and `npm run typecheck` are the other two gates.
**`fx-tests guide` is the intended entry point.** It prints what each command
answers, which file family it reads, and — the reason it exists — the traps in
this data that are not discoverable from `--help`: that the errors files exist
for only a few of the published dates, that a manifest with all-zero durations
was skipped rather than instant, that a test's overall failure rate hides a
single-config perma-fail. Its factual claims are covered by tests, so it fails
the suite rather than going quietly stale.
[`docs/CLI.md`](docs/CLI.md) is the full command reference and
[`docs/PLAN.md`](docs/PLAN.md) describes how the library was extracted.
[`docs.html`](docs.html) renders every markdown doc in this repository in the
browser, with the links between them resolved.
## Data format
The JSON file formats are documented in
[`JSON_FORMAT.md`](https://searchfox.org/mozilla-central/source/testing/timings/JSON_FORMAT.md),
which lives next to the generator in mozilla-central, and in
[`lib/formats/FORMATS.md`](lib/formats/FORMATS.md) in this repository.
The two differ in kind. `JSON_FORMAT.md` describes what the generator was
written to emit; `FORMATS.md` records what the index was actually serving, from
validating every file the index publishes. It lags less, and where the two
disagree it is the one to trust — it exists because several documented claims
turned out not to hold.