Compatibility/System Addon/Release Process: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(→‎Release Process: Add release process section)
(s/bug/comment/, that was a mistake)
 
(40 intermediate revisions by 4 users not shown)
Line 1: Line 1:
= Interventions Releases =
= Interventions Releases =
Module Owner: [[User:DenSchub|Dennis Schubert]]
__TOC__  
__TOC__  


= Interventions Release Process =
Generally speaking, new interventions are landed in the Firefox repo as soon as they're written, and then they just ride the trains.
 
In cases that are more urgent, we can speed up the process by
 
* uplifting interventions into Beta at any time during the cycle,
* uplifting the interventions into Release to be shipped with the next dot-release,
* shipping an interventions add-on update out-of-band.
 
It is up to each release's Interventions Owner to decide if a WebCompat bug is important enough to warrant a fast process.
 
== The normal process: Letting interventions ride the train ==
 
For low-priority interventions, the simplest way to ship is to land them in the tree and have them ride the trains like any code change.
 
# Build and test the interventions as usual. Make sure to bump the version number in <tt>manifest.json</tt> accordingly somewhere in your patch stack.
# Submit the patch to Phabricator, the <tt>webcompat-reviewers</tt> group will be added automatically. Land the stack whenever the reviews are done.
# Make sure that for any intervention you added, you set the <tt>sitepatch-applied</tt> label GitHub or the <tt><nowiki>
[webcompat:sitepatch-applied]</nowiki></tt> whiteboard flag on Bugzilla. Likewise, remove those labels for all interventions you removed.
 
Your work is done here!
 
== Uplifting new interventions into Beta or Release ==


''Note: for simplicity, interventions and UA overrides will be referred to solely as interventions in this section.''
For now, just request uplifts via the Phabricator-based process. Make sure the uplift includes a version number change, because you might run into issues otherwise. In the future, we will explore always uplifting the entire addon code to the trains, but this is a future ToDO.


== Intervention Types ==
== Shipping interventions with an out-of-band System Addon Update ==
There are two types of interventions that we ship in Firefox: high priority and low priority. As a general rule of thumb, a low priority intervention will fix a long-standing bug. A high priority intervention will fix a regression in a top site. In case of confusion, please get in touch with Mike Taylor for clarification as to which class we’re dealing with.


Low priority interventions should be landed in the [https://github.com/mozilla-extensions/webcompat-addon Mozilla webcompat-addon repo] on GitHub and upstreamed to the relevant tree once per release. These do not require outside collaboration or approval to ship (except for the case of Fennec ESR, which will require Relman uplift to the ESR branch while it exists as a supported product), beyond WebCompat Addon module peer or owner approval.
This process will involve: two WebCompat engineers, one Release Engineer, one Release Manager, and however many people it takes to run tests.


High priority interventions require shipping out-of-band via Balrog ([https://bugzilla.mozilla.org/show_bug.cgi?id=1571535 or Normandy in the future]), and as such, require a more in-depth QA and Relman release process, at least for Fennec and Desktop. The process for Release Fenix is currently undefined.
=== Prerequisites ===


== Shipping Scenarios ==
Before you can do any of the work outlined here, you need to make sure that your Mozilla LDAP account is a member of the <tt>vpn_cloudops_shipit</tt> and <tt>xpi_system_build</tt> groups. If you are not sure, [https://firefox-ci-tc.services.mozilla.com/profile check your LDAP profile here (Mozilla-internal)]. If one or both groups are missing, file a bug similar to [https://bugzilla.mozilla.org/show_bug.cgi?id=1683143 bug 1683143 (Mozilla-internal)].
All interventions should first land in the [https://github.com/mozilla-extensions/webcompat-addon Mozilla webcompat-addon repo] on GitHub and be accompanied by a version number bump in the addon’s manifest.json. There may be high priority situations where it’s more desirable to land in Mozilla Central first. In these cases, the patches must be backported to GitHub as soon as the intervention is shipped.  


Once the intervention is reviewed by a [[https://wiki.mozilla.org/Modules/All#WebCompat_Addons WebCompat Addon module peer]] and landed, one or more of the following shipping scenarios is followed, depending on the affected platforms and products:
You also need to be able to connect to the Mozilla Corporate VPN to use ShipIt. See [https://mana.mozilla.org/wiki/display/SD/VPN this guide (Mozilla-internal)] if you're currently not set up for that.


=== Desktop Releases ===
=== Preparations ===


==== Low Priority ====
As opposed to cherry-picking individual commits or crafting a custom build of the addon, we're always shipping the Interventions addon based on whatever is in the current <tt>firefox</tt> repo - that is, everything that's currently included in Nightly. This reduces the risks around crafting a wrong patch, missing a file, etc - and we can easily verify the interventions by using a Nightly build.
# Make sure the version number in manifest.json is incremented.
# Land the updated addon version in Mozilla Central via a bug in [https://bugzilla.mozilla.org/buglist.cgi?product=Web%20Compatibility&component=Interventions&resolution=---&list_id=15330878 Web Compatibility::Interventions]
# That’s it. Let the code ride the trains.


==== High Priority ====
* Your '''interventions need to be landed in the <tt>firefox</tt> repo''', <tt>autoland</tt> is not enough. If you're working on a tight schedule, ask a sheriff, who should be able to land your code quicker.
{{todo| make sure this is up to date with the new mozilla-extensions github actions workflow|mike}}
* File a [https://bugzilla.mozilla.org/show_bug.cgi?id=2001648 tracking bug like this one] as soon as you can. Use this to give a heads-up to the involved Release Owner, as well as the on-duty Release Engineer. If you need QA resources, give them a heads-up, too.
# File a bug to ship the addon via Balrog in the [https://bugzilla.mozilla.org/buglist.cgi?product=Web%20Compatibility&component=Interventions&resolution=---&list_id=15330878 Web Compatibility::Interventions] component
# Attach an XPI for the WebCompat QA team to test locally using the following naming convention: webcompat-N.N.N.unsigned.xpi
# When testing, QA can use an unbranded build, or Nightly.
# Describe how QA can test and verify the intervention in a comment
# QA will test and leave a comment with their findings: either sign-off, or describing unexpected behavior that needs to be investigated.
# Request the signed addon be staged to the release-sysaddon channel by :rdalal
# Ask QA to verify the release-sysaddon update works (instructions here), and the intervention works as expected
# Once QA signs off, request Relman for signoff in Balrog (a needinfo request in the bug is sufficient)
# Once the addon ships to release:
## Land the addon in Mozilla Central and request Beta uplift
## File a bug to remove the addon from Balrog in the [https://bugzilla.mozilla.org/describecomponents.cgi?product=Firefox&component=System%20Add-ons%3A%20Off-train%20Deployment#System%20Add-ons%3A%20Off-train%20Deployment Firefox::System Add-ons: Off-train Deployment] component. This should happen when the next addon version rides to release, otherwise it will be overridden by the older version in Balrog. e.g., [https://bugzilla.mozilla.org/show_bug.cgi?id=1587186 Bug 1587186].


=== Mobile Releases ===
=== Kicking off the build process ===
==== Fennec ESR ====
The process for Fennec will match Desktop, except the patches need to be written against the ESR branch.


===== Low Priority =====
# Make sure you're connected to the Mozilla Corp VPN, specifically the US-west endpoint.
# Relman will need to approve ESR uplift for the next ESR release once the patch has landed in the ESR branch. This happens in Bugzilla by requesting ESR approval for the patch.
# Sign into [https://shipit.mozilla-releng.net/ Ship-It]. In the header menu, go to Releases > Extensions > New.
# From the loaded list, select the <tt>webcompat</tt> extension. Afterwards, select a revision. The current head commit is fine, just make sure it actually includes your interventions. Click the "create release" button and submit the release.
# When the release has been submitted and you click the "close" button, it will send ton the list of all active XPI releases. Search for the right webcompat addon release, click on "Build", and click "schedule".
# When that's done, the "Build" will turn into "Build task", which is a clickable link to the job in Taskcluster. It might take a few moments before the link works, but it should work eventually.


===== High Priority =====
=== Testing the dep-signed .xpi ===
# Follow the same steps as Desktop High Priority.


==== Fenix / Android Components ====
# Wait until all the tasks in the previously started build job are done. It can take 10-15 minutes, so this is your chance to relax and stretch.
The system addon is served as a component. Currently [https://github.com/mozilla-mobile/fenix/blob/f5f0cb8d9caf556db586b248856a17e7052a4fa3/buildSrc/src/main/java/Dependencies.kt#L138 Fenix pulls in the latest version], which means the updated addon should be served in the next Google Play Store update.
# When all jobs are done, open the <tt>dep-signing-webcompat</tt> task and copy the URL to the <tt>public/build/webcompat.xpi</tt> artifact. Ideally, post that for reference into the tracking bug.
# Download an unbranded release build - you can find [[Add-ons/Extension_Signing#Unbranded_Builds|instructions on how to get it here]].
#* Note: if you are on macOS, you might get a "Nightly is damaged and can’t be opened" error. If so, you can do what <tt>mozregression</tt> is doing and sign the unbranded build yourself. You can do that with <tt>codesign -v --force --deep --sign - Nightly.app && xattr -r -d com.apple.quarantine ./Nightly.app</tt>.
# Launch that unbranded build with a blank profile. Head to <tt>about:config</tt>, create a new bool pref named <tt>xpinstall.signatures.dev-root</tt> and set it to <tt>true</tt>.
# Then, open the link to the dep-signed .xpi from the build step earlier. Firefox should install it happily.


# File an issue and open a pull request against the [https://github.com/mozilla-mobile/android-components Android Components repo] on GitHub which contains the updated addon and request review. Currently Dennis Schubert and Mike Taylor can review and merge, as well as any core member of the mozilla-mobile organization.
You can now test the update. Check the version number on <tt>about:support</tt>, test that <tt>about:compat</tt> works, test the intervention. If everything looks fine, you can proceed with
# That’s it. The new version will be used when the new android-components version is released (currently weekly).


{{todo| depending on how updated android components are released in Fenix, there may not be a difference between high and low priority releases. But if there is, we need to find out how to ask for an urgent version release...ideally before we need it}}
=== Shipping sign-offs, testing the real .xpi ===


=== Final Checklist when shipping a release ===
To get a "real release-signed .xpi", you need to:


* [ ] Verify addon version has been incremented
# Head back to Ship-It. Click the "Ship" "button", which will open a popup asking for a sign-off. It's fine if you, as the person writing the interventions, do one of the sign-offs. Do so.
* [ ] Verify new intervention(s) appears in about:compat as expected
# Get another WebCompat team member to be the second-sign off. They should be familiar with the intervention, and also have done some quick testing with the dep-signed .xpi.
* [ ] Close all Bugzilla bugs with interventions associated with the current release
# When the second sign-off is there, Ship-It will automatically start the "shipping" phase. Don't worry, it's not actually shipping anything to users yet - it's just building a shippable .xpi. Click the "Ship task" link, which will again bring you to Taskcluster.
* [ ] WebCompat QA has signed off on XPI
# After you got your sign-off and the shipping phase in Ship-It was scheduled, you will no longer see the build in the "Pending Releases" view. That's expected. In the main menu, head to Releases > Extensions > Recent.
* [ ] Balrog folks have uploaded XPI
# If all tasks aren't done yet, wait. When they're done, open the <tt>release-signing-webcompat</tt> task, and copy the link to the <tt>public/build/webcompat.xpi</tt> artifact. '''Be careful with this link''', as it is a real release-signed .xpi that any Firefox will just install. Do not publicly share this link.
* [ ] Relman has signed off on XPI in Balrog
# Start a regular release Firefox, with a new profile. Then open the Link to the artifact. Firefox will install it happily. Run the same tests again, just to make sure.
* [ ] Fennec ESR uplift request, when relevant
* [ ] Desktop ESR uplift request, when relevant
* [ ] m-c beta or ESR uplift request, when relevant
* [ ] Intent to Ship email is sent to release-drivers@ mailing list for high priority releases
* [ ] WebCompat QA marks each Bugzilla bug associated with the release as VERIFIED


=== Checklist for follow-ups after landing/deploying everywhere ===
If you're satisfied with the testing results, proceed with
When the new addon version is released everywhere and there will be no more changes to that version, there are a couple of follow-up steps to do in preparation for the next release cycle.


* [ ] Tag the version on GitHub with `git tag -a v8.0.0 -m 'v8.0.0'` and push the tags with `git push --tags` so we have a persistent record of "what shipped when" on GitHub as well.
=== Getting the update on a Balrog staging channel, and final testing ===


= Interventions Release Rotations =
Now, you need to involve Release Engineering.  
Engineers on the Web Compatibility team will rotate on ownership of shipping new versions of our interventions addons, serving as an Intervention Release Owner (IRO). The process will follow a predictable 4 week schedule, mirroring the proposed 4 week [[Release_Management/Calendar|Firefox release schedule]], however, we will attempt to land the interventions 1 week before soft freeze (see the schedule above for dates). Another way to look at this is 2 weeks before release.  


A tracking bug for the next release should be filed in Bugzilla (in the [[ & Tooling|Web Compatibility::Interventions]] component). Bugs for adding or removing interventions in the current release cycle should block this bug.
# Find out which RelEng is on duty - you can check the subject of [https://matrix.to/#/#releaseduty:mozilla.org the releaseduty Matrix room].
# Ask them to add Balrog rules for the webcompat release on the staging channel. The staging channels have a <tt>-sysaddon</tt> suffix, so depending on if you're testing Release or Beta, the channel names would be <tt>release-sysaddon</tt> and <tt>beta-sysaddon</tt> respectively.


During bug diagnosis, if a site is identified as a low priority intervention candidate, a [https://github.com/webcompat/web-bugs/labels/action-needssitepatch label is added] for the next IRO to take care of during their rotation. Low priority interventions ride the trains without any need for uplifts or out of band shipping mechanisms. The expectation is that there will be a single regular low-priority release for each version of Firefox, driven by the IRO.  
When they have staged the update, you can test the whole process.


High priority interventions should be flagged immediately to the IRO who will then begin the process necessary to ship an off-train intervention.
# Post the testing instructions on Bugzilla. You can use [https://bugzilla.mozilla.org/show%20bug.cgi?id=2001648 this comment] as a template. A few notes:
#* The value for <tt>extensions.systemAddon.update.url</tt> is the original value of that pref, except that the <tt>%CHANNEL%</tt> variable is replaced with whatever staging channel you're targetting.
#* The Browser Console command is not necessarily needed - but since the background update check happens in the background and only once per day, it's highly advisable to use it. It will trigger the exact same update step that the background task would do.


== Interventions Release Rotations ==
Be very careful with testing, '''this is your final chance to catch issues'''. This is also the stage where you should be involving QA, or any other internal users who might help validate the fix. Make sure that all testing steps and all testing results are documented in the Bugzilla bug.


Engineers on the Web Compatibility team will rotate on ownership of shipping new versions of our interventions addons, serving as an Intervention Release Owner (IRO). The process will follow a predictable 4 week schedule, mirroring the proposed 4 week Firefox release schedule.
=== Shipping it. ===


During bug diagnosis, if a site is identified as a low priority intervention candidate, a label shall be added for the IRO to take care of during their rotation. Low priority interventions ride the trains without any need for uplifts or out of band shipping mechanisms. The expectation is that there will be a single regular low-priority release for each version of Firefox, driven by the IRO.  
When all testing is completed and nothing looks concerning, you can finally press the big button - metaphorically speaking.


High priority interventions should be flagged immediately to the IRO who will then begin the process necessary to ship an off-train intervention.
# Write a Bugzilla comment to explicitly document which channels and versions you want to target.
#* Balrog targets both channels and versions. So, when talking to Release Engineering, you need to be exact about which channels and versions you target. For example, if you want to target the current Release and the current Beta version, be sure to specify something like "we want to target <tt>release</tt> for <tt>145.*</tt>, as well as <tt>beta</tt> and <tt>aurora</tt> for <tt>146.*</tt>.
#* Firefox Developer Edition is technically Beta, but it's not using the <tt>beta</tt> channel. That is <tt>aurora</tt>, so make sure to include it if needed.
#* Firefox will happily downgrade (or rather, shadow) built-in versions. It's therefore never advisable to target Nightly in a train-hop. Also, if you, for example, shipped a train-hop to 145.0, and then uplift a bunch of new interventions into 145.0.2 a few weeks later, the train-hop update will override that. If you think this will become an issue, Release Engineers should be able to help you out by specifically targeting individual dot-versions as opposed to a whole major version.
# Make sure RelEng sees the comment - either by ni? them, or by sending them a message. Release Engineering will need to involve Release Management to get the necessary sign-offs.


== Candidates for interventions ==
When Release Engineering pushes the update live, you're done. Congratulations, you just made the web better for our users - and they won't even notice it.
There is a [https://github.com/webcompat/web-bugs/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aaction-needssitepatch list of sites] as well as a [https://bugzilla.mozilla.org/buglist.cgi?product=Web%20Compatibility&component=Interventions&resolution=---&list_id=15328531 Bugzilla bug query] for sites that need interventions. In addition, the [https://github.com/webcompat/web-bugs/issues?q=is%3Aissue+is%3Aopen+label%3Atype-uaoverride+ `type-uaoverride`] label may be useful to look at. During a rotation, you should look at both of these sites and determine which are the most important to work on and ship (or close, if appropriate).


Lists of currently deployed interventions across the products and channels are available here https://arewehotfixingthewebyet.com/.
==== Speeding up the rollout ====


In addition, there is also a [https://github.com/webcompat/web-bugs/issues?q=is%3Aissue+label%3Asitepatch-applied `sitepatch-applied`] label that helps to keep track of existing interventions. Take care to add this to bugs after shipping a site patch.
We do not have a real mechanism to speed up the deployment. Clients check for addon updates once per day, and we don't have a way to tell clients "do it NOW". However, if time presses or you want to do accelerated testing of something, you can motivate individual Firefox installs do update immediately.


== IRO Rotation Responsibilities ==
* You can open the Browser Console/Browser Toolbox, and paste <tt>ChromeUtils.importESModule("resource://gre/modules/AddonManager.sys.mjs", { global: "shared" }).AddonManagerPrivate.backgroundUpdateCheck();</tt>.
* Authoring, testing, landing high priority intervention patches
* Alternatively, you can open <tt>about:config</tt> and set <tt>app.update.lastUpdateTime.addon-background-update-timer</tt> to 0. That will not trigger an update right away, but it will speed it up a lot. Since this is a process that's easily available to users, it's fine to instruct them to do so if there is demand.
* Authoring, testing, landing normal priority interventions
* Requesting testing of high risk interventions from the WebCompat QA team
* Coordinating QA verification and release stakeholders (Balrog, AC, etc) for high priority interventions
* Sending an intent-to-ship email for high priority intervention patches
* Landing patches in GitHub, Mozilla Central, and Android Components repos
* Requesting uplifts for interventions when necessary
* Backporting interventions from mozilla-central where necessary (see [https://github.com/mozilla/webcompat-addon/wiki/Backporting-a-mozilla-central-patch Backporting a Mozilla Central Patch]).
* Handling potential regression fallout from interventions
* Add sitepatch-applied labels to web-bugs issues, as relevant.


== Intervention Release Owner Schedule ==
=== Observing the rollout ===


For simplicity, we rotate on a per-release following the Nightly schedule at [[https://wiki.mozilla.org/Release_Management/Calendar|Firefox Release Calendar]].
Telemetry data includes the version numbers of system-addons, so you can leverage that. You can fork [https://sql.telemetry.mozilla.org/queries/112484#275960 this query (Mozilla-internal)]. Be sure to adjust:


=== Upcoming Releases ===
* Inside the <tt>base</tt> CTE
* Firefox 80 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1647771 v13]) - Karl
** The <tt>submission_timestamp</tt> condition to be close to the beginning of the rollout to avoid querying unnecessary data
* Firefox 81 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1649243 v14])- Ksenia
** The <tt>mozfun.norm.truncate_version(application.version, 'major')</tt> condition to match the major version(s) you're targeting.
* Firefox 82 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1649244 v15])- Tom
* Inside the <tt>proxy</tt> CTE
** The <tt>payload_info_addons</tt> condition to target the interventions addon version you're interested in.


=== Past Releases ===
The resulting graph is a percentage of client checkins that have the new version installed. The query is using the live telemetry data, so you're as close to real-time as it gets. Note that it is totally fine and expected that the line goes down sometimes. During certain times of the day, a lot of clients wake up for the first time, and they might do a telemetry checkin before they get the update.


* Firefox 74 (v7) - Ksenia
You should usually see a 40-50% rollout after three hours or so. After 24 hours, the chart should be around 90%.  
* Firefox 75 (v8) - Dennis
* Firefox 76 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1621062 v9]) - Mike
* Firefox 77 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1625222 v10]) - Ksenia
* Firefox 78 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1631858 v11]) - Mike
* Firefox 79 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1637672 v12]) - Dennis


[[Category:Web Compatibility]]
[[Category:Web Compatibility]]

Latest revision as of 17:54, 27 November 2025

Interventions Releases

Module Owner: Dennis Schubert

Generally speaking, new interventions are landed in the Firefox repo as soon as they're written, and then they just ride the trains.

In cases that are more urgent, we can speed up the process by

  • uplifting interventions into Beta at any time during the cycle,
  • uplifting the interventions into Release to be shipped with the next dot-release,
  • shipping an interventions add-on update out-of-band.

It is up to each release's Interventions Owner to decide if a WebCompat bug is important enough to warrant a fast process.

The normal process: Letting interventions ride the train

For low-priority interventions, the simplest way to ship is to land them in the tree and have them ride the trains like any code change.

  1. Build and test the interventions as usual. Make sure to bump the version number in manifest.json accordingly somewhere in your patch stack.
  2. Submit the patch to Phabricator, the webcompat-reviewers group will be added automatically. Land the stack whenever the reviews are done.
  3. Make sure that for any intervention you added, you set the sitepatch-applied label GitHub or the [webcompat:sitepatch-applied] whiteboard flag on Bugzilla. Likewise, remove those labels for all interventions you removed.

Your work is done here!

Uplifting new interventions into Beta or Release

For now, just request uplifts via the Phabricator-based process. Make sure the uplift includes a version number change, because you might run into issues otherwise. In the future, we will explore always uplifting the entire addon code to the trains, but this is a future ToDO.

Shipping interventions with an out-of-band System Addon Update

This process will involve: two WebCompat engineers, one Release Engineer, one Release Manager, and however many people it takes to run tests.

Prerequisites

Before you can do any of the work outlined here, you need to make sure that your Mozilla LDAP account is a member of the vpn_cloudops_shipit and xpi_system_build groups. If you are not sure, check your LDAP profile here (Mozilla-internal). If one or both groups are missing, file a bug similar to bug 1683143 (Mozilla-internal).

You also need to be able to connect to the Mozilla Corporate VPN to use ShipIt. See this guide (Mozilla-internal) if you're currently not set up for that.

Preparations

As opposed to cherry-picking individual commits or crafting a custom build of the addon, we're always shipping the Interventions addon based on whatever is in the current firefox repo - that is, everything that's currently included in Nightly. This reduces the risks around crafting a wrong patch, missing a file, etc - and we can easily verify the interventions by using a Nightly build.

  • Your interventions need to be landed in the firefox repo, autoland is not enough. If you're working on a tight schedule, ask a sheriff, who should be able to land your code quicker.
  • File a tracking bug like this one as soon as you can. Use this to give a heads-up to the involved Release Owner, as well as the on-duty Release Engineer. If you need QA resources, give them a heads-up, too.

Kicking off the build process

  1. Make sure you're connected to the Mozilla Corp VPN, specifically the US-west endpoint.
  2. Sign into Ship-It. In the header menu, go to Releases > Extensions > New.
  3. From the loaded list, select the webcompat extension. Afterwards, select a revision. The current head commit is fine, just make sure it actually includes your interventions. Click the "create release" button and submit the release.
  4. When the release has been submitted and you click the "close" button, it will send ton the list of all active XPI releases. Search for the right webcompat addon release, click on "Build", and click "schedule".
  5. When that's done, the "Build" will turn into "Build task", which is a clickable link to the job in Taskcluster. It might take a few moments before the link works, but it should work eventually.

Testing the dep-signed .xpi

  1. Wait until all the tasks in the previously started build job are done. It can take 10-15 minutes, so this is your chance to relax and stretch.
  2. When all jobs are done, open the dep-signing-webcompat task and copy the URL to the public/build/webcompat.xpi artifact. Ideally, post that for reference into the tracking bug.
  3. Download an unbranded release build - you can find instructions on how to get it here.
    • Note: if you are on macOS, you might get a "Nightly is damaged and can’t be opened" error. If so, you can do what mozregression is doing and sign the unbranded build yourself. You can do that with codesign -v --force --deep --sign - Nightly.app && xattr -r -d com.apple.quarantine ./Nightly.app.
  4. Launch that unbranded build with a blank profile. Head to about:config, create a new bool pref named xpinstall.signatures.dev-root and set it to true.
  5. Then, open the link to the dep-signed .xpi from the build step earlier. Firefox should install it happily.

You can now test the update. Check the version number on about:support, test that about:compat works, test the intervention. If everything looks fine, you can proceed with

Shipping sign-offs, testing the real .xpi

To get a "real release-signed .xpi", you need to:

  1. Head back to Ship-It. Click the "Ship" "button", which will open a popup asking for a sign-off. It's fine if you, as the person writing the interventions, do one of the sign-offs. Do so.
  2. Get another WebCompat team member to be the second-sign off. They should be familiar with the intervention, and also have done some quick testing with the dep-signed .xpi.
  3. When the second sign-off is there, Ship-It will automatically start the "shipping" phase. Don't worry, it's not actually shipping anything to users yet - it's just building a shippable .xpi. Click the "Ship task" link, which will again bring you to Taskcluster.
  4. After you got your sign-off and the shipping phase in Ship-It was scheduled, you will no longer see the build in the "Pending Releases" view. That's expected. In the main menu, head to Releases > Extensions > Recent.
  5. If all tasks aren't done yet, wait. When they're done, open the release-signing-webcompat task, and copy the link to the public/build/webcompat.xpi artifact. Be careful with this link, as it is a real release-signed .xpi that any Firefox will just install. Do not publicly share this link.
  6. Start a regular release Firefox, with a new profile. Then open the Link to the artifact. Firefox will install it happily. Run the same tests again, just to make sure.

If you're satisfied with the testing results, proceed with

Getting the update on a Balrog staging channel, and final testing

Now, you need to involve Release Engineering.

  1. Find out which RelEng is on duty - you can check the subject of the releaseduty Matrix room.
  2. Ask them to add Balrog rules for the webcompat release on the staging channel. The staging channels have a -sysaddon suffix, so depending on if you're testing Release or Beta, the channel names would be release-sysaddon and beta-sysaddon respectively.

When they have staged the update, you can test the whole process.

  1. Post the testing instructions on Bugzilla. You can use this comment as a template. A few notes:
    • The value for extensions.systemAddon.update.url is the original value of that pref, except that the %CHANNEL% variable is replaced with whatever staging channel you're targetting.
    • The Browser Console command is not necessarily needed - but since the background update check happens in the background and only once per day, it's highly advisable to use it. It will trigger the exact same update step that the background task would do.

Be very careful with testing, this is your final chance to catch issues. This is also the stage where you should be involving QA, or any other internal users who might help validate the fix. Make sure that all testing steps and all testing results are documented in the Bugzilla bug.

Shipping it.

When all testing is completed and nothing looks concerning, you can finally press the big button - metaphorically speaking.

  1. Write a Bugzilla comment to explicitly document which channels and versions you want to target.
    • Balrog targets both channels and versions. So, when talking to Release Engineering, you need to be exact about which channels and versions you target. For example, if you want to target the current Release and the current Beta version, be sure to specify something like "we want to target release for 145.*, as well as beta and aurora for 146.*.
    • Firefox Developer Edition is technically Beta, but it's not using the beta channel. That is aurora, so make sure to include it if needed.
    • Firefox will happily downgrade (or rather, shadow) built-in versions. It's therefore never advisable to target Nightly in a train-hop. Also, if you, for example, shipped a train-hop to 145.0, and then uplift a bunch of new interventions into 145.0.2 a few weeks later, the train-hop update will override that. If you think this will become an issue, Release Engineers should be able to help you out by specifically targeting individual dot-versions as opposed to a whole major version.
  2. Make sure RelEng sees the comment - either by ni? them, or by sending them a message. Release Engineering will need to involve Release Management to get the necessary sign-offs.

When Release Engineering pushes the update live, you're done. Congratulations, you just made the web better for our users - and they won't even notice it.

Speeding up the rollout

We do not have a real mechanism to speed up the deployment. Clients check for addon updates once per day, and we don't have a way to tell clients "do it NOW". However, if time presses or you want to do accelerated testing of something, you can motivate individual Firefox installs do update immediately.

  • You can open the Browser Console/Browser Toolbox, and paste ChromeUtils.importESModule("resource://gre/modules/AddonManager.sys.mjs", { global: "shared" }).AddonManagerPrivate.backgroundUpdateCheck();.
  • Alternatively, you can open about:config and set app.update.lastUpdateTime.addon-background-update-timer to 0. That will not trigger an update right away, but it will speed it up a lot. Since this is a process that's easily available to users, it's fine to instruct them to do so if there is demand.

Observing the rollout

Telemetry data includes the version numbers of system-addons, so you can leverage that. You can fork this query (Mozilla-internal). Be sure to adjust:

  • Inside the base CTE
    • The submission_timestamp condition to be close to the beginning of the rollout to avoid querying unnecessary data
    • The mozfun.norm.truncate_version(application.version, 'major') condition to match the major version(s) you're targeting.
  • Inside the proxy CTE
    • The payload_info_addons condition to target the interventions addon version you're interested in.

The resulting graph is a percentage of client checkins that have the new version installed. The query is using the live telemetry data, so you're as close to real-time as it gets. Note that it is totally fine and expected that the line goes down sometimes. During certain times of the day, a lot of clients wake up for the first time, and they might do a telemetry checkin before they get the update.

You should usually see a 40-50% rollout after three hours or so. After 24 hours, the chart should be around 90%.