Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
72ccfc6
Add offline worker report rendering
aerickson Sep 9, 2026
eed6399
Link worker pools and improve report navigation
aerickson Sep 9, 2026
c63b4d2
Extract report rendering and improve navigation
aerickson Sep 9, 2026
b96c389
Document worker report data sources
aerickson Sep 9, 2026
6d212e5
Clarify worker report totals and implementations
aerickson Sep 9, 2026
d10a9c8
Improve graph tooltips and responsive layout
aerickson Sep 9, 2026
bf28acb
Clarify worker report scope and graph units
aerickson Sep 9, 2026
a52ee4c
Report configured worker pool capacity
aerickson Sep 9, 2026
9eb97d1
Naturally sort worker version counts
aerickson Sep 9, 2026
b5ab529
Record worker snapshot collection times
aerickson Sep 9, 2026
21f2b12
feat: support Quick deployment for worker report
aerickson Sep 9, 2026
f3928aa
fix: sort worker report values by type
aerickson Sep 9, 2026
0941646
fix: serve report sorter as JavaScript
aerickson Sep 9, 2026
004d9d7
chore: add Quick staging deploy script
aerickson Sep 9, 2026
70a4dc7
chore: standardize deploy script names
aerickson Sep 9, 2026
50158d4
chore: clarify Quick deploy script names
aerickson Sep 9, 2026
cf30373
feat: add local data refresh workflow
aerickson Sep 9, 2026
b2d4b75
feat: load Taskcluster credentials from token file
aerickson Sep 9, 2026
fbdd132
fix: skip committed history in local refresh
aerickson Sep 9, 2026
70ff0e0
chore: add local preview helper
aerickson Sep 9, 2026
3180c72
fix: distinguish standalone and Azure worker images
aerickson Sep 9, 2026
bd0f80e
fix: improve Azure image report labels
aerickson Sep 9, 2026
ede8f18
feat: show report generation timestamp
aerickson Sep 9, 2026
4153249
fix: customize Quick navigation pill
aerickson Sep 9, 2026
856b427
fix: clarify unknown worker implementations
aerickson Sep 10, 2026
0ad0d63
fix: clarify worker pool count headings
aerickson Sep 10, 2026
1c92bf3
fix: reconcile report UI with upstream
aerickson Sep 10, 2026
da7c874
fix: clarify report metadata
aerickson Sep 10, 2026
536cabf
docs: clarify report introduction
aerickson Sep 10, 2026
6f8a6bc
fix: clarify worker pool section totals
aerickson Sep 10, 2026
6cf4180
feat: add collapsible report sidebar
aerickson Sep 10, 2026
0e7cd73
fix: polish collapsible report sidebar
aerickson Sep 10, 2026
fbbe8e5
fix: let report prose use available width
aerickson Sep 10, 2026
08e3660
feat: add report heading permalinks
aerickson Sep 10, 2026
921a1b0
fix: distinguish table of contents heading
aerickson Sep 10, 2026
fcdf261
fix: clarify unresponsive worker sections
aerickson Sep 10, 2026
5115b8a
fix: sort version summaries descending
aerickson Sep 10, 2026
427cd76
chore: regenerate worker version report
aerickson Sep 10, 2026
00c70ad
feat: add overview to report contents
aerickson Sep 10, 2026
4fb438e
fix: simplify report contents labels
aerickson Sep 10, 2026
aafc570
fix: clarify unknown worker probe results
aerickson Sep 10, 2026
a99b482
fix: classify unclaimed worker probes
aerickson Sep 10, 2026
c776f12
feat: link probe runs to Taskcluster task groups
aerickson Sep 10, 2026
0ad81da
docs: introduce generic and docker worker report sections
aerickson Sep 10, 2026
8e2a615
docs: clarify generic-worker Docker support through d2g
aerickson Sep 10, 2026
da62cbe
feat: show Git revision and dirty state in report metadata
aerickson Sep 11, 2026
04b756d
docs: regenerate worker report with source revision
aerickson Sep 11, 2026
39e618e
ui: combine report revision and snapshot coverage
aerickson Sep 11, 2026
3044165
ui: shorten Unresponsive section heading
aerickson Sep 11, 2026
490c9c9
docs: regenerate report with shortened Unresponsive heading
aerickson Sep 11, 2026
91416c1
feat: preview stale probe notice with two-hour threshold
aerickson Sep 11, 2026
00a8ee8
feat: set stale probe warning threshold to ten days
aerickson Sep 11, 2026
203466b
feat: automate history reports and Pages publishing with GitHub Actions
aerickson Sep 11, 2026
927566e
fix: restrict scheduled reports to production repository
aerickson Sep 11, 2026
ba83063
fix: require opt-in for all scheduled report runs
aerickson Sep 11, 2026
fe19cee
docs: regenerate worker report after rebase onto master
aerickson Sep 11, 2026
b4244bf
ui: group migration timeline after history tables and link from Docke…
aerickson Sep 11, 2026
9dac690
ui: simplify worker migration description
aerickson Sep 11, 2026
927b487
ci: run unit and Firefox layout tests on PRs and master
aerickson Sep 11, 2026
7df3d92
docs: record upstream PR trimming checklist
aerickson Sep 11, 2026
7d01269
docs: retain Quick helpers as optional contributor tooling
aerickson Sep 11, 2026
4d0441a
chore: rename Quick deploy helper and require confirmation
aerickson Sep 11, 2026
0671b8a
chore: move Quick preview helpers into scripts/quick
aerickson Sep 11, 2026
c9cf83b
ci: preserve docs root layout for Pages publishing
aerickson Sep 11, 2026
13b7c5d
chore: package Quick previews with explicit personal site names
aerickson Sep 11, 2026
fcf49ec
docs: describe Quick helpers and link platform home
aerickson Sep 11, 2026
6e569c9
chore: restore detailed worker snapshot for branch previews
aerickson Sep 11, 2026
a6d1cb5
feat: bundle worker snapshots and load report data relatively
aerickson Sep 11, 2026
a563bea
Revert "feat: bundle worker snapshots and load report data relatively"
aerickson Sep 11, 2026
67ec6f2
chore: inject Quick integration only during preview packaging
aerickson Sep 11, 2026
2470233
chore: ignore locally built worker auditor executable
aerickson Sep 11, 2026
e456079
fix: link rendered worker reports to the local migration page
aerickson Sep 11, 2026
756dec3
chore: prepare report improvements for upstream review
aerickson Sep 11, 2026
0a4aecf
fix: address CI pinning and report deployment review feedback
aerickson Sep 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: CI

on:
pull_request:
push:
branches: [master]

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
unit-tests:
name: Go, Python, and JavaScript tests
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
persist-credentials: false
- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
go-version: stable
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
with:
python-version: '3.13'
- uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
with:
node-version: '24'
- name: Go tests
run: go test ./...
- name: Python tests
run: python3 -m unittest test_fetch_and_generate.py
- name: JavaScript tests
working-directory: docs
run: npm test

browser-tests:
name: Firefox layout tests
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
persist-credentials: false
- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
go-version: stable
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
with:
python-version: '3.13'
- uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
with:
node-version: '24'
cache: npm
cache-dependency-path: docs/package-lock.json
- name: Install test dependencies
working-directory: docs
run: npm ci
- name: Install Firefox and system dependencies
working-directory: docs
run: npx playwright install --with-deps firefox
- name: Run layout tests
working-directory: docs
run: npm run test:browser
- name: Upload failure screenshots and traces
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: firefox-layout-results
path: docs/test-results/
if-no-files-found: ignore
retention-days: 7
12 changes: 9 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
mozilla-history
audit-worker-versions
!audit-worker-versions/main.go
# Locally built executables.
/mozilla-history
/audit-worker-versions/audit-worker-versions

# Browser-test dependencies and artifacts.
/docs/node_modules/
/docs/playwright-report/
/docs/test-results/
__pycache__/
83 changes: 78 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,23 +46,96 @@ mozilla-history
This will populate subdirectories `Clients`, `Hooks`, `Roles` and `WorkerPools`
of the current directory.

## Automating the Process
## Refreshing All Local Data

You can automate this reporting process by setting up a cron job to execute `run-report.sh` at regular intervals.
For a complete local refresh, run:

```sh
./fetch_and_generate.py
```

When `~/.tc_token` exists, the script loads its JSON `clientId` and
`accessToken` fields. Otherwise, it uses `TASKCLUSTER_CLIENT_ID` and
`TASKCLUSTER_ACCESS_TOKEN` from the environment. The token file takes
precedence so stale exported credentials cannot silently override it.

The script builds temporary copies of the Go tools, refreshes `Clients`,
`Hooks`, `Roles`, and `WorkerPools`, schedules worker-version probes, polls their
sealed task group until every task reaches a terminal state, writes
`WorkerVersions`, and stops. It does not pull, commit, push, or deploy anything.
Review the generated changes before committing them.

The local refresh intentionally does not rebuild `docs/history.json`. History is
derived exclusively from worker snapshots already committed to Git, so it cannot
include the snapshot generated by the current run. The production publishing
workflow rebuilds it after the snapshot is committed.

Use `--poll-interval SECONDS` to change the 60-second polling interval. If the
script is interrupted after scheduling probes, resume without creating another
group using `--task-group-id TASK_GROUP_ID`. `TASKCLUSTER_ROOT_URL`,
`REPORT_SCHEDULER_ID`, and `REPORT_PREFIX` can be overridden in the environment.

Worker versions require two phases because Worker Manager configuration does
not expose the implementation and version actually running in each pool. The
first phase schedules an intentionally malformed task on every pool so the
worker identifies itself in its task log. Once all tasks are resolved, the
second phase reads those logs and generates the snapshot. Polling replaces the
older fixed-delay assumption while preserving that probe-and-collect design.

## Rendering an Existing Worker Snapshot

The worker-version report can be regenerated from a saved snapshot without
Taskcluster credentials or probe tasks:

```sh
go run ./audit-worker-versions render \
WorkerVersions/workers.json \
WorkerVersions/README.md
```

Omit the output path to print the generated Markdown to standard output.

To preview the generated report in the website, serve the repository root:

```sh
./run_local.sh
```

Then open <http://localhost:8000/docs/index-local.html>. The local preview uses
`WorkerVersions/README.md` and `docs/history.json` from the checkout. The
published page continues to load the current report from GitHub. Pass a port as
the first argument to override the default, for example `./run_local.sh 8080`.

## Testing

Pull requests and pushes to `master` run Go, Python, JavaScript, and Firefox
layout tests through `.github/workflows/ci.yml`. These checks do not create
Taskcluster probes or publish reports.

## Optional Quick previews

See [scripts/quick/README.md](scripts/quick/README.md) for personal Quick previews
of the checkout's report. These helpers are separate from production publishing.

## Production Automation

The existing `run-reports.sh` and `audit.sh` scripts implement the repository's
production publishing workflow. They include git and production-site behavior;
use `fetch_and_generate.py` for local refreshes.

### Prerequisites
- Valid Taskcluster credentials must be set in the environment variables:
- `TASKCLUSTER_CLIENT_ID`
- `TASKCLUSTER_ACCESS_TOKEN`

### How it works
1. `run-report.sh` executes `audit.sh`
1. `run-reports.sh` executes `audit.sh`
2. `audit.sh` schedules tasks for each worker pool to extract worker implementation details from logs
3. Results are stored in the `WorkerPools` directory
3. Results are stored in the `WorkerVersions` directory
4. `mozilla-history` stores Taskcluster configurations in their respective directories:
- Hooks definitions in `Hooks/`
- Roles definitions in `Roles/`
- WorkerPool definitions in `WorkerPool/`
- Worker Pool definitions in `WorkerPools/`
5. `build-docs-history.sh` collects every past revision of `WorkerVersions/workers.json` into
`docs/history.json`, which feeds the two GitHub Pages views:
- `docs/index.html` &mdash; the current report plus the full history tables and graphs
Expand Down
Loading