Skip to content

Deploy October 13, 2026 - #6391

Merged
fatadel merged 108 commits into
productionfrom
main
Oct 13, 2026
Merged

fatadel merged 108 commits into
productionfrom
main

Conversation

@fatadel

@fatadel fatadel commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Changes:

[Florian Quèze] profiler-cli: accept several marker handles and ranges in marker info (#6277)
[Nazım Can Altınova] Add "profiler-cli profile save " (#6340)
[Nazım Can Altınova] Fix the upload progress bar not showing in light mode (#6348)
[Nazım Can Altınova] Fix the variable name passed to the malformed response error strings (#6351)
[Markus Stange] Add missing await when calling Chrome importer (#6346)
[Markus Stange] Use "falls through" for all fallthrough comments (#6344)
[Markus Stange] Move source map related profile logic files into profile-logic/source-maps/ (#6349)
[Markus Stange] Make the source view actually read-only. (#6313)
[Markus Stange] Run CI on merge queue branches (#6352)
[Markus Stange] Serve production build by default during local development (#6353)
[Nazım Can Altınova] Fix "... was not wrapped in act" warnings in tests (#6362)
[Nazım Can Altınova] Add a scope tree test for shorthand destructuring defaults (#6367)
[fatadel] Accept --session before subcommands in profiler-cli (#6358)
[Nazım Can Altınova] Replace the deprecated loose option with Babel assumptions (#6366)
[fatadel] Clarify how to save profiles for later access (#6355)
[Markus Stange] Speed up activity graph drawing (#5888)
[Nazım Can Altınova] Make yarn test-cli and yarn test-all faster (#6369)
[Nazım Can Altınova] Add global --permalink and --short-permalink flags to profiler-cli (#6338)
[Nazım Can Altınova] Use a profile with tab information in the tab selector URL tests (#6370)
[fatadel] Move FileIO table labels into the Gecko profile upgrader (#6375)
[fatadel] Clear preview selections when zooming out in the CLI (#6380)
[Nazım Can Altınova] Add the ability to apply source maps to the profiles using profiler-edit (#6382)
[fatadel] 🔃 Sync: l10n -> main (October 13, 2026) (#6389)

And special thanks to our localizers:

de: Ralf Duehnfahr
el: Jim Spentzos
en-GB: Ian Neal
es-CL: ravmn
fr: Théo Chevalier
fy-NL: Fjoerfoks
ia: Melo46
it: Francesco Lodolo
nl: Fjoerfoks
ro: IulianArian
ro: robbp
ru: Valery Ledovskoy
sv-SE: Andreas Pettersson
tr: Selim Şumlu
tr: Sena nur
zh-TW: Pin-guang Chen

mstange and others added 30 commits September 13, 2026 15:03
This matches what we already do for the assembly view editor.

Fixes #5451.
…#6277)

Inspecting a sequence of markers meant one invocation per handle. `marker info`
now takes a list of handles, comma-separated handles, and m-1..m-3 ranges in any
combination, returning a marker-info-multi result for two or more markers. Any
spelling meaning exactly one marker keeps the previous text and JSON output byte
for byte.

An unresolvable handle is reported in place with the rest still shown and a
non-zero exit; a malformed spec, reversed range, or range wider than 256 handles
fails before any lookup.

Ranges expand numerically and handle numbering continues across listings, so a
range overrunning its listing resolves into unrelated markers. When one lands in
more than one thread the CLI warns and exits non-zero.
I was experimenting with oxlint, and oxlint's check needs the verbatim
"falls through" spelling (unless we want to customize the pattern).
attemptToConvertChromeProfile is the only importer that returns a 
promise rather than a finished profile.

We were returning the promise without an await, so any exceptions from
it would bypass our error wrapping and the console.error call.
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
…-maps/

We have quite some files about the source maps now. It makes sense to
group them properly.
The name of the worker is important as it gets bundled later, so it's
kept the same.
Move the "pick the on-disk profile encoding from the filename" logic out
of profiler-edit so it can be reused by profiler-cli.
Writes the loaded profile to disk with the same output as the web app's
Download button with every sharing option checked. The encoding follows
the extension (.json, .json.gz, .jslb, .jslb.gz). Passing a directory
writes a .json.gz file named like the web app download. Existing files
are only overwritten with --force.
Fixes #6335 

Writes the loaded profile to disk with the same output as the web app's
Download button with every sharing option checked. The encoding follows
the extension (.json, .json.gz, .jslb, .jslb.gz). Passing a directory
writes a .json.gz file named like the web app download. Existing files
are only overwritten with `--force`.
The progress bar reuses `.publishPanelUploadBarInner`, but it's rendered
outside of the publish panel, so the inner bar color variable that was
scoped to `.publishPanelPanel` didn't apply to it. This left the bar
with a transparent background and only the semi-transparent white
stripes were drawn. They were still visible on the dark top bar, but not
on the light one. This commit defines the variable on the element itself
instead.
…6351)

The FTL strings for the malformed response errors use
`$apiErrorMessage`, but the component was passing `errorMessage`, so the
raw placeholder was displayed.
<!-- profiler-preview-links:start -->
[Main](https://main--perf-html.netlify.app/) | [Deploy
preview](https://deploy-preview-6346--perf-html.netlify.app/)
<!-- profiler-preview-links:end -->

attemptToConvertChromeProfile is the only importer that returns a
promise rather than a finished profile.

We were returning the promise without an await, so any exceptions from
it would bypass our error wrapping and the console.error call.
<!-- profiler-preview-links:start -->
[Main](https://main--perf-html.netlify.app/) | [Deploy
preview](https://deploy-preview-6344--perf-html.netlify.app/)
<!-- profiler-preview-links:end -->

I was experimenting with oxlint, and oxlint's check needs the verbatim
"falls through" spelling (unless we want to customize the pattern).
…-maps/ (#6349)

<!-- profiler-preview-links:start -->
[Main](https://main--perf-html.netlify.app/) | [Deploy
preview](https://deploy-preview-6349--perf-html.netlify.app/)
<!-- profiler-preview-links:end -->

We have quite some files about the source maps now. It makes sense to
group them properly.
The name of the worker is important as it gets bundled later, so it's
kept the same.
<!-- profiler-preview-links:start -->
[Main](https://main--perf-html.netlify.app/) | [Deploy
preview](https://deploy-preview-6352--perf-html.netlify.app/)
<!-- profiler-preview-links:end -->

This will allow us to enable the merge queue for the main branch. So
with this, the PRs that are added to the merge queue will properly
trigger CI checks. It shouldn't have any effect until the merge queue is
enabled.
Fixes #6332.

Now we have:

* `yarn start`: production build, no service worker, port 4242
* `yarn start-prod`: production build, with service worker, port 4243
* `yarn start-dev`: development build, no service worker, port 4241

There's a bit of churn in how the filenames are determined. In the past,
we were putting a hash in the filenames whenever we were building for
production, including for the source map worker, and we didn't have a
way to "watch" the production build.

Now that `yarn start` is a "watched" production build, we need to make
sure that the source map worker filename does not contain a hash, otherwise
the path to it that gets embedded into the main bundle would get out of sync.

The main bundle still uses a hashed filename; each rebuild updates
index.html with the new path. (It's not straightforward to use a similar
mechanism for the worker, because the worker and the main bundle run in 
separate esbuild watch contexts.)
<!-- profiler-preview-links:start -->
[Main](https://main--perf-html.netlify.app/) | [Deploy
preview](https://deploy-preview-6353--perf-html.netlify.app/)
<!-- profiler-preview-links:end -->

Fixes #6332.

Now we have:

* `yarn start`: production build, no service worker, port 4242
* `yarn start-prod`: production build, with service worker, port 4243
* `yarn start-dev`: development build, no service worker, port 4241

There's a bit of churn in how the filenames are determined. In the past,
we were putting a hash in the filenames whenever we were building for
production, including for the source map worker, and we didn't have a
way to "watch" the production build.

Now that `yarn start` is a "watched" production build, we need to make
sure that the source map worker filename does not contain a hash,
otherwise the path to it that gets embedded into the main bundle would
get out of sync.

The main bundle still uses a hashed filename; each rebuild updates
index.html with the new path. (It's not straightforward to use a similar
mechanism for the worker, because the worker and the main bundle run in
separate esbuild watch contexts.)
We used @babel/eslint-plugin only for its no-invalid-this rule, which
avoided false positives on `this` inside class property functions.
ESLint's core rule handles class fields since ESLint 8, and the rule was
removed from @babel/eslint-plugin in Babel 8. This removes both
@babel/eslint-plugin and its @babel/eslint-parser peer dependency, which
wasn't used anywhere else.
Babel is only used by Jest, so the config changes only affect tests:

- @babel/preset-env: removed `bugfixes`, which is now always enabled,
  and `useBuiltIns`/`corejs`, which were removed. We don't replace them
  with babel-plugin-polyfill-corejs3, because the test target is the
  current Node version, which doesn't need these polyfills.
- @babel/preset-react: remove `useSpread`, which is now always enabled.
- @babel/preset-typescript: remove `isTSX` and `allExtensions`, which
  were removed. JSX is now parsed only in .tsx files, based on the file
extension. No .ts file contains JSX.
- Add the class feature plugins we configure in babel.config.json as
  explicit devDependencies. They were only resolvable through hoisting,
  and the lockfile now contains both Babel 7 and 8 versions of them.
mozilla-pontoon and others added 27 commits October 7, 2026 10:10
Co-authored-by: Jim Spentzos (el) <jimspentzos2000@gmail.com>
Co-authored-by: Ralf Duehnfahr (de) <rd.marschall@web.de>
Co-authored-by: Valery Ledovskoy (ru) <valery@ledovskoy.com>
Co-authored-by: Andreas Pettersson (sv-SE) <amvpet@gmail.com>
Co-authored-by: Fjoerfoks (nl) <fryskefirefox@gmail.com>
Zooming out creates a preview selection for the removed range, which
sample and function queries still honor. Clear that selection after
popping or clearing zoom ranges so queries cover the restored view.

Fixes #6376
Co-authored-by: Ian Neal (en-GB) <iann_bugzilla@blueyonder.co.uk>
Co-authored-by: Fjoerfoks (nl) <fryskefirefox@gmail.com>
Co-authored-by: Fjoerfoks (fy-NL) <fryskefirefox@gmail.com>
CI profiles of benchmarks like Speedometer can't show any JS source
code. The page was served from a local web server that is gone by the
time the profile is viewed, and nothing fetched the source maps.

embedJsSources reads every JS source through a reader that the caller
provides, and stores its text in the sources table. It then applies the
source maps of these sources, so the original files from sourcesContent,
including node_modules, end up in the profile as well.

The source map is found through the sourceMapURL column, or through the
sourceMappingURL comment at the end of the file when the column is
empty.
The option takes a JSON file that maps URL prefixes to local
directories, and embeds the sources it finds into the profile.

The source-map package reads its wasm parser from a file next to the
bundle at runtime. Embed it into profiler-edit.js instead, because
Firefox's profiler-node-tools toolchain only ships the .js files.
Co-authored-by: Melo46 (ia) <melo@carmu.com>
Co-authored-by: robbp (ro) <robbpaun@gmail.com>
Co-authored-by: IulianArian (ro) <arianiulian@gmail.com>
Co-authored-by: Melo46 (ia) <melo@carmu.com>
Co-authored-by: ravmn (es-CL) <ravmn@ravmn.cl>
Co-authored-by: Théo Chevalier (fr) <theo@theochevalier.org>
Record the version that will be published with the next production
deployment.
@fatadel
fatadel requested review from a team and canova as code owners October 13, 2026 13:38
@fatadel
fatadel merged commit d019001 into production Oct 13, 2026
55 of 56 checks passed
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.

5 participants