Bug 1520874: [mozharness] Set L10n update channel based on build update channel; r=Callek
authorTom Prince <mozilla@hocat.ca>
Mon, 21 Jan 2019 20:56:48 +0000
changeset 514917 3c3a5c19f715fd1f79ae2dda7b638caa0c919dba
parent 514916 b1390bf41f67427dc3ffddbb57e895d18f0aac81
child 514918 1b1278cd1299699067de35d2b2394a013e484824
push id1953
push userffxbld-merge
push dateMon, 11 Mar 2019 12:10:20 +0000
treeherdermozilla-release@9c35dcbaa899 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersCallek
bugs1520874
milestone66.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1520874: [mozharness] Set L10n update channel based on build update channel; r=Callek Differential Revision: https://phabricator.services.mozilla.com/D15860
taskcluster/ci/l10n/kind.yml
taskcluster/docs/attributes.rst
taskcluster/taskgraph/transforms/build.py
taskcluster/taskgraph/transforms/l10n.py
taskcluster/taskgraph/util/attributes.py
testing/mozharness/configs/single_locale/alder.py
testing/mozharness/configs/single_locale/ash.py
testing/mozharness/configs/single_locale/ash_android-api-16.py
testing/mozharness/configs/single_locale/autoland.py
testing/mozharness/configs/single_locale/autoland_android-api-16.py
testing/mozharness/configs/single_locale/jamun.py
testing/mozharness/configs/single_locale/jamun_android-api-16.py
testing/mozharness/configs/single_locale/linux64_devedition.py
testing/mozharness/configs/single_locale/linux_devedition.py
testing/mozharness/configs/single_locale/macosx64_devedition.py
testing/mozharness/configs/single_locale/maple_android-api-16.py
testing/mozharness/configs/single_locale/mozilla-aurora.py
testing/mozharness/configs/single_locale/mozilla-aurora_android-api-16.py
testing/mozharness/configs/single_locale/mozilla-beta.py
testing/mozharness/configs/single_locale/mozilla-beta_android-api-16.py
testing/mozharness/configs/single_locale/mozilla-beta_devedition.py
testing/mozharness/configs/single_locale/mozilla-central.py
testing/mozharness/configs/single_locale/mozilla-central_android-api-16.py
testing/mozharness/configs/single_locale/mozilla-esr60.py
testing/mozharness/configs/single_locale/mozilla-inbound.py
testing/mozharness/configs/single_locale/mozilla-inbound_android-api-16.py
testing/mozharness/configs/single_locale/mozilla-release.py
testing/mozharness/configs/single_locale/mozilla-release_android-api-16.py
testing/mozharness/configs/single_locale/onchange.py
testing/mozharness/configs/single_locale/tc_linux32.py
testing/mozharness/configs/single_locale/tc_linux64.py
testing/mozharness/configs/single_locale/tc_macosx64.py
testing/mozharness/configs/single_locale/tc_win32.py
testing/mozharness/configs/single_locale/tc_win64.py
testing/mozharness/configs/single_locale/try.py
testing/mozharness/configs/single_locale/try_android-api-16.py
testing/mozharness/configs/single_locale/win32_devedition.py
testing/mozharness/configs/single_locale/win64_devedition.py
testing/mozharness/scripts/desktop_l10n.py
testing/mozharness/scripts/mobile_l10n.py
--- a/taskcluster/ci/l10n/kind.yml
+++ b/taskcluster/ci/l10n/kind.yml
@@ -132,46 +132,40 @@ job-template:
     mozharness:
         config:
             by-build-platform:
                 linux:
                     - single_locale/{project}.py
                     - single_locale/linux32.py
                     - single_locale/tc_common.py
                     - single_locale/tc_linux32.py
-                    - single_locale/onchange.py
                 linux64:
                     - single_locale/{project}.py
                     - single_locale/linux64.py
                     - single_locale/tc_common.py
                     - single_locale/tc_linux64.py
-                    - single_locale/onchange.py
                 macosx64:
                     - single_locale/{project}.py
                     - single_locale/macosx64.py
                     - single_locale/tc_common.py
                     - single_locale/tc_macosx64.py
-                    - single_locale/onchange.py
                 win32:
                     - single_locale/{project}.py
                     - single_locale/win32.py
                     - single_locale/tc_common.py
                     - single_locale/tc_win32.py
-                    - single_locale/onchange.py
                 win64:
                     - single_locale/{project}.py
                     - single_locale/win64.py
                     - single_locale/tc_common.py
                     - single_locale/tc_win64.py
-                    - single_locale/onchange.py
                 android-api-16:
                     - single_locale/{project}_android-api-16.py
                     - single_locale/tc_common.py
                     - single_locale/tc_android-api-16.py
-                    - single_locale/onchange.py
         # no default, so we fail on new entries
         actions:
             by-build-platform:
                 default: ['clone-locales', 'list-locales', 'setup', 'repack',
                           'summary']
                 android-api-16: ['get-secrets',
                                  'clone-locales', 'list-locales', 'setup', 'repack',
                                  'upload-repacks', 'summary']
--- a/taskcluster/docs/attributes.rst
+++ b/taskcluster/docs/attributes.rst
@@ -276,8 +276,12 @@ identify the current version of the arti
 
 required_signoffs
 =================
 A list of release signoffs that this kind requires, should the release also
 require these signoffs. For example, ``mar-signing`` signoffs may be required
 by some releases in the future; for any releases that require ``mar-signing``
 signoffs, the kinds that also require that signoff are marked with this
 attribute.
+
+update-channel
+==============
+The update channel the build is configured to use.
--- a/taskcluster/taskgraph/transforms/build.py
+++ b/taskcluster/taskgraph/transforms/build.py
@@ -59,16 +59,17 @@ def update_channel(config, jobs):
             job, 'run.update-channel', item_name=job['name'],
             **{
                 'release-type': config.params['release_type'],
             }
         )
         update_channel = job['run'].pop('update-channel', None)
         if update_channel:
             job['run'].setdefault('extra-config', {})['update_channel'] = update_channel
+            job['attributes']['update-channel'] = update_channel
         yield job
 
 
 @transforms.add
 def mozconfig(config, jobs):
     for job in jobs:
         resolve_keyed_by(
             job, 'run.mozconfig-variant', item_name=job['name'],
--- a/taskcluster/taskgraph/transforms/l10n.py
+++ b/taskcluster/taskgraph/transforms/l10n.py
@@ -374,16 +374,26 @@ def stub_installer(config, jobs):
         job.setdefault('attributes', {})
         job.setdefault('env', {})
         if job["attributes"].get('stub-installer'):
             job['env'].update({"USE_STUB_INSTALLER": "1"})
         yield job
 
 
 @transforms.add
+def update_channel(config, jobs):
+    for job in jobs:
+        if 'update-channel' in job['attributes']:
+            job['mozharness'].setdefault('extra-config', {})['update_channel'] = (
+                job['attributes']['update-channel']
+            )
+        yield job
+
+
+@transforms.add
 def make_job_description(config, jobs):
     for job in jobs:
         job['mozharness'].update({
             'using': 'mozharness',
             'job-script': 'taskcluster/scripts/builder/build-l10n.sh',
             'secrets': job['secrets'],
         })
         job_description = {
--- a/taskcluster/taskgraph/util/attributes.py
+++ b/taskcluster/taskgraph/util/attributes.py
@@ -36,16 +36,17 @@ RELEASE_PROMOTION_PROJECTS = {
     'l10n_chunk',
     'locale',
     'nightly',
     'required_signoffs',
     'signed',
     'shipping_phase',
     'shipping_product',
     'stub-installer',
+    'update-channel',
 )
 
 
 def attrmatch(attributes, **kwargs):
     """Determine whether the given set of task attributes matches.  The
     conditions are given as keyword arguments, where each keyword names an
     attribute.  The keyword value can be a literal, a set, or a callable.  A
     literal must match the attribute exactly.  Given a set, the attribute value
--- a/testing/mozharness/configs/single_locale/alder.py
+++ b/testing/mozharness/configs/single_locale/alder.py
@@ -1,13 +1,12 @@
 import os
 
 config = {
     "branch": "alder",
-    "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
     # purge options
--- a/testing/mozharness/configs/single_locale/ash.py
+++ b/testing/mozharness/configs/single_locale/ash.py
@@ -1,13 +1,12 @@
 import os
 
 config = {
     "branch": "ash",
-    "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
     # purge options
--- a/testing/mozharness/configs/single_locale/ash_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/ash_android-api-16.py
@@ -1,12 +1,11 @@
 import os
 
 BRANCH = "ash"
-MOZ_UPDATE_CHANNEL = "nightly"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
@@ -22,14 +21,13 @@ config = {
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
         "EN_US_BINARY_URL": os.environ['EN_US_BINARY_URL'],
-        "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/autoland.py
+++ b/testing/mozharness/configs/single_locale/autoland.py
@@ -1,13 +1,12 @@
 import os
 
 config = {
     "branch": "mozilla-central",
-    "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
     # purge options
--- a/testing/mozharness/configs/single_locale/autoland_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/autoland_android-api-16.py
@@ -1,12 +1,11 @@
 import os
 
 BRANCH = "autoland"
-MOZ_UPDATE_CHANNEL = "nightly"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
@@ -22,14 +21,13 @@ config = {
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
-        "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/jamun.py
+++ b/testing/mozharness/configs/single_locale/jamun.py
@@ -1,13 +1,12 @@
 import os
 
 config = {
     "branch": "jamun",
-    "update_channel": "nightly-jamun",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
     # purge options
--- a/testing/mozharness/configs/single_locale/jamun_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/jamun_android-api-16.py
@@ -19,14 +19,13 @@ config = {
     'vcs_share_base': "/builds/hg-shared",
 
     "l10n_dir": "mozilla-beta",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": "obj-firefox",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
-        "MOZ_UPDATE_CHANNEL": "nightly-jamun",
     },
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/linux64_devedition.py
+++ b/testing/mozharness/configs/single_locale/linux64_devedition.py
@@ -10,11 +10,9 @@ config = {
     "l10n_dir": "l10n",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
-
-    "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/linux_devedition.py
+++ b/testing/mozharness/configs/single_locale/linux_devedition.py
@@ -10,11 +10,9 @@ config = {
     "l10n_dir": "l10n",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
-
-    "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/macosx64_devedition.py
+++ b/testing/mozharness/configs/single_locale/macosx64_devedition.py
@@ -16,11 +16,9 @@ config = {
     "l10n_dir": "l10n",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
-
-    "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/maple_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/maple_android-api-16.py
@@ -19,14 +19,13 @@ config = {
     'vcs_share_base': "/builds/hg-shared",
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": "obj-firefox",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
-        "MOZ_UPDATE_CHANNEL": "nightly-maple",
     },
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/mozilla-aurora.py
+++ b/testing/mozharness/configs/single_locale/mozilla-aurora.py
@@ -1,13 +1,12 @@
 import os
 
 config = {
     "branch": "mozilla-aurora",
-    "update_channel": "aurora",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/releases/l10n/mozilla-aurora",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
     # purge options
--- a/testing/mozharness/configs/single_locale/mozilla-aurora_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-aurora_android-api-16.py
@@ -1,12 +1,11 @@
 import os
 
 BRANCH = "mozilla-aurora"
-MOZ_UPDATE_CHANNEL = "aurora"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
@@ -22,14 +21,13 @@ config = {
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": MOZILLA_DIR,
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
-        "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/mozilla-beta.py
+++ b/testing/mozharness/configs/single_locale/mozilla-beta.py
@@ -1,13 +1,12 @@
 import os
 
 config = {
     "branch": "mozilla-beta",
-    "update_channel": "beta",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
     # purge options
--- a/testing/mozharness/configs/single_locale/mozilla-beta_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-beta_android-api-16.py
@@ -1,11 +1,10 @@
 import os
 BRANCH = "mozilla-beta"
-MOZ_UPDATE_CHANNEL = "beta"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
 EN_US_BINARY_URL = None
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
@@ -23,11 +22,10 @@ config = {
     'vcs_share_base': HG_SHARE_BASE_DIR,
     "l10n_dir": "l10n-central",
 
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_OBJDIR": OBJDIR,
-        "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
 }
--- a/testing/mozharness/configs/single_locale/mozilla-beta_devedition.py
+++ b/testing/mozharness/configs/single_locale/mozilla-beta_devedition.py
@@ -1,10 +1,9 @@
 config = {
     "branch": "mozilla-beta",
-    "update_channel": "aurora",  # devedition uses aurora based branding
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # purge options
     'is_automation': True,
 }
--- a/testing/mozharness/configs/single_locale/mozilla-central.py
+++ b/testing/mozharness/configs/single_locale/mozilla-central.py
@@ -1,13 +1,12 @@
 import os
 
 config = {
     "branch": "mozilla-central",
-    "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
     # purge options
--- a/testing/mozharness/configs/single_locale/mozilla-central_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-central_android-api-16.py
@@ -1,12 +1,11 @@
 import os
 
 BRANCH = "mozilla-central"
-MOZ_UPDATE_CHANNEL = "nightly"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
@@ -22,14 +21,13 @@ config = {
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
-        "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/mozilla-esr60.py
+++ b/testing/mozharness/configs/single_locale/mozilla-esr60.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "branch": "mozilla-esr60",
     "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-esr60/",
-    "update_channel": "esr",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
     # repositories
--- a/testing/mozharness/configs/single_locale/mozilla-inbound.py
+++ b/testing/mozharness/configs/single_locale/mozilla-inbound.py
@@ -1,13 +1,12 @@
 import os
 
 config = {
     "branch": "mozilla-inbound",
-    "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
     # purge options
--- a/testing/mozharness/configs/single_locale/mozilla-inbound_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-inbound_android-api-16.py
@@ -1,12 +1,11 @@
 import os
 
 BRANCH = "mozilla-inbound"
-MOZ_UPDATE_CHANNEL = "default"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
@@ -22,14 +21,13 @@ config = {
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
-        "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/mozilla-release.py
+++ b/testing/mozharness/configs/single_locale/mozilla-release.py
@@ -1,13 +1,12 @@
 import os
 
 config = {
     "branch": "mozilla-release",
-    "update_channel": "release",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
     # purge options
--- a/testing/mozharness/configs/single_locale/mozilla-release_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-release_android-api-16.py
@@ -1,11 +1,10 @@
 import os
 BRANCH = "mozilla-release"
-MOZ_UPDATE_CHANNEL = "release"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
@@ -22,11 +21,10 @@ config = {
     'vcs_share_base': HG_SHARE_BASE_DIR,
     "l10n_dir": "l10n-central",
 
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_OBJDIR": OBJDIR,
-        "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
 }
deleted file mode 100644
--- a/testing/mozharness/configs/single_locale/onchange.py
+++ /dev/null
@@ -1,3 +0,0 @@
-config = {
-    "update_channel": "default",
-}
--- a/testing/mozharness/configs/single_locale/tc_linux32.py
+++ b/testing/mozharness/configs/single_locale/tc_linux32.py
@@ -1,16 +1,15 @@
 import os
 
 config = {
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
 }
--- a/testing/mozharness/configs/single_locale/tc_linux64.py
+++ b/testing/mozharness/configs/single_locale/tc_linux64.py
@@ -1,16 +1,15 @@
 import os
 
 config = {
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
 }
--- a/testing/mozharness/configs/single_locale/tc_macosx64.py
+++ b/testing/mozharness/configs/single_locale/tc_macosx64.py
@@ -1,16 +1,15 @@
 import os
 
 config = {
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
 
--- a/testing/mozharness/configs/single_locale/tc_win32.py
+++ b/testing/mozharness/configs/single_locale/tc_win32.py
@@ -4,17 +4,16 @@ config = {
     'vcs_share_base': os.path.join('y:', os.sep, 'hg-shared'),
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         # EN_US_INSTALLER_BINARY_URL falls back on EN_US_BINARY_URL
         "EN_US_INSTALLER_BINARY_URL": os.environ.get(
             "EN_US_INSTALLER_BINARY_URL", os.environ["EN_US_BINARY_URL"]),
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE', 'c:/builds/tooltool_cache'),
         'EN_US_PACKAGE_NAME': 'target.zip',
         'EN_US_PKG_INST_BASENAME': 'target.installer',
     },
     "upload_env": {
         'UPLOAD_PATH': os.path.join(os.getcwd(), 'public', 'build'),
--- a/testing/mozharness/configs/single_locale/tc_win64.py
+++ b/testing/mozharness/configs/single_locale/tc_win64.py
@@ -4,17 +4,16 @@ config = {
     'vcs_share_base': os.path.join('y:', os.sep, 'hg-shared'),
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         # EN_US_INSTALLER_BINARY_URL falls back on EN_US_BINARY_URL
         "EN_US_INSTALLER_BINARY_URL": os.environ.get(
             "EN_US_INSTALLER_BINARY_URL", os.environ["EN_US_BINARY_URL"]),
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE', 'c:/builds/tooltool_cache'),
         'EN_US_PACKAGE_NAME': 'target.zip',
         'EN_US_PKG_INST_BASENAME': 'target.installer',
     },
     "upload_env": {
         'UPLOAD_PATH': os.path.join(os.getcwd(), 'public', 'build'),
--- a/testing/mozharness/configs/single_locale/try.py
+++ b/testing/mozharness/configs/single_locale/try.py
@@ -1,13 +1,12 @@
 import os
 
 config = {
     "branch": "try",
-    "update_channel": "nightly-try",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
     # purge options
--- a/testing/mozharness/configs/single_locale/try_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/try_android-api-16.py
@@ -19,14 +19,13 @@ config = {
     'vcs_share_base': "/builds/hg-shared",
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": "obj-firefox",
         "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
-        "MOZ_UPDATE_CHANNEL": "try", # XXX Invalid
     },
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/win32_devedition.py
+++ b/testing/mozharness/configs/single_locale/win32_devedition.py
@@ -18,11 +18,9 @@ config = {
     # MAR
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
 
     # use mozmake?
     "enable_mozmake": True,
     'exes': {},
-
-    "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/win64_devedition.py
+++ b/testing/mozharness/configs/single_locale/win64_devedition.py
@@ -18,11 +18,9 @@ config = {
     # MAR
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
 
     # use mozmake?
     "enable_mozmake": True,
     'exes': {},
-
-    "update_channel": "aurora",
 }
--- a/testing/mozharness/scripts/desktop_l10n.py
+++ b/testing/mozharness/scripts/desktop_l10n.py
@@ -38,20 +38,16 @@ except ImportError:
 # needed by _map
 SUCCESS = 0
 FAILURE = 1
 
 SUCCESS_STR = "Success"
 FAILURE_STR = "Failed"
 
 
-# mandatory configuration options, without them, this script will not work
-# it's a list of values that are already known before starting a build
-configuration_tokens = ('branch', 'update_channel')
-
 # some other values such as "%(version)s", ...
 # are defined at run time and they cannot be enforced in the _pre_config_lock
 # phase
 runtime_config_tokens = ('version', 'locale', 'abs_objdir',
                          'en_us_installer_binary_url')
 
 
 # DesktopSingleLocale {{{1
@@ -119,43 +115,16 @@ class DesktopSingleLocale(LocalesMixin, 
         self.pushdate = None
         # upload_files is a dictionary of files to upload, keyed by locale.
         self.upload_files = {}
 
     def _pre_config_lock(self, rw_config):
         """replaces 'configuration_tokens' with their values, before the
            configuration gets locked. If some of the configuration_tokens
            are not present, stops the execution of the script"""
-        # since values as branch, platform are mandatory, can replace them in
-        # in the configuration before it is locked down
-        # mandatory tokens
-        for token in configuration_tokens:
-            if token not in self.config:
-                self.fatal('No %s in configuration!' % token)
-
-        # all the important tokens are present in our configuration
-        for token in configuration_tokens:
-            # token_string '%(branch)s'
-            token_string = ''.join(('%(', token, ')s'))
-            # token_value => ash
-            token_value = self.config[token]
-            for element in self.config:
-                # old_value =>  https://hg.mozilla.org/projects/%(branch)s
-                old_value = self.config[element]
-                # new_value => https://hg.mozilla.org/projects/ash
-                new_value = self.__detokenise_element(self.config[element],
-                                                      token_string,
-                                                      token_value)
-                if new_value and new_value != old_value:
-                    msg = "%s: replacing %s with %s" % (element,
-                                                        old_value,
-                                                        new_value)
-                    self.debug(msg)
-                    self.config[element] = new_value
-
         # now, only runtime_config_tokens should be present in config
         # we should parse self.config and fail if any other  we spot any
         # other token
         tokens_left = set(self._get_configuration_tokens(self.config))
         unknown_tokens = set(tokens_left) - set(runtime_config_tokens)
         if unknown_tokens:
             msg = ['unknown tokens in configuration:']
             for t in unknown_tokens:
@@ -245,16 +214,25 @@ class DesktopSingleLocale(LocalesMixin, 
             name = name.upper()
             binary_path = os.path.join(self._mar_tool_dir(), binary)
             # windows fix...
             if binary.endswith('.exe'):
                 binary_path = binary_path.replace('\\', '\\\\\\\\')
             bootstrap_env[name] = binary_path
         if self.query_is_nightly():
             bootstrap_env["IS_NIGHTLY"] = "yes"
+            # we might set update_channel explicitly
+            if config.get('update_channel'):
+                update_channel = config['update_channel']
+            else:  # Let's just give the generic channel based on branch.
+                update_channel = "nightly-%s" % (config['branch'],)
+            if isinstance(update_channel, unicode):
+                update_channel = update_channel.encode("utf-8")
+            bootstrap_env["MOZ_UPDATE_CHANNEL"] = update_channel
+            self.info("Update channel set to: {}".format(bootstrap_env["MOZ_UPDATE_CHANNEL"]))
         self.bootstrap_env = bootstrap_env
         return self.bootstrap_env
 
     def _query_upload_env(self):
         """returns the environment used for the upload step"""
         if self.upload_env:
             return self.upload_env
         config = self.config
--- a/testing/mozharness/scripts/mobile_l10n.py
+++ b/testing/mozharness/scripts/mobile_l10n.py
@@ -93,22 +93,25 @@ class MobileSingleLocale(LocalesMixin, T
             return self.repack_env
         c = self.config
         repack_env = self.query_env(partial_env=c.get("repack_env"))
         if self.query_is_nightly():
             # Nightly promotion needs to set update_channel but not do all
             # the 'IS_NIGHTLY' automation parts, like uploading symbols
             # (for now).
             repack_env["IS_NIGHTLY"] = "yes"
-        # In branch_specifics.py we might set update_channel explicitly.
-        if c.get('update_channel'):
-            repack_env["MOZ_UPDATE_CHANNEL"] = c['update_channel']
-        else:  # Let's just give the generic channel based on branch.
-            repack_env["MOZ_UPDATE_CHANNEL"] = \
-                "nightly-%s" % (c['branch'],)
+            # we might set update_channel explicitly
+            if c.get('update_channel'):
+                update_channel = c['update_channel']
+            else:  # Let's just give the generic channel based on branch.
+                update_channel = "nightly-%s" % (c['branch'],)
+            if isinstance(update_channel, unicode):
+                update_channel = update_channel.encode("utf-8")
+            repack_env["MOZ_UPDATE_CHANNEL"] = update_channel
+            self.info("Update channel set to: {}".format(repack_env["MOZ_UPDATE_CHANNEL"]))
 
         self.repack_env = repack_env
         return self.repack_env
 
     def query_l10n_env(self):
         return self.query_env()
 
     def query_upload_env(self):