Bug 1867925 - Mark some storage-access-api tests as intermittent after wpt-sync....
[gecko.git] / docs / contributing / pocket-guide-shipping-firefox.rst
blob789205c750cba1eea3fa183c760b3196c7bd6733
1 Pocket Guide: Shipping Firefox
2 ==============================
4 *Estimated read time:* 15min
7 Introduction
8 ------------
10 The purpose of this document is to provide a high level understanding of
11 how Mozilla ships Firefox. With the intention of helping new Mozillians
12 (and those who would like a refresher) understand the basics of our
13 release process, tools, common terms, and mechanisms employed in
14 shipping Firefox to our users. Often this document will introduce a
15 concept, explain how it fits into the process, and then provide a link
16 to learn more if interested.
18 Repositories & Channels
19 -----------------------
21 Shipping Firefox follows a software release :ref:`train model <train model>`
22 along 3 primary code :ref:`repositories <repositories>`; mozilla-central
23 (aka “m-c”), mozilla-beta, and mozilla-release. Each of these repositories are
24 updated within a defined cadence and built into one of our Firefox
25 products which are released through what is commonly referred to as
26 :ref:`Channels <channels>`: Firefox Nightly, Firefox Beta, and Firefox Release.
28 `Firefox Nightly <https://whattrainisitnow.com/release/?version=nightly>`__ offers access to the latest cutting edge features
29 still under active development. Released every 12 hours with all the
30 changes that have :ref:`landed <landing>` on mozilla-central for Desktop and on
31 `main in firefox-android <https://github.com/mozilla-mobile/firefox-android/tree/main>`__ for Android.
33 Every `4 weeks <https://whattrainisitnow.com/calendar/>`__, we
34 :ref:`merge <merge>` the code from mozilla-central to our
35 mozilla-beta branch.
36 For Android, we branch from main on firefox-android to a release branch.
37 New code or features can be added to mozilla-beta
38 outside of this 4 week cadence but will be required to land in
39 mozilla-central and then be :ref:`uplifted <uplift>` into
40 mozilla-beta.
41 Similarly for Android, uplifts are required to land in main on firefox-android before
42 backporting to the firefox-android release branch.
44 `Firefox Beta <https://whattrainisitnow.com/release/?version=beta>`__ is for developers and early adopters who want to see
45 and test what’s coming next in Firefox. We release a new Desktop/Android Beta version
46 three times a week.
48 .. note::
50   The first and second beta builds of a new cycle are shipped to a
51   subset of our Beta population. The full Beta population gets updated
52   starting with Beta 3 only.*
54 Each Beta cycle lasts a total of 4 weeks where a final build is
55 validated by our QA and tagged for release into the mozilla-release
56 branch for Desktop. On Android we release from the same release branch
57 used during the Beta cycle.
59 .. note::
61   **Firefox Developer Edition** *is a separate product based on
62   the mozilla-beta repo and is specifically tailored for Web Developers.*
64 `Firefox Release <https://whattrainisitnow.com/release/?version=release>`__ is released every 4 weeks and is the end result
65 of our Beta cycle. This is our primary product shipping to hundreds of
66 millions of users. While a release is live, interim updates (dot releases)
67 are used to ship important bug fixes to users prior to the next major release.
68 These can happen on an as-needed basis when there is an important-enough
69 :ref:`driver <dot release drivers>` to do so (such as a critical bug severely
70 impairing the usability of the product for some users). In order to provide
71 better predictability, there is also a planned dot release scheduled for two
72 weeks after the initial go-live for less-critical fixes and other
73 :ref:`ride-along fixes <ride alongs>` deemed low-risk enough to include.
75 .. note::
76   `Firefox ESR (Extended Support Release) <https://whattrainisitnow.com/release/?version=esr>`__ *is a separate
77   product intended for Enterprise use. Major updates are rolled out once
78   per year to maintain stability and predictability. ESR also
79   contains a number of policy options not available in the standard
80   Firefox Release. Minor updates are shipped in sync with the Firefox
81   Release schedule for security and select quality fixes only.*
83 Further Reading/Useful links:
85 -  `Firefox
86    Trains <https://whattrainisitnow.com/>`__
87 -  `Release
88    Calendar <https://whattrainisitnow.com/calendar/>`__
89 -  `Firefox Release
90    Process <https://wiki.mozilla.org/Release_Management/Release_Process>`__
91 -  `Firefox Delivery
92    dashboard <https://mozilla.github.io/delivery-dashboard/>`__
94 Landing Code and Shipping Features
95 ----------------------------------
97 Mozillians (those employed by MoCo and the broader community) land lots
98 of code in the Mozilla repositories: fixes, enhancements, compatibility,
99 new features, etc. and is managed by :ref:`Mercurial <Mercurial Overview>` (aka
100 hg). All new code is tracked in :ref:`Bugzilla <bugzilla>`, reviewed
101 in :ref:`Phabricator <Phabricator>`, and then checked into the
102 mozilla-central repository using :ref:`Lando <Lando>`.
104 .. note::
106   Some teams use :ref:`GitHub <github>` during development
107   but will still be required to use Phabricator (tracked in Bugzilla) to
108   check their code into the mozilla-central hg repository.
110 The standard process for code to be delivered to our users is by ‘riding
111 the trains’, meaning that it’s landed in mozilla-central where it waits
112 for the next Beta cycle to begin. After merging to Beta the code will
113 stabilize over a 4 week period (along with everything else that merged
114 from mozilla-central). At the end of the beta cycle a release candidate
115 (:ref:`RC <rc>`) build will be generated, tested thoroughly, and
116 eventually become the next version of Firefox.
118 Further Reading/Useful links:
120 -  `Phabricator and why we use it <https://wiki.mozilla.org/Phabricator>`__
121 -  `Firefox Release Notes Process <https://wiki.mozilla.org/Release_Management/Release_Notes>`__
122 -  `Firefox Release Notes Nomination <https://wiki.mozilla.org/Release_Management/Release_Notes_Nomination>`__
124 An exception to this process...
125 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
127 Not all code can simply wait for the normal train model to be included
128 in a Firefox build. There are a variety of reasons for this; critical
129 fixes, security concerns, stabilizing a feature that’s already in Beta,
130 shipping high priority features faster, and so on.
132 In these situations an uplift can be requested to take a recent landing
133 in mozilla-central and merge specific bits to another repository outside
134 the standard train model. After the request is made within Bugzilla,
135 :ref:`Release Management <release management>` will assess the potential risk
136 and will make a decision on whether it’s accepted.
138 Further Reading/Useful links:
140 -  `Patch uplifting
141    rules <https://wiki.mozilla.org/Release_Management/Uplift_rules>`__
142 -  `Requesting an
143    uplift <https://wiki.mozilla.org/Release_Management/Requesting_an_Uplift>`__
145 Ensuring build stability
146 ~~~~~~~~~~~~~~~~~~~~~~~~
148 Throughout the process of landing code in mozilla-central to riding the
149 trains to Firefox Release, there are many milestones and quality
150 checkpoints from a variety of teams. This process is designed to ensure
151 a quality and compelling product will be consistently delivered to our
152 users with each new version. See below for a distilled list of those
153 milestones.
155 =========================================== ================ ================= ===============================================================================
156 Milestone                                   Week             Day of Week
157 ------------------------------------------- ---------------- ----------------- -------------------------------------------------------------------------------
158 Merge Day                                   Nightly W1       Monday            Day 1 of the new Nightly Cycle
159 PI Request deadline                         Nightly W1       Friday            Manual QA request deadline for high risk features
160 Feature technical documentation due         Nightly W2       Friday            Deadline for features requiring manual QA
161 Beta release notes draft                    Nightly W4       Wednesday
162 Nightly features Go/No-Go decisions         Nightly W4       Wednesday
163 Feature Complete Milestone                  Nightly W4       Wednesday         Last day to land risky patches and/or enable new features
164 Nightly soft code freeze start              Nightly W4       Thursday          Stabilization period in preparation to merge to Beta
165 QA Test Plan approval due                   Nightly W4       Friday            Last day to provide QA with feature Test Plan sign-offs
166 String freeze                               Nightly W4       Friday            Modification or deletion of strings exposed to the end-users is not allowed
167 QA pre-merge regression testing completed   Nightly W4       Friday
168 Merge Day                                   Beta W1          Monday            Day 1 of the new Beta cycle
169 Pre-release sign off                        Beta W3          Friday            Final round of QA testing prior to Release
170 Firefox RC week                             Beta W4          Monday            Validating Release Candidate builds in preparation for the next Firefox Release
171 Release Notes ready                         Beta W4          Tuesday
172 What’s new page ready                       Beta W4          Wednesday
173 Firefox go-live @ 6am PT                    Release W1       Tuesday           Day 1 of the new Firefox Release to 25% of Release users
174 Firefox Release bump to 100%                Release W1       Thursday          Increase deployment of new Firefox Release to 100% of Release users
175 Scheduled dot release approval requests due Release W2       Friday            All requests required by EOD
176 Scheduled dot release go-live               Release W3       Tuesday           By default, ships when ready. Specific time available upon request.
177 =========================================== ================ ================= ===============================================================================
180 The Release Management team (aka “Relman”) monitors and enforces this
181 process to protect the stability of Firefox. Each member of Relman
182 rotates through end-to-end ownership of a given :ref:`release
183 cycle <release cycle>`. The Relman owner of a cycle will focus on the
184 overall release, blocker bugs, risks, backout rates, stability/crash
185 reports, etc. Go here for a complete overview of the `Relman Release
186 Process
187 Checklist <https://wiki.mozilla.org/Release_Management/Release_Process_Checklist_Documentation>`__.
189 .. note::
191   While Relman will continually monitor the overall health of each
192   Release it is the responsibility of the engineering organization to
193   ensure the code they are landing is of high quality and the potential
194   risks are understood. Every Release has an assigned :ref:`Regression
195   Engineering Owner <reo>` (REO) to ensure a decision is made
196   about each regression reported in the release.*
198 Further Reading/Useful links:
200 -  `Release Tracking
201    Rules <https://wiki.mozilla.org/Release_Management/Tracking_rules>`__
202 -  `Release
203    Owners <https://wiki.mozilla.org/Release_Management/Release_owners>`__
204 -  `Regression Engineering
205    Owners <https://wiki.mozilla.org/Platform#Regression_Engineering_Owner_.28REO.29>`__
206 -  `Commonly used Bugzilla queries for all
207    Channels <https://trainqueries.herokuapp.com/>`__
209 Enabling/Disabling code (Prefs)
210 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
212 Within Firefox we allow the ability to Enable/Disable bits of code or
213 entire features using `Preferences <preferences>`. There are many
214 reasons why this is useful. Here are some examples:
216 -  Continual development over multiple release cycles without exposing
217    partially completed features to our users
218 -  Provide the ability to quickly disable a feature if there is a
219    problem found during the release process
220 -  Control features which are experimental or not ready to be shown to a
221    specific channel population (e.g. enabled for Beta but disabled for
222    Release)
223 -  A/B testing via :ref:`telemetry <telemetry>` experiments
225 .. note::
227   :ref:`Normandy <normandy>` Pref Rollout is a feature that
228   allows Mozilla to change the state of a preference for a targeted set of
229   users, without deploying an update to Firefox. This is especially useful
230   when conducting experiments or a gradual rollout of high risk features
231   to our Release population.
233 Further Reading/Useful links:
235 -  `Brief guide to Mozilla
236    preferences <https://developer.mozilla.org/en-US/docs/Mozilla/Preferences/A_brief_guide_to_Mozilla_preferences>`__
237 -  `Normandy Pref
238    rollout <https://wiki.mozilla.org/Firefox/Normandy/PreferenceRollout>`__
240 Release & Feature QA
241 ~~~~~~~~~~~~~~~~~~~~
243 Release QA is performed regularly and throughout the Release Cycle.
244 Organized in two-week sprints its primary goals are:
246 -  Qualifying builds for release
247 -  Feature testing
248 -  Product Integrity requests
249 -  Bug work
250 -  Community engagement
252 Features that can have significant impact and/or pose risk to the code
253 base should be nominated for QA support by the :ref:`feature
254 owner <feature owner>` in its intended release. This process is kicked
255 off by filing a :ref:`Product Integrity <product integrity>` team request
256 :ref:`PI request <pi request>`. These are due by the end of week 2
257 of the Nightly cycle.
259 .. note::
261   Manual QA testing is only required for features as they go
262   through the Beta cycle. Nightly Feature testing is always optional.
264 Further Reading/Useful links:
266 -  `QA Feature
267    Testing <https://wiki.mozilla.org/QA/Feature_Testing_v2>`__
268 -  `Release QA
269    overview <https://docs.google.com/document/d/1ic_3TO9-kNmZr11h1ZpyQbSlgiXzVewr3kSAP5ML4mQ/edit#heading=h.pvvuwlkkvtc4>`__
270 -  `PI Request template and
271    overview <https://mana.mozilla.org/wiki/pages/viewpage.action?spaceKey=PI&title=PI+Request>`__
273 Experiments
274 ~~~~~~~~~~~
276 As we deliver new features to our users we continually ask ourselves
277 about the potential impacts, both positive and negative. In many new
278 features we will run an experiment to gather data around these impacts.
279 A simple definition of an experiment is a way to measure how a change to
280 our product affects how people use it.
282 An experiment has three parts:
284 1. A new feature that can be selectively enabled
285 2. A group of users to test the new feature
286 3. Telemetry to measure how people interact with the new feature
288 Experiments are managed by an in-house tool called
289 `Experimenter <https://experimenter.services.mozilla.com/>`__.
291 Further Reading/Useful links:
293 -  `More about experiments and
294    Experimenter <https://github.com/mozilla/experimenter>`__
295 -  `Requesting a new
296    Experiment <https://experimenter.services.mozilla.com/experiments/new/>`__
297    (Follow the ‘help’ links to learn more)
298 -  `Telemetry <https://wiki.mozilla.org/Telemetry>`__
300 Definitions
301 -----------
303 .. _approval flag:
305 **Approval Flag** - A flag that represents a security approval or uplift
306 request on a patch.
308 .. _bugzilla:
310 **Bugzilla** - Web-based general purpose bug tracking system and testing
311 tool.
313 .. _channel:
315 **Channel** - Development channels producing concurrent releases of
316 Firefox for Windows, Mac, Linux, and Android.
318 .. _chemspill:
320 **Chemspill** - Short for Chemical Spill. A chemspill is a rapid
321 security-driven or critical stsbility dot release of our product.
323 .. _channel meeting:
325 **Channel Meeting** - A twice weekly time to check in on the status
326 of the active releases with the release team.
328 .. _dot release drivers:
330 **Dot Release Drivers** - Issues/Fixes that are significant enough to
331 warrant a minor dot release to the Firefox Release Channel. Usually to
332 fix a stability (top-crash) or Security (Chemspill) issue.
334 .. _early beta:
336 **Early Beta** - Beta releases with the features gated by EARLY_BETA_OR_EARLIER
337 enabled. The first 2 weeks of Beta releases during the cycle are early beta releases.
339 .. _feature owner:
341 **Feature Owner** - The person who is ultimately responsible for
342 developing a high quality feature. This is typically an Engineering
343 Manager or Product Manager.
345 .. _fenix:
347 **Fenix** - Also known as Firefox Preview is an all-new browser for
348 Android based on GeckoView and Android Components
350 .. _github:
352 **Github** - Web-based version control and collaboration platform for
353 software developers
355 .. _gtb:
357 **GTB** - Acronym for Go to build.  Mostly used in the release schedule
358 communication ("Go to build on March 18"), this means that we initiate the
359 building of a specific release.
361 .. _landing:
363 **Landing** - A general term used for when code is merged into a
364 particular source code repository
366 .. _lando:
368 **Lando** - Automated code lander for Mozilla. It is integrated with
369 our `Phabricator instance <https://phabricator.services.mozilla.com>`__
370 and can be used to land revisions to various repositories.
372 .. _mercurial:
374 **Mercurial** - A source-code management tool (just like git)
375 which allows users to keep track of changes to the source code
376 locally and share their changes with others. It is also called hg.
378 .. _merge:
380 **Merge** - General term used to describe the process of integrating and
381 reconciling file changes within the mozilla repositories
383 .. _nightly soft code freeze:
385 **Nightly Soft Code Freeze** - Last week of the nightly cycle on mozilla-central
386 just before the merge to beta during which landing risky or experimental code
387 in the repository is discouraged.
389 .. _normandy:
391 **Normandy** - Normandy is a collection of servers, workflows, and
392 Firefox components that enables Mozilla to remotely control Firefox
393 clients in the wild based on precise criteria
395 .. _nucleus:
397 **Nucleus** - Name of the internal application used by release managers
398 to prepare and publish release notes. The data in this application is
399 fetched by mozilla.org.
401 .. _orange_factor:
403 **Orange** - Also called flaky or intermittent tests. Describes a state
404 when a test or a testsuite can intermittently fail.
406 .. _phabricator:
408 **Phabricator** - Mozilla’s instance of the web-based software
409 development collaboration tool suite. Read more about `Phabricator as a
410 product <https://phacility.com/phabricator/>`__.
412 .. _pi request:
414 **PI Request** - Short for Product Integrity Request is a form
415 submission request that’s used to engage the PI team for a variety of
416 services. Most commonly used to request Feature QA it can also be used
417 for Security, Fuzzing, Performance, and many other services.
419 .. _preferences:
421 **Preferences** - A preference is any value or defined behavior that can
422 be set (e.g. enabled or disabled). Preference changes via user interface
423 usually take effect immediately. The values are saved to the user’s
424 Firefox profile on disk (in prefs.js).
426 .. _rc:
428 **Release Candidate** - Beta version with potential to be a final
429 product, which is ready to release unless significant bugs emerge.
431 .. _rc week:
433 **RC Week** - The week prior to release go-live is known as RC week.
434 During this week an RC is produced and tested.
436 .. _release cycle:
438 **Release Cycle** - The sum of stages of development and maturity for
439 the Firefox Release Product.
441 .. _reo:
443 **Regression Engineering Owner** - A partner for release management
444 assigned to each release. They both keep a mental state of how we are
445 doing and ensure a decision is made about each regression reported in
446 the release. AKA *REO*.
448 .. _release engineering:
450 **Release engineering** - Team primarily responsible for maintaining
451 the build pipeline, the signature mechanisms, the update servers, etc. aka *releng*
453 .. _release management:
455 **Release Management** - Team primarily responsible for the process of
456 managing, planning, scheduling and controlling a software build through
457 different stages and environments. aka *relman*.
459 .. _relnotes:
461 **Relnotes** - Short for release notes. Firefox Nightly, Beta, and Release each ship
462 with release notes.
464 .. _Repository:
466 **Repository** - a collection of stored data from existing databases
467 merged into one so that it may be shared, analyzed or updated throughout
468 an organization.
470 .. _ride alongs:
472 **Ride Alongs** - Bug fixes that are impacting release users but not
473 considered severe enough to ship without an identified dot release
474 driver.
476 .. _rollout:
478 **Rollout** - Shipping a release to a percentage of the release population.
480 .. _status flags:
482 **Status Flags** - A flag that represents the status of the bug with
483 respect to a Firefox release.
485 .. _string freeze:
487 **String Freeze** - Period during which the introduction, modification, or
488 deletion of strings exposed to the end-users is not allowed so as to allow our
489 localizers to translate our product.
491 .. _taskcluster:
493 **taskcluster** - Our execution framework to build, run tests on multiple
494 operating system, hardware and cloud providers.
496 .. _telemetry:
498 **Telemetry** - Firefox measures and collects non-personal information,
499 such as performance, hardware, usage and customizations. This
500 information is used by Mozilla to improve Firefox.
502 .. _train model:
504 **Train model** - a form of software release schedule in which a number
505 of distinct series of versioned software releases are released as a
506 number of different "trains" on a regular schedule.
508 .. _tracking flags:
510 **Tracking Flags** - A Bugzilla flag that shows whether a bug is being investigated
511 for possible resolution in a Firefox release. Bugs marked tracking-Firefox XX are
512 bugs that must be resolved one way or another before a particular release ship.
514 .. _throttle unthrottle:
516 **Throttle/Unthrottle a rollout** - Throttle is restricting a release rollout to 0%
517 of the release population, users can still choose to update but are not updated
518 automatically. Unthrottle is removing the release rollout restriction.
520 .. _uplift:
522 **Uplift** - the action of taking parts from a newer version of a
523 software system (mozilla-central or mozilla-beta) and porting them to an
524 older version of the same software (mozilla-beta, mozilla-release or ESR)