ReleaseEngineering: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(→‎Documentation: add link, fix link)
 
(187 intermediate revisions by 31 users not shown)
Line 1: Line 1:
= For Developers =
<div style="float: left;">__TOC__</div>
* [http://bit.ly/cqaNWF File a new ReleaseEngineering bug]
<div style="float: right; width: 60%;">
<div class="firstHeading toc" style="border: thin black solid; text-size: 80%; width: 50%;">
<h2>Quick Links For You</h2>
* [https://treeherder.mozilla.org/ Treeherder]
* [https://bugzilla.mozilla.org/enter_bug.cgi?product=Release%20Engineering&component=Other File a new RelEng bug]
</div>
<br clear="all" />
<div class="firstHeading toc" style="border: thin black solid; text-size: 80%; width: 50%;">
<h2>Quick Links For Us</h2>
* [[ReleaseEngineering/How To|How Tos]]
* [https://tools.taskcluster.net/ Taskcluster Tools]
* [https://mozilla-releng.net/ Releng Services]
* [https://ship-it.mozilla.org/ Ship It]
* [https://aus4-admin.mozilla.org/ Balrog]
</div>
</div>


= Day to day =
<br clear="all"/>
* [[ReleaseEngineering/Sheriffing | Build duty]]
** [[ReleaseEngineering:RelEngITSharedDowntime | RelEng+IT shared downtime]]
** [[ReleaseEngineering:Sheriffing:HowTo | HowTo]]
* [[ReleaseEngineering:Machine Bookings | Machine Bookings]]
* [[DisposableProjectBranches | Disposable Project Branch Bookings]]
* [[ReleaseEngineering/Bugzilla/Triage | Bug Triage]]
* [[ReleaseEngineering:Maintenance | Recent changes to buildbot masters]]
* [[ReleaseEngineering:ResetTryServer | Resetting the Try Server hg repo]]


= Documentation =
= About Us =
* Buildbot
We ship Firefox to the world!
** [[ReleaseEngineering/Buildbot Best Practices|Buildbot Best Practices]]
 
** [[ReleaseEngineering/Upgrading Buildbot|Upgrading Buildbot]]
Release Engineering does this by:
* [[ReleaseEngineering:TestingTechniques|Methods for testing your changes]]
 
* [[ReleaseEngineering:StagingMaster|How to work on staging master]]
* Developing world-class, scalable, open, secure, and maintainable infrastructure for application builds and tests, on a diverse set of desktop and mobile platforms
* [[Release:Release_Automation_on_Mercurial:Documentation|Release Automation on Mercurial]]
* Building fast and reliable pipelines to transform source code into shipped products
** [https://intranet.mozilla.org/Build:Release:Primer Release Primer]
 
*** [https://intranet.mozilla.org/User:Armenzg@mozilla.com:Release:Primer:Hg Release Primer DRAFT CVS and HG combined]
= Contacting Release Engineering =
Our team is located on 3 continents and in 5 time zones. This allows us to provide better service, especially if you contact us using one of the following methods:
* To request a new service, please [https://bugzilla.mozilla.org/enter_bug.cgi?product=Release%20Engineering file a bug]
* To ask a general question, ping in #firefox-ci on Matrix, or email release@mozilla.com
* To request status on an existing request, set the "needinfo" flag in the bug.
Our team works normal business hours for our respective time zones. If you need to escalate an issue that is both '''urgent''' ''and'' '''important''', use the following methods:
# Use #firefox-ci on Matrix or email release@mmozilla.com, starting your message with 'URGENT:'. If no response in 15 minutes, then
# Be sure the bug severity is set to "<tt>blocker</tt>"
# Call one or more of the following people (nagios page preferred if you have access):
#* [https://phonebook.mozilla.org/#search/catlee Chris AtLee] Eastern Time
#* [https://phonebook.mozilla.org/#search/jlund Jordan Lund] Pacific Time
If you get voice mail, please leave your callback number.
 
= Contributing =
If you are interested in getting involved with Release Engineering, please see our [[ReleaseEngineering/Contribute|contributing page]]! We'd love to hear from you.
 
= Team =
 
Mozilla's Release Engineering:
* twitter: [https://twitter.com/MozRelEng @MozRelEng]
* blogs: [http://planet.mozilla.org/releng Planet Release Engineering]
* calendar: [https://www.google.com/calendar/embed?src=mozilla.com_2d32343333353036312d393737%40resource.calendar.google.com&ctz=America/Los_Angeles Google Calendar]
* mailing list: [https://groups.google.com/forum/#!forum/mozilla.release.engineering release-engineering@lists.mozilla.org]
 
{| border=1
| '''Name'''
| '''Profile'''
| '''Twitter'''
| '''Blog'''
|-
| Ben Hearsum
| [https://mozillians.org/u/bhearsum bhearsum]
| [https://twitter.com/bhearsum @bhearsum]
| [http://hearsum.ca/blog Ben's blog]
|-
| Aki Sasaki
| [https://mozillians.org/en-US/u/aki/ aki]
| [https://twitter.com/escapewindow @escapewindow]
| [http://escapewindow.dreamwidth.org/ escapewindow]
|-
| Mihai Tabara
| [https://mozillians.org/en-US/u/mtabara/ mtabara]
| [https://twitter.com/mihaitabara @mihaitabara]
| [https://mihaitabara.github.io/ Mihai Tabara's blog]
|}
 
== Interns ==
* [[ReleaseEngineering/Interns|Interns]]
 
= Releng Offerings =
 
As mentioned above, Releng offer pipelines to transform source code into shipped products. The following sections break down how that happens. Each section can be understood as both isolated and combined parts.
 
== Initiating a Release ==
 
To start a release, [[Release Management]] submit a form in [[ReleaseEngineering/Applications/Ship It|Ship It]] with what product they would like to release, what revision to use, and a number of other inputs.
 
== Configuring & Scheduling ==
 
[[ReleaseEngineering/Applications/Ship It|Ship It]] then creates [https://docs.taskcluster.net/manual/tasks Taskcluster tasks] that are needed to take a builds and release them to users. These tasks make up the release graph that are derived from templates within [https://firefox-source-docs.mozilla.org/taskcluster/taskcluster/index.html taskgraph] and are submitted via [https://firefox-source-docs.mozilla.org/taskcluster/taskcluster/actions.html action tasks].
 
== Signing ==
 
The signing of build artifacts and binaries. Some features of this:
 
* signing is done through a client/server model
* integrated with Taskcluster thanks to [https://github.com/mozilla-releng/signingscript signingscript] in conjunction with [https://github.com/mozilla-releng/scriptworker scriptworker], a securely managed [https://docs.taskcluster.net/manual/tasks/workertypes Taskcluster worker type]. signingscript tasks are part of the task graph that is generated from [[ReleaseEngineering/Applications/Ship It|Ship It]]
* keys are generated with modern standards
* keys are secured by our infra and rotated regularly
* coming soon: self served signing through exposed API
 
== Uploading ==
 
As important release artifacts are created, they are then uploaded to [https://archive.mozilla.org/ archive.m.o] where they can served from and live permanently for historical or longstanding support reasons.
 
Like signing, uploading is integrated with Taskcluster thanks to [https://github.com/mozilla-releng/beetmoverscript beetmoverscript] in conjunction with [https://github.com/mozilla-releng/scriptworker scriptworker], a securely managed [https://docs.taskcluster.net/manual/tasks/workertypes Taskcluster worker type]. signingscript tasks are part of the task graph that is generated from [[ReleaseEngineering/Applications/Ship It|Ship It]]
 
== Install & Update Tests ==
 
Like product tests, releases likewise need tests. This ensures that initial downloads install correctly on all supported platforms and updates work as expected, all before actually releasing. Right now this is done through our Update and Final Verify tests. Which, like all other sections are part of the release graph.
 
TODO: link to documentation and source of these
 
== Shipping & Updates ==
 
Finally, we release the product via both initial downloads and as new updates.
 
For Desktop Firefox:
* Initial installs are served via updating the download page, mozilla.com ([[Mozilla.com/Bedrock|Bedrock]]) and updating [[Bouncer]], Mozilla's mirroring and redirection server.
* Updates are handled by our own application, [http://mozilla-balrog.readthedocs.io/en/latest/index.html Balrog]. Balrog is our server side component of the update system
** this is integrated with Taskcluster thanks to [https://github.com/mozilla-releng/balrogscript balrogscript] in conjunction with [https://github.com/mozilla-releng/scriptworker scriptworker], a securely managed [https://docs.taskcluster.net/manual/tasks/workertypes Taskcluster worker type]. balrogscript tasks are part of the task graph that is generated from [[ReleaseEngineering/Applications/Ship It|Ship It]]
 
For Android Products, including Firefox:
* releases are submitted to the Play Store
** this is integrated with Taskcluster thanks to [https://github.com/mozilla-releng/pushapkscript pushapkscript] in conjunction with [https://github.com/mozilla-releng/scriptworker scriptworker], a securely managed [https://docs.taskcluster.net/manual/tasks/workertypes Taskcluster worker type]. pushapkscript tasks are part of the task graph that is generated from [[ReleaseEngineering/Applications/Ship It|Ship It]]
 
= Development =
 
== Best Practices ==
* [[ReleaseEngineering/Python Standards|Python Standards]] - Our Python coding standards
* [[ReleaseEngineering/Development Best Practices|Development Best Practices]] - read this when you're starting something new
* [[ReleaseEngineering/Deployment|Deployment]] - How we deploy our tools, and how do we update them.
* [[ReleaseEngineering/Wiki Guidelines|Wiki Guidelines]] - how to wiki garden for fun and profit
 
== Bugzilla ==
* [[ReleaseEngineering/Bugzilla/Flags|Flags]]
* [[ReleaseEngineering/Bugzilla/Whiteboard|Whiteboard]]
* [[ReleaseEngineering/Bugzilla/Triage|Triage]]
 
 
= Operations =
 
Release Engineering has historically been involved with the Build and Release pipeline of a product. As part of that, we have some responsibility to help ensure that the build (continuous integration) and release (deployment) pipeline infrastructure is in good running health. We have two functional groups that monitor and respond to any operational issues that come up.
 
== Buildduty ==
 
Buildduty provides support for Firefox's build and test infrastructure
 
The role of Buildduty has grown beyond Release Engineering's scope. There is a dedicated team of 6 people, providing 24/7 support of Mozilla's build and test infrastructure.
 
See the [[Buildduty|Buildduty home page]] and [[Buildduty/manifesto|manifesto]] for more information.
 
== CI Duty ==
 
CI Duty provides support for Firefox's release infrastructure and is currently handled by Releng
 
See the [[CIDuty]] for more information.
 
= Releng Applications =
* [[ReleaseEngineering/Applications|Applications]] - Various applications and services that RelEng provides
* TODO update application list with: Services, Scriptworker, ChainOfTrust
 
= Mozilla Applications =
 
* [[Taskcluster]] - our task execution tool for providing continuous integration and release pipelines
* [[EngineeringProductivity/Projects/Treeherder|Treeherder]] - aggregates all the build, test, and release tasks as a reporting dashboard
* [[ReleaseEngineering/PuppetAgain|PuppetAgain]] - Release Operations tool and puppet configs for configurating build and release machines. Both for workers and hosting applications
* TODO - add Release Operations replacement for Slaveapi: Controller
 
= External Third Party Dependencies =
 
* AWS
* Heroku
* Papertrail
* Nagios
* Sentry
 
= Deprecated =
 
below pages should be deleted or be given a "warning" outdated box where appropriate.
 
== VCS Sync ==
* [[ReleaseEngineering/VCSSync/HowTo|HowTo]]
* [[ReleaseEngineering/VCSSync/History|History]]
 
== Releases ==
* [[Releases/RelEngChecklist | Release Checklist]] and [[Releases/BuildNotesIndex | Build Notes]]
* [[:Category:Releases:Post_Mortem_Meetings | Releng Post Mortem Meetings]]
* [[ReleaseEngineering/Releaseduty | What is releaseduty?]]
* [https://github.com/mozilla/releasewarrior Release Promotion]
* [[UpdateGeneration|Update Generation]]
* [[UpdateGeneration|Update Generation]]
** for releases
** [[ReleaseEngineering/PatcherTags|Patcher tags for release updates]]
** for nightlies
 
** partial vs. full
== Platform Support ==
* [[ReferencePlatforms|Reference Platforms]]
* [[ReleaseEngineering/Applications#slavealloc|Slave Allocator]]
* [[ReleaseEngineering/Official Platform Support Checklist|Official Platform Support Checklist]]
* [[ReleaseEngineering/Official Platform Support Checklist|Official Platform Support Checklist]]
== Tryserver ==
* [[ReleaseEngineering/TryserverAsBranch|Tryserver As Branch]]
* [[ReleaseEngineering/TryserverAsBranch|Tryserver As Branch]]
* [[ReleaseEngineering/TryServer | TryServer]]
* [[ReleaseEngineering/TryServer | TryServer]]
* [[ReleaseEngineering/TryChooser | TryChooser]]
* [[ReleaseEngineering/TryChooser | TryChooser]]
* [[ReleaseEngineering:GraphServer | Graph Server Notes]]
* [[ReleaseEngineering:Puppet | Puppet ]]
* [[Tinderbox_Push_Log | TBPL]] - Tinderbox Push Log
* Bugzilla
** [[ReleaseEngineering/Bugzilla/Flags|Flags]]
** [[ReleaseEngineering/Bugzilla/Whiteboard|Whiteboard]]
** [[ReleaseEngineering/Bugzilla/Triage|Triage]]


= Planning =
== Testing ==
* [[ReleaseEngineering:ProjectBranchPlanning|Project Branch Planning]]
* [[ReleaseEngineering:IntermittentErrors | Intermittent Errors]]
* [[ReleaseEngineering:BloggingBlitz | Blogging blitz]]
* [[ReleaseEngineering/How To/Request a loaner | Requesting a loaner]]
* [[ReleaseEngineering:PyCon2010 | PyCon 2010]]
* [[ReleaseEngineering/Testing a new Signing Server | Testing a new Signing Server]]
* [[ReleaseEngineering/TryServerSuggestions | Try Server Suggestions]]
* [[ReleaseEngineering:TestingTechniques | Testing your changes]]
* [[Build:Configure System Rewrite|Configure System Rewrite]]
 
* [[Build:TeamRadar|Build Team Monthly Radar]]
= Subpages =
* [[Build:StageMigrationNotes|Stage Migration Notes]]
* [[ReleaseEngineering/Presentations|Presentations]]
* [[Version Control System]]
* [[ReleaseEngineering/How Tos|How Tos]]
* [[Build:Release Automation|Release Automation]]
* [http://moz-releng-docs.readthedocs.org/en/latest/ Releng Docs] '''''outdated'''''
* [[Special:PrefixIndex/{{FULLPAGENAME}}/]] - all subpages of [[{{FULLPAGENAME}}]] in the wiki
* [[ReleaseEngineering/Obsolete Pages]]
* [[ReleaseEngineering/Day_1_Checklist|day 1 checklist]]
* [[ReleaseEngineering/Day_-1_Checklist|day -1 checklist]]
 
= Run the tasks to staging pools (OSX/Linux) =
* Clone mozilla-central to local machine: hg clone ssh://hg.mozilla.org/mozilla-central
* Add the following changes to taskcluster/taskgraph/transforms/task.py file:
<pre>
diff --git a/taskcluster/taskgraph/transforms/task.py b/taskcluster/taskgraph/transforms/task.py
--- a/taskcluster/taskgraph/transforms/task.py
+++ b/taskcluster/taskgraph/transforms/task.py
@@ -1717,16 +1717,48 @@ def add_index_routes(config, tasks):
        index_type = index.get('type', 'generic')
        task = index_builders[index_type](config, task)


= Policy =
        del task['index']
* [[Build:ReleasePolicy|Build Team Release Policy]]
        yield task
* [[Outage Policy]]
* [[ReleaseEngineering:StageCleanupPolicy | Stage Cleanup Policy]]


= Obsolete =
* [[ReleaseEngineering:PlacesBranchTimeline|Places Branch Timeline]]
* [[ReleaseEngineering/New_Platforms| New platforms]]
* [[ReleaseEngineering:L10nMeetings | Joint meetings between the releng and l10n teams]]


= Meta =
@transforms.add
* [[ReleaseEngineering/Wiki Guidelines|Wiki Guidelines]] - how to wiki garden for fun and profit
+def set_worker_type(config, tasks):
+    for task in tasks:
+        level = str(config.params['level'])
+
+        provisioner_id, worker_type = get_worker_type(
+            config.graph_config,
+            task['worker-type'],
+            level,
+        )
+        task['worker-type'] = '/'.join([provisioner_id, worker_type])
+        yield task
+
+
+@transforms.add
+def use_beta_workertypes(config, tasks):
+    """
+    This transform uses a dictionary of worker type names to worker type names
+    in order to map one set of worker types to another set. This is typically
+    useful when you want to run a try push against a staging set of worker
+    types, that you want to test before rolling them out to production.
+    """
+    find_replace_dict = {
+        "releng-hardware/gecko-t-osx-1014":      "releng-hardware/gecko-t-osx-1014-staging",
+        "releng-hardware/gecko-t-linux-talos":  "releng-hardware/gecko-t-linux-talos-b"
+    }
+    for task in tasks:
+        if task['worker-type'] in find_replace_dict:
+            task['worker-type'] = find_replace_dict[task['worker-type']]
+        yield task
+
+
+@transforms.add
def build_task(config, tasks):
    for task in tasks:
        level = str(config.params['level'])
 
        provisioner_id, worker_type = get_worker_type(
            config.graph_config,
            task['worker-type'],
            level,
</pre>
 
* Commit the changes using the following commit message: hg commit -m "<commit_message>; try: -b do -p macosx64 -u all -t none". The <commit_message> will be a message that will describe your action, like: Run all tests on OSX staging workers.
** To run different tests or on a different platform, use https://mozilla-releng.net/trychooser/
** Do _not_ run unnecessay tests or you may end up on the [https://catlee.github.io/highscores/highscores.html hiscore board].
 
* Push the changes into try repository: hg push -f -r . ssh://hg.mozilla.org/try
 
* You will receive an email like this:
<pre>
Thank you for your try submission. It's the best!
 
Results will be displayed on Treeherder as they come in:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=6657878a04024803ce0aae0601627810b2d8d95e
 
It looks like this submission has talos jobs. You can compare the performance of your push against a baseline revision here:
https://treeherder.mozilla.org/perf.html#/comparechooser?newProject=try&newRevision=6657878a04024803ce0aae0601627810b2d8d95e
 
Once completed, all build and log artifacts will be available through the Treeherder URL above.


= Tinderbox / BuildBot =
All Taskcluster based artifacts can also be found in the Taskcluster Artifact Index:
e.g.  https://tools.taskcluster.net/index/artifacts/gecko.v2.try.revision.6657878a04024803ce0aae0601627810b2d8d95e


* [[Build:Farm|Mozilla.org Build Farm Roster]]
Summary: Test linux generic-worker; try: -b do -p linux64 -u none -t chromez-e10s
* [[ReferencePlatforms|Reference Platform Installation Instructions]]
</pre>
* [[Build:OutageReports|Outage Reports]]
* [[Build:Tinderbox Setup|Tinderbox Setup]]
* [[Build:ClobberingATinderbox|Clobbering Your Own Tinderbox or Unit Test Builds]]
* [[Build:TryServer| "Try" server - test patches before checking in]]
* [[Build:TinderboxErrors| Tinderbox Error/Warning Reference: Debugging red and orange on Tinderbox]]
* [http://tests.themasta.com/tinderboxpushlog/ TBPL] - Tinderbox Push Log


= ??? =
==== Notes ====
* [[Build:CommunityFarm|Community Build Farm Roster]]
* A useful link for try syntax: https://mozilla-releng.net/trychooser/
* [[Build:CommunitySelfHelp|Community Self-Help]]
* To see the hosts from the staging pool:  
* OSX hosts: https://tools.taskcluster.net/provisioners/releng-hardware/worker-types/gecko-t-osx-1010-beta
* Linux hosts: https://tools.taskcluster.net/provisioners/releng-hardware/worker-types/gecko-t-linux-talos-b

Latest revision as of 13:56, 11 March 2021

Quick Links For You



About Us

We ship Firefox to the world!

Release Engineering does this by:

  • Developing world-class, scalable, open, secure, and maintainable infrastructure for application builds and tests, on a diverse set of desktop and mobile platforms
  • Building fast and reliable pipelines to transform source code into shipped products

Contacting Release Engineering

Our team is located on 3 continents and in 5 time zones. This allows us to provide better service, especially if you contact us using one of the following methods:

  • To request a new service, please file a bug
  • To ask a general question, ping in #firefox-ci on Matrix, or email release@mozilla.com
  • To request status on an existing request, set the "needinfo" flag in the bug.

Our team works normal business hours for our respective time zones. If you need to escalate an issue that is both urgent and important, use the following methods:

  1. Use #firefox-ci on Matrix or email release@mmozilla.com, starting your message with 'URGENT:'. If no response in 15 minutes, then
  2. Be sure the bug severity is set to "blocker"
  3. Call one or more of the following people (nagios page preferred if you have access):

If you get voice mail, please leave your callback number.

Contributing

If you are interested in getting involved with Release Engineering, please see our contributing page! We'd love to hear from you.

Team

Mozilla's Release Engineering:

Name Profile Twitter Blog
Ben Hearsum bhearsum @bhearsum Ben's blog
Aki Sasaki aki @escapewindow escapewindow
Mihai Tabara mtabara @mihaitabara Mihai Tabara's blog

Interns

Releng Offerings

As mentioned above, Releng offer pipelines to transform source code into shipped products. The following sections break down how that happens. Each section can be understood as both isolated and combined parts.

Initiating a Release

To start a release, Release Management submit a form in Ship It with what product they would like to release, what revision to use, and a number of other inputs.

Configuring & Scheduling

Ship It then creates Taskcluster tasks that are needed to take a builds and release them to users. These tasks make up the release graph that are derived from templates within taskgraph and are submitted via action tasks.

Signing

The signing of build artifacts and binaries. Some features of this:

  • signing is done through a client/server model
  • integrated with Taskcluster thanks to signingscript in conjunction with scriptworker, a securely managed Taskcluster worker type. signingscript tasks are part of the task graph that is generated from Ship It
  • keys are generated with modern standards
  • keys are secured by our infra and rotated regularly
  • coming soon: self served signing through exposed API

Uploading

As important release artifacts are created, they are then uploaded to archive.m.o where they can served from and live permanently for historical or longstanding support reasons.

Like signing, uploading is integrated with Taskcluster thanks to beetmoverscript in conjunction with scriptworker, a securely managed Taskcluster worker type. signingscript tasks are part of the task graph that is generated from Ship It

Install & Update Tests

Like product tests, releases likewise need tests. This ensures that initial downloads install correctly on all supported platforms and updates work as expected, all before actually releasing. Right now this is done through our Update and Final Verify tests. Which, like all other sections are part of the release graph.

TODO: link to documentation and source of these

Shipping & Updates

Finally, we release the product via both initial downloads and as new updates.

For Desktop Firefox:

  • Initial installs are served via updating the download page, mozilla.com (Bedrock) and updating Bouncer, Mozilla's mirroring and redirection server.
  • Updates are handled by our own application, Balrog. Balrog is our server side component of the update system

For Android Products, including Firefox:

Development

Best Practices

Bugzilla


Operations

Release Engineering has historically been involved with the Build and Release pipeline of a product. As part of that, we have some responsibility to help ensure that the build (continuous integration) and release (deployment) pipeline infrastructure is in good running health. We have two functional groups that monitor and respond to any operational issues that come up.

Buildduty

Buildduty provides support for Firefox's build and test infrastructure

The role of Buildduty has grown beyond Release Engineering's scope. There is a dedicated team of 6 people, providing 24/7 support of Mozilla's build and test infrastructure.

See the Buildduty home page and manifesto for more information.

CI Duty

CI Duty provides support for Firefox's release infrastructure and is currently handled by Releng

See the CIDuty for more information.

Releng Applications

  • Applications - Various applications and services that RelEng provides
  • TODO update application list with: Services, Scriptworker, ChainOfTrust

Mozilla Applications

  • Taskcluster - our task execution tool for providing continuous integration and release pipelines
  • Treeherder - aggregates all the build, test, and release tasks as a reporting dashboard
  • PuppetAgain - Release Operations tool and puppet configs for configurating build and release machines. Both for workers and hosting applications
  • TODO - add Release Operations replacement for Slaveapi: Controller

External Third Party Dependencies

  • AWS
  • Heroku
  • Papertrail
  • Nagios
  • Sentry

Deprecated

below pages should be deleted or be given a "warning" outdated box where appropriate.

VCS Sync

Releases

Platform Support

Tryserver

Testing

Subpages

Run the tasks to staging pools (OSX/Linux)

diff --git a/taskcluster/taskgraph/transforms/task.py b/taskcluster/taskgraph/transforms/task.py
--- a/taskcluster/taskgraph/transforms/task.py
+++ b/taskcluster/taskgraph/transforms/task.py
@@ -1717,16 +1717,48 @@ def add_index_routes(config, tasks):
         index_type = index.get('type', 'generic')
         task = index_builders[index_type](config, task)

         del task['index']
         yield task


 @transforms.add
+def set_worker_type(config, tasks):
+    for task in tasks:
+        level = str(config.params['level'])
+
+        provisioner_id, worker_type = get_worker_type(
+            config.graph_config,
+            task['worker-type'],
+            level,
+        )
+        task['worker-type'] = '/'.join([provisioner_id, worker_type])
+        yield task
+
+
+@transforms.add
+def use_beta_workertypes(config, tasks):
+    """
+    This transform uses a dictionary of worker type names to worker type names
+    in order to map one set of worker types to another set. This is typically
+    useful when you want to run a try push against a staging set of worker
+    types, that you want to test before rolling them out to production.
+    """
+    find_replace_dict = {
+        "releng-hardware/gecko-t-osx-1014":      "releng-hardware/gecko-t-osx-1014-staging",
+        "releng-hardware/gecko-t-linux-talos":   "releng-hardware/gecko-t-linux-talos-b"
+    }
+    for task in tasks:
+        if task['worker-type'] in find_replace_dict:
+            task['worker-type'] = find_replace_dict[task['worker-type']]
+        yield task
+
+
+@transforms.add
 def build_task(config, tasks):
     for task in tasks:
         level = str(config.params['level'])

         provisioner_id, worker_type = get_worker_type(
             config.graph_config,
             task['worker-type'],
             level,
  • Commit the changes using the following commit message: hg commit -m "<commit_message>; try: -b do -p macosx64 -u all -t none". The <commit_message> will be a message that will describe your action, like: Run all tests on OSX staging workers.
  • You will receive an email like this:
Thank you for your try submission. It's the best!

Results will be displayed on Treeherder as they come in:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=6657878a04024803ce0aae0601627810b2d8d95e

It looks like this submission has talos jobs. You can compare the performance of your push against a baseline revision here:
https://treeherder.mozilla.org/perf.html#/comparechooser?newProject=try&newRevision=6657878a04024803ce0aae0601627810b2d8d95e

Once completed, all build and log artifacts will be available through the Treeherder URL above.

All Taskcluster based artifacts can also be found in the Taskcluster Artifact Index:
e.g.  https://tools.taskcluster.net/index/artifacts/gecko.v2.try.revision.6657878a04024803ce0aae0601627810b2d8d95e

Summary: Test linux generic-worker; try: -b do -p linux64 -u none -t chromez-e10s

Notes

* OSX hosts: https://tools.taskcluster.net/provisioners/releng-hardware/worker-types/gecko-t-osx-1010-beta
* Linux hosts: https://tools.taskcluster.net/provisioners/releng-hardware/worker-types/gecko-t-linux-talos-b