Backed out 16 changesets (bug 1286092) for L10n bustages CLOSED TREE
authorBogdan Tara <btara@mozilla.com>
Wed, 30 May 2018 16:16:24 +0300
changeset 474717 eae35fb53eb844537bff57e611097abc6823867b
parent 474716 ef828badfd938e5fb4964254c98a71f2114d888e
child 474718 d9afdede8e0f417ee0fda17a60b4ad3c9e0b038e
push id9374
push userjlund@mozilla.com
push dateMon, 18 Jun 2018 21:43:20 +0000
treeherdermozilla-beta@160e085dfb0b [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1286092
milestone62.0a1
backs outef828badfd938e5fb4964254c98a71f2114d888e
57a592e33f36183be10641b31fac46b9f724044f
c9cf945aa4f94a6e7dfcfcc009d92e07aad60e01
d8c01d976acd23498121d90333f1afe25c1e433a
5d68dfd6325c3869ff6afe24f9f0ca4affa84c1a
878e174255ff121f4a979d4a9fba1d368602dcce
fa3e38422d49521c7e1660965055f0e2b8e7ab68
fc6aebca89e3276544aabca85c2c99b7a4d42d7b
f2271cd6af2672d92e03ce047bc7925c5bbfe57e
7b828445f551549382c2949a180aa0c2d5396f6f
5617053b1740223cbf3c218cfee6f37aed0afec4
556f54c5e20923c3d95b3cc3ccdb21c0d72379d6
db19ea492b02cc9860638cca575de4fc6f7a4df9
6eb40b38f9c98ae7d7d2bb5ceeb39bc224beff14
3eb4e39b9bcdbf3359051e2bd05d7533ab087a63
b3c05f6e6a573762b3a96a0a780f5790e6ac2d77
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
Backed out 16 changesets (bug 1286092) for L10n bustages CLOSED TREE Backed out changeset ef828badfd93 (bug 1286092) Backed out changeset 57a592e33f36 (bug 1286092) Backed out changeset c9cf945aa4f9 (bug 1286092) Backed out changeset d8c01d976acd (bug 1286092) Backed out changeset 5d68dfd6325c (bug 1286092) Backed out changeset 878e174255ff (bug 1286092) Backed out changeset fa3e38422d49 (bug 1286092) Backed out changeset fc6aebca89e3 (bug 1286092) Backed out changeset f2271cd6af26 (bug 1286092) Backed out changeset 7b828445f551 (bug 1286092) Backed out changeset 5617053b1740 (bug 1286092) Backed out changeset 556f54c5e209 (bug 1286092) Backed out changeset db19ea492b02 (bug 1286092) Backed out changeset 6eb40b38f9c9 (bug 1286092) Backed out changeset 3eb4e39b9bcd (bug 1286092) Backed out changeset b3c05f6e6a57 (bug 1286092)
browser/confvars.sh
browser/locales/l10n-onchange-changesets.json
browser/locales/onchange-locales
build/sparse-profiles/taskgraph
mobile/locales/l10n-onchange-changesets.json
taskcluster/ci/build/windows.yml
taskcluster/ci/config.yml
taskcluster/ci/l10n/kind.yml
taskcluster/ci/repackage-signing/kind.yml
taskcluster/ci/repackage/kind.yml
taskcluster/docs/attributes.rst
taskcluster/taskgraph/loader/build_signing.py
taskcluster/taskgraph/target_tasks.py
taskcluster/taskgraph/transforms/beetmover_repackage.py
taskcluster/taskgraph/transforms/build.py
taskcluster/taskgraph/transforms/build_signing.py
taskcluster/taskgraph/transforms/l10n.py
taskcluster/taskgraph/transforms/nightly_l10n_signing.py
taskcluster/taskgraph/transforms/repackage.py
taskcluster/taskgraph/transforms/repackage_signing.py
taskcluster/taskgraph/transforms/task.py
taskcluster/taskgraph/util/attributes.py
taskcluster/taskgraph/util/signed_artifacts.py
testing/mozharness/configs/single_locale/onchange.py
testing/mozharness/configs/single_locale/try.py
--- a/browser/confvars.sh
+++ b/browser/confvars.sh
@@ -17,22 +17,16 @@ if test "$OS_ARCH" = "WINNT"; then
   MOZ_MAINTENANCE_SERVICE=1
   if ! test "$HAVE_64BIT_BUILD"; then
     if test "$MOZ_UPDATE_CHANNEL" = "nightly" -o \
             "$MOZ_UPDATE_CHANNEL" = "nightly-try" -o \
             "$MOZ_UPDATE_CHANNEL" = "aurora" -o \
             "$MOZ_UPDATE_CHANNEL" = "beta" -o \
             "$MOZ_UPDATE_CHANNEL" = "release"; then
       if ! test "$MOZ_DEBUG"; then
-        if ! test "$USE_STUB_INSTALLER"; then
-          # Expect USE_STUB_INSTALLER from taskcluster for downstream task consistency
-          echo "ERROR: STUB installer expected to be enabled but"
-          echo "ERROR: USE_STUB_INSTALLER is not specified in the environment"
-          exit 1
-        fi
         MOZ_STUB_INSTALLER=1
       fi
     fi
   fi
 fi
 
 # Enable building ./signmar and running libmar signature tests
 MOZ_ENABLE_SIGNMAR=1
deleted file mode 100644
--- a/browser/locales/l10n-onchange-changesets.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-    "en-CA": {
-        "platforms": [
-            "linux", 
-            "linux64", 
-            "macosx64", 
-            "win32", 
-            "win64"
-        ], 
-        "revision": "default"
-    }, 
-    "he": {
-        "platforms": [
-            "linux", 
-            "linux64", 
-            "macosx64", 
-            "win32", 
-            "win64"
-        ], 
-        "revision": "default"
-    }, 
-    "it": {
-        "platforms": [
-            "linux", 
-            "linux64", 
-            "macosx64", 
-            "win32", 
-            "win64"
-        ], 
-        "revision": "default"
-    }, 
-    "ja": {
-        "platforms": [
-            "linux", 
-            "linux64", 
-            "win32", 
-            "win64"
-        ], 
-        "revision": "default"
-    }, 
-    "ja-JP-mac": {
-        "platforms": [
-            "macosx64"
-        ], 
-        "revision": "default"
-    }
-}
deleted file mode 100644
--- a/browser/locales/onchange-locales
+++ /dev/null
@@ -1,5 +0,0 @@
-en-CA
-he
-it
-ja
-ja-JP-mac
--- a/build/sparse-profiles/taskgraph
+++ b/build/sparse-profiles/taskgraph
@@ -1,16 +1,14 @@
 %include build/sparse-profiles/mach
 
 [include]
 # These files are read as part of generating the taskgraph.
 path:browser/locales/l10n-changesets.json
-path:browser/locales/l10n-onchange-changesets.json
 path:mobile/locales/l10n-changesets.json
-path:mobile/locales/l10n-onchange-changesets.json
 path:browser/locales/shipped-locales
 path:browser/config/version_display.txt
 path:browser/config/version.txt
 
 # Lots of random files in here are read. Just pull in the whole thing.
 path:build/
 
 # TODO remove once bug 1402010 is resolved and test manifests aren't
deleted file mode 100644
--- a/mobile/locales/l10n-onchange-changesets.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-    "en-CA": {
-        "platforms": [
-            "android", 
-            "android-api-16", 
-            "android-multilocale"
-        ], 
-        "revision": "default"
-    }, 
-    "he": {
-        "platforms": [
-            "android", 
-            "android-api-16", 
-            "android-multilocale"
-        ], 
-        "revision": "default"
-    }, 
-    "it": {
-        "platforms": [
-            "android", 
-            "android-api-16", 
-            "android-multilocale"
-        ], 
-        "revision": "default"
-    }, 
-    "ja": {
-        "platforms": [
-            "android", 
-            "android-api-16", 
-            "android-multilocale"
-        ], 
-        "revision": "default"
-    }
-}
--- a/taskcluster/ci/build/windows.yml
+++ b/taskcluster/ci/build/windows.yml
@@ -261,23 +261,16 @@ win64-dmd/opt:
 win32-nightly/opt:
     description: "Win32 Nightly"
     index:
         product: firefox
         job-name: win32-opt
         type: nightly
     attributes:
         nightly: true
-    stub-installer:
-        by-project:
-            default: false
-            mozilla-central: true
-            try: true
-            mozilla-beta: true
-            mozilla-release: true
     shipping-phase: build
     shipping-product: firefox
     treeherder:
         platform: windows2012-32/opt
         symbol: N
         tier: 1
     worker-type: aws-provisioner-v1/gecko-{level}-b-win2012
     worker:
@@ -631,23 +624,16 @@ win64-asan/opt:
 win32-devedition-nightly/opt:
     description: "Win32 Dev Edition Nightly"
     index:
         product: devedition
         job-name: win32-opt
         type: nightly
     attributes:
         nightly: true
-    stub-installer:
-        by-project:
-            default: false
-            mozilla-central: true
-            try: true
-            mozilla-beta: true
-            mozilla-release: true
     shipping-phase: build
     shipping-product: devedition
     treeherder:
         platform: windows2012-32-devedition/opt
         symbol: N
         tier: 1
     worker-type: aws-provisioner-v1/gecko-{level}-b-win2012
     worker:
--- a/taskcluster/ci/config.yml
+++ b/taskcluster/ci/config.yml
@@ -78,19 +78,23 @@ index:
         - 'source'
 
 try:
     # We have a few platforms for which we want to do some "extra" builds, or at
     # least build-ish things.  Sort of.  Anyway, these other things are implemented
     # as different "platforms".  These do *not* automatically ride along with "-p
     # all"
     ridealong-builds:
+        'android-api-16':
+            - 'android-api-16-l10n'
         'linux':
+            - 'linux-l10n'
             - 'sm-arm-sim-linux32'
         'linux64':
+            - 'linux64-l10n'
             - 'sm-plain-linux64'
             - 'sm-nojit-linux64'
             - 'sm-nonunified-linux64'
             - 'sm-arm-sim-linux32'
             - 'sm-arm64-sim-linux64'
             - 'sm-compacting-linux64'
             - 'sm-rootanalysis-linux64'
             - 'sm-package-linux64'
--- a/taskcluster/ci/l10n/kind.yml
+++ b/taskcluster/ci/l10n/kind.yml
@@ -14,173 +14,111 @@ transforms:
 kind-dependencies:
    - build
    - toolchain
 
 only-for-build-platforms:
    - linux64/opt
    - linux/opt
    - android-api-16/opt
-   - macosx64/opt
-   - win32/opt
-   - win64/opt
+   # - macosx64/opt
 
 job-template:
    description:
       by-build-platform:
          default: Localization
-         android-api-16: Single Locale Repack
+         android-api-16-l10n: Single Locale Repack
    locales-file:
       by-build-platform:
-         default: browser/locales/l10n-onchange-changesets.json
-         android-api-16: mobile/locales/l10n-onchange-changesets.json
+         default: browser/locales/l10n-changesets.json
+         android-api-16-l10n: mobile/locales/l10n-changesets.json
    ignore-locales:
       by-build-platform:
          # OSX has a special locale for japanese
          macosx64.*: [ja]
          default: [ja-JP-mac]
    run-time:
       by-build-platform:
          default: 36000
-         android-api-16: 18000
+         android-api-16-l10n: 18000
    docker-image:
       by-build-platform:
-         android-api-16:
+         android-api-16-l10n:
             in-tree: android-build
          default: null
    secrets:
       by-build-platform:
          default: false
-         android-api-16: true
+         android-api-16-l10n: true
    toolchains:
       by-build-platform:
          default: []
          macosx64:
             - linux64-libdmg
             - linux64-hfsplus
-         android-api-16:
+         android-api-16-l10n:
             - android-gradle-dependencies
             - android-sdk-linux
    tooltool:
       by-build-platform:
-         default: internal
-         linux.*: public
-   index:
-      type: l10n
-      product:
-         by-build-platform:
-            default: firefox
-            android-api-16: mobile
-      job-name:
-         by-build-platform:
-            linux: linux-opt
-            linux64: linux64-opt
-            macosx64: macosx64-opt
-            win32: win32-opt
-            win64: win64-opt
-            android-api-16: android-api-16-opt
-   run-on-projects: ['all']
+         default: public
+         android-api-16-l10n: internal
+         macosx64-nightly: internal
    worker-type:
       by-build-platform:
          default: aws-provisioner-v1/gecko-{level}-b-linux
-         android-api-16: aws-provisioner-v1/gecko-{level}-b-android
-         win.*: aws-provisioner-v1/gecko-{level}-b-win2012
+         android: aws-provisioner-v1/gecko-{level}-b-android
    treeherder:
       symbol: L10n
       tier: 3
       platform:
          by-build-platform:
-            linux64: linux64/opt
-            linux: linux32/opt
+            linux64-l10n: linux64/opt
+            linux-l10n: linux32/opt
             macosx64: osx-cross/opt
-            win32: windows2012-32/opt
-            win64: windows2012-64/opt
-            android-api-16: android-4-0-armv7-api16/opt
-   env:
-      by-build-platform:
-         linux.*:   # linux64 and 32 get same treatment here
-            EN_US_PACKAGE_NAME: target.tar.bz2
-            EN_US_BINARY_URL:
-               task-reference: https://queue.taskcluster.net/v1/task/<signed-build>/artifacts/{artifact_prefix}
-            MAR_TOOLS_URL:
-               task-reference: https://queue.taskcluster.net/v1/task/<unsigned-build>/artifacts/{artifact_prefix}/host/bin
-         macosx64:
-            EN_US_PACKAGE_NAME: target.dmg
-            EN_US_BINARY_URL:
-               task-reference: https://queue.taskcluster.net/v1/task/<repackage>/artifacts/{artifact_prefix}
-            MAR_TOOLS_URL:
-               task-reference: https://queue.taskcluster.net/v1/task/<unsigned-build>/artifacts/{artifact_prefix}/host/bin
-         win.*:
-            EN_US_PACKAGE_NAME: target.zip
-            EN_US_BINARY_URL:
-               task-reference: https://queue.taskcluster.net/v1/task/<signed-build>/artifacts/{artifact_prefix}
-            EN_US_INSTALLER_BINARY_URL:
-               task-reference: https://queue.taskcluster.net/v1/task/<repackage-signed>/artifacts/{artifact_prefix}
-            MAR_TOOLS_URL:
-               task-reference: https://queue.taskcluster.net/v1/task/<unsigned-build>/artifacts/{artifact_prefix}/host/bin
-         android-api-16:
-            EN_US_PACKAGE_NAME: target.apk
-            EN_US_BINARY_URL:
-               task-reference: https://queue.taskcluster.net/v1/task/<unsigned-build>/artifacts/{artifact_prefix}
+            android-api-16-l10n: android-4-0-armv7-api16/opt
    mozharness:
       config:
          by-build-platform:
-            linux:
+            linux-l10n:
                - single_locale/{project}.py
                - single_locale/linux32.py
                - single_locale/tc_common.py
                - single_locale/tc_linux32.py
-               - single_locale/onchange.py
-            linux64:
+            linux64-l10n:
                - 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:
+            android-api-16-l10n:
                - 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
       options:
          - revision=$GECKO_HEAD_REV
          - total-chunks=1
          - this-chunk=1
       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']
+            default: [clone-locales list-locales setup repack summary]
+            android-api-16-l10n: [get-secrets
+                                  clone-locales list-locales setup repack
+                                  upload-repacks summary]
       script:
          by-build-platform:
             default: mozharness/scripts/desktop_l10n.py
-            android-api-16: mozharness/scripts/mobile_l10n.py
+            android-api-16-l10n: mozharness/scripts/mobile_l10n.py
    when:
       files-changed:
-         - browser/locales/l10n-onchange-changesets.json
-         - mobile/locales/l10n-onchange-changesets.json
+         - browser/locales/l10n-changesets.json
+         - mobile/locales/l10n-changesets.json
          - testing/mozharness/configs/single_locale/**
          - testing/mozharness/mozharness/mozilla/l10n/locales.py
          - testing/mozharness/scripts/desktop_l10n.py
          - third_party/python/compare-locales/**
          - toolkit/locales/**
          - toolkit/mozapps/installer/**
--- a/taskcluster/ci/repackage-signing/kind.yml
+++ b/taskcluster/ci/repackage-signing/kind.yml
@@ -19,12 +19,10 @@ only-for-build-platforms:
    - linux-devedition-nightly/opt
    - linux64-nightly/opt
    - linux64-devedition-nightly/opt
    - linux64-asan-reporter-nightly/opt
    - macosx64-nightly/opt
    - macosx64-devedition-nightly/opt
    - win32-nightly/opt
    - win32-devedition-nightly/opt
-   - win32/opt
    - win64-nightly/opt
    - win64-devedition-nightly/opt
-   - win64/opt
--- a/taskcluster/ci/repackage/kind.yml
+++ b/taskcluster/ci/repackage/kind.yml
@@ -14,37 +14,32 @@ transforms:
 
 kind-dependencies:
     - build-signing
     - toolchain
 
 only-for-build-platforms:
     - linux-nightly/opt
     - linux-devedition-nightly/opt
-    - linux/opt
     - linux64-nightly/opt
     - linux64-devedition-nightly/opt
     - linux64-asan-reporter-nightly/opt
-    - linux64/opt
     - macosx64-nightly/opt
     - macosx64-devedition-nightly/opt
-    - macosx64/opt
     - win32-nightly/opt
     - win32-devedition-nightly/opt
-    - win32/opt
     - win64-nightly/opt
     - win64-devedition-nightly/opt
-    - win64/opt
 
 job-template:
     mozharness:
         config:
             by-build-platform:
-                linux\b.*:
+                linux-.*:
                     - repackage/linux32_signed.py
-                linux64\b.*:
+                linux64-.*:
                     - repackage/linux64_signed.py
-                macosx64\b.*:
+                macosx64-.*:
                     - repackage/osx_signed.py
-                win32\b.*:
+                win32-.*:
                     - repackage/win32_signed.py
-                win64\b.*:
+                win64-.*:
                     - repackage/win64_signed.py
--- a/taskcluster/docs/attributes.rst
+++ b/taskcluster/docs/attributes.rst
@@ -161,21 +161,16 @@ locale
 For jobs that operate on only one locale, we set the attribute ``locale`` to the
 specific locale involved. Currently this is only in l10n versions of the
 ``beetmover`` and ``balrog`` kinds.
 
 signed
 ======
 Signals that the output of this task contains signed artifacts.
 
-stub-installer
-==============
-Signals to the build system that this build is expected to have a stub installer
-present, and informs followon tasks to expect it.
-
 repackage_type
 ==============
 This is the type of repackage. Can be ``repackage`` or
 ``repackage_signing``.
 
 toolchain-artifact
 ==================
 For toolchain jobs, this is the path to the artifact for that toolchain.
--- a/taskcluster/taskgraph/loader/build_signing.py
+++ b/taskcluster/taskgraph/loader/build_signing.py
@@ -8,18 +8,16 @@ from taskgraph.loader.single_dep import 
 
 # XXX: This logic should rely in kind.yml. This hasn't been done in the original
 # patch because it required some heavy changes in single_dep.
 NON_NIGHTLY_LABELS_WHICH_SHOULD_SIGN_BUILDS = (
     'build-win32/debug', 'build-win32/opt', 'build-win32/pgo',
     'build-win64/debug', 'build-win64/opt', 'build-win64/pgo',
     'build-win32-devedition/opt', 'build-win64-devedition/opt',
     'build-win64-ccov/debug',
-    'build-linux/opt', 'build-linux64/opt', 'build-macosx64/opt',
-    'build-android-api-16/opt'
     'release-source-linux64-source/opt',
     'release-source-linux64-fennec-source/opt',
     'release-source-linux64-devedition-source/opt',
     'release-eme-free-repack-macosx64-nightly',
     'release-partner-repack-macosx64-nightly',
 )
 
 
--- a/taskcluster/taskgraph/target_tasks.py
+++ b/taskcluster/taskgraph/target_tasks.py
@@ -64,19 +64,16 @@ def filter_beta_release_tasks(task, para
     if str(platform).startswith('android') and 'nightly' in str(platform):
         return False
 
     if platform in (
             'linux', 'linux64',
             'macosx64',
             'win32', 'win64',
             ):
-        if task.attributes['kind'] == 'l10n':
-            # This is on-change l10n
-            return True
         if task.attributes['build_type'] == 'opt' and \
            task.attributes.get('unittest_suite') != 'talos' and \
            task.attributes.get('unittest_suite') != 'raptor':
             return False
 
     # skip l10n, beetmover, balrog
     if task.kind in ignore_kinds:
         return False
--- a/taskcluster/taskgraph/transforms/beetmover_repackage.py
+++ b/taskcluster/taskgraph/transforms/beetmover_repackage.py
@@ -284,18 +284,20 @@ def generate_upstream_artifacts(job, bui
         for platform_regex, paths in mapping.iteritems():
             if platform_regex.match(platform) is not None:
                 _check_platform_matched_only_one_regex(
                     tasktype, platform, platform_was_previously_matched_by_regex, platform_regex
                 )
                 if paths:
                     usable_paths = paths[:]
 
-                    use_stub = job["attributes"].get('stub-installer')
-                    if not use_stub:
+                    no_stub = ("mozilla-esr60", "jamun")
+                    if project in no_stub:
+                        # Stub installer is only generated on win32 and not on esr
+                        # XXX We really should have a better solution for this
                         if 'target.stub-installer.exe' in usable_paths:
                             usable_paths.remove('target.stub-installer.exe')
                     upstream_artifacts.append({
                         "taskId": {"task-reference": ref},
                         "taskType": tasktype,
                         "paths": ["{}/{}".format(artifact_prefix, path)
                                   for path in usable_paths],
                         "locale": locale or "en-US",
--- a/taskcluster/taskgraph/transforms/build.py
+++ b/taskcluster/taskgraph/transforms/build.py
@@ -4,17 +4,16 @@
 """
 Apply some defaults and minor modifications to the jobs defined in the build
 kind.
 """
 
 from __future__ import absolute_import, print_function, unicode_literals
 
 from taskgraph.transforms.base import TransformSequence
-from taskgraph.util.schema import resolve_keyed_by
 from taskgraph.util.workertypes import worker_type_implementation
 
 transforms = TransformSequence()
 
 
 @transforms.add
 def set_defaults(config, jobs):
     """Set defaults, including those that differ per worker implementation"""
@@ -29,31 +28,17 @@ def set_defaults(config, jobs):
             worker['chain-of-trust'] = True
         elif worker_os == "windows":
             worker['chain-of-trust'] = True
 
         yield job
 
 
 @transforms.add
-def stub_installer(config, jobs):
-    for job in jobs:
-        job.setdefault('attributes', {})
-        if job.get('stub-installer'):
-            resolve_keyed_by(
-                job, 'stub-installer', item_name=job['name'], project=config.params['project']
-            )
-            job['attributes']['stub-installer'] = job['stub-installer']
-            del job['stub-installer']
-            job['worker']['env'].update({"USE_STUB_INSTALLER": "1"})
-        yield job
-
-
-@transforms.add
 def set_env(config, jobs):
     """Set extra environment variables from try command line."""
-    env = []
+    env = {}
     if config.params['try_mode'] == 'try_option_syntax':
-        env = config.params['try_options']['env'] or []
+        env = config.params['try_options']['env'] or {}
     for job in jobs:
         if env:
             job['worker']['env'].update(dict(x.split('=') for x in env))
         yield job
--- a/taskcluster/taskgraph/transforms/build_signing.py
+++ b/taskcluster/taskgraph/transforms/build_signing.py
@@ -41,16 +41,17 @@ def define_upstream_artifacts(config, jo
     for job in jobs:
         dep_job = job['dependent-task']
         build_platform = dep_job.attributes.get('build_platform')
 
         artifacts_specifications = generate_specifications_of_artifacts_to_sign(
             dep_job,
             keep_locale_template=False,
             kind=config.kind,
+            project=config.params["project"],
         )
 
         if 'android' in build_platform:
             # We're in the job that creates both multilocale and en-US APKs
             artifacts_specifications[0]['artifacts'].append(
                 get_artifact_path(dep_job, 'en-US/target.apk')
             )
 
--- a/taskcluster/taskgraph/transforms/l10n.py
+++ b/taskcluster/taskgraph/transforms/l10n.py
@@ -15,17 +15,16 @@ from taskgraph.transforms.base import (
     TransformSequence,
 )
 from taskgraph.util.schema import (
     validate_schema,
     optionally_keyed_by,
     resolve_keyed_by,
     Schema,
 )
-from taskgraph.util.attributes import copy_attributes_from_dependent_job
 from taskgraph.util.taskcluster import get_artifact_prefix
 from taskgraph.util.treeherder import add_suffix
 from taskgraph.transforms.job import job_description_schema
 from taskgraph.transforms.task import task_description_schema
 from voluptuous import (
     Any,
     Optional,
     Required,
@@ -193,47 +192,67 @@ def _remove_locales(locales, to_remove=N
         locale: revision for locale, revision in locales.items() if locale not in to_remove
     }
 
 
 @transforms.add
 def setup_name(config, jobs):
     for job in jobs:
         dep = job['dependent-task']
-        # Set the name to the same as the dep task, without kind name.
-        # Label will get set automatically with this kinds name.
-        job['name'] = job.get('name',
-                              dep.task['metadata']['name'][len(dep.kind) + 1:])
+        if dep.attributes.get('nightly'):
+            # Set the name to the same as the dep task, without kind name.
+            # Label will get set automatically with this kinds name.
+            job['name'] = job.get('name',
+                                  dep.task['metadata']['name'][
+                                    len(dep.kind) + 1:])
+        else:
+            # Set to match legacy use at the moment (to support documented try
+            # syntax). Set the name to same as dep task + '-l10n' but without the
+            # kind name attached, since that gets added when label is generated
+            name, jobtype = dep.task['metadata']['name'][len(dep.kind) + 1:].split('/')
+            job['name'] = "{}-l10n/{}".format(name, jobtype)
         yield job
 
 
 @transforms.add
 def copy_in_useful_magic(config, jobs):
     for job in jobs:
         dep = job['dependent-task']
-        attributes = copy_attributes_from_dependent_job(dep)
-        attributes.update(job.get('attributes', {}))
+        attributes = job.setdefault('attributes', {})
         # build-platform is needed on `job` for by-build-platform
-        job['build-platform'] = attributes.get("build_platform")
-        job['attributes'] = attributes
+        job['build-platform'] = dep.attributes.get("build_platform")
+        attributes['build_type'] = dep.attributes.get("build_type")
+        if dep.attributes.get('artifact_prefix'):
+            attributes['artifact_prefix'] = dep.attributes['artifact_prefix']
+        if dep.attributes.get("nightly"):
+            attributes['nightly'] = dep.attributes.get("nightly")
+        else:
+            # set build_platform to have l10n as well, to match older l10n setup
+            # for now
+            job['build-platform'] = "{}-l10n".format(job['build-platform'])
+
+        attributes['build_platform'] = job['build-platform']
         yield job
 
 
 @transforms.add
 def validate_early(config, jobs):
     for job in jobs:
         validate_schema(l10n_description_schema, job,
                         "In job {!r}:".format(job.get('name', 'unknown')))
         yield job
 
 
 @transforms.add
 def setup_nightly_dependency(config, jobs):
     """ Sets up a task dependency to the signing job this relates to """
     for job in jobs:
+        if not job['attributes'].get('nightly'):
+            yield job
+            continue  # do not add a dep unless we're a nightly
         job['dependencies'] = {'unsigned-build': job['dependent-task'].label}
         if job['attributes']['build_platform'].startswith('win') or \
                 job['attributes']['build_platform'].startswith('linux'):
             # Weave these in and just assume they will be there in the resulting graph
             job['dependencies'].update({
                 'signed-build': 'build-signing-{}'.format(job['name']),
             })
         if job['attributes']['build_platform'].startswith('macosx'):
@@ -383,26 +402,16 @@ def mh_options_replace_project(config, j
 def validate_again(config, jobs):
     for job in jobs:
         validate_schema(l10n_description_schema, job,
                         "In job {!r}:".format(job.get('name', 'unknown')))
         yield job
 
 
 @transforms.add
-def stub_installer(config, jobs):
-    for job in 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 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/transforms/nightly_l10n_signing.py
+++ b/taskcluster/taskgraph/transforms/nightly_l10n_signing.py
@@ -35,16 +35,17 @@ def make_signing_description(config, job
 @transforms.add
 def define_upstream_artifacts(config, jobs):
     for job in jobs:
         dep_job = job['dependent-task']
 
         locale_specifications = generate_specifications_of_artifacts_to_sign(
             dep_job,
             keep_locale_template=True,
+            project=config.params["project"],
         )
 
         upstream_artifacts = []
         for spec in locale_specifications:
             upstream_artifacts.append({
                 'taskId': {'task-reference': '<unsigned-repack>'},
                 'taskType': 'l10n',
                 # Set paths based on artifacts in the specs (above) one per
--- a/taskcluster/taskgraph/transforms/repackage.py
+++ b/taskcluster/taskgraph/transforms/repackage.py
@@ -133,23 +133,18 @@ def make_job_description(config, jobs):
         if len(dep_job.dependencies) > 1:
             raise NotImplementedError(
                 "Can't repackage a signing task with multiple dependencies")
         signing_dependencies = dep_job.dependencies
         # This is so we get the build task in our dependencies to
         # have better beetmover support.
         dependencies.update(signing_dependencies)
 
-        attributes = copy_attributes_from_dependent_job(dep_job)
-
         treeherder = job.get('treeherder', {})
-        if attributes.get('nightly'):
-            treeherder.setdefault('symbol', 'Nr')
-        else:
-            treeherder.setdefault('symbol', 'Rpk')
+        treeherder.setdefault('symbol', 'Nr')
         dep_th_platform = dep_job.task.get('extra', {}).get(
             'treeherder', {}).get('machine', {}).get('platform', '')
         treeherder.setdefault('platform', "{}/opt".format(dep_th_platform))
         treeherder.setdefault('tier', 1)
         treeherder.setdefault('kind', 'build')
         build_task = None
         signing_task = None
         for dependency in dependencies.keys():
@@ -267,25 +262,26 @@ def _generate_task_env(task, build_platf
         }
     elif build_platform.startswith('win'):
         task_env = {
             'SIGNED_ZIP': {'task-reference': '{}target.zip'.format(signed_prefix)},
             'SIGNED_SETUP': {'task-reference': '{}setup.exe'.format(signed_prefix)},
             'UNSIGNED_MAR': {'task-reference': '{}mar.exe'.format(mar_prefix)},
         }
 
-        use_stub = task.attributes.get('stub-installer')
-        if use_stub:
-            task_env['SIGNED_SETUP_STUB'] = {
-                'task-reference': '{}setup-stub.exe'.format(signed_prefix),
-            }
-        elif '32' in build_platform:
-            # Stub installer is only attempted on win32
+        no_stub = ("mozilla-esr60", "jamun")
+        if project in no_stub:
+            # Stub installer is only generated on win32 and not on esr
             task_env['NO_STUB_INSTALLER'] = '1'
-
+        else:
+            # Stub installer is only generated on win32
+            if '32' in build_platform:
+                task_env['SIGNED_SETUP_STUB'] = {
+                    'task-reference': '{}setup-stub.exe'.format(signed_prefix),
+                }
         return task_env
 
     raise NotImplementedError('Unsupported build_platform: "{}"'.format(build_platform))
 
 
 def _generate_task_output_files(task, build_platform, locale=None, project=None):
     locale_output_path = '{}/'.format(locale) if locale else ''
     artifact_prefix = get_artifact_prefix(task)
@@ -312,18 +308,19 @@ def _generate_task_output_files(task, bu
             'path': '{}/{}target.installer.exe'.format(artifact_prefix, locale_output_path),
             'name': '{}/{}target.installer.exe'.format(artifact_prefix, locale_output_path),
         }, {
             'type': 'file',
             'path': '{}/{}target.complete.mar'.format(artifact_prefix, locale_output_path),
             'name': '{}/{}target.complete.mar'.format(artifact_prefix, locale_output_path),
         }]
 
-        use_stub = task.attributes.get('stub-installer')
-        if use_stub:
+        # Stub installer is only generated on win32 and not on esr
+        no_stub = ("mozilla-esr60", "jamun")
+        if 'win32' in build_platform and project not in no_stub:
             output_files.append({
                 'type': 'file',
                 'path': '{}/{}target.stub-installer.exe'.format(
                     artifact_prefix, locale_output_path
                 ),
                 'name': '{}/{}target.stub-installer.exe'.format(
                     artifact_prefix, locale_output_path
                 ),
--- a/taskcluster/taskgraph/transforms/repackage_signing.py
+++ b/taskcluster/taskgraph/transforms/repackage_signing.py
@@ -44,56 +44,53 @@ def validate(config, jobs):
             "In repackage-signing ({!r} kind) task for {!r}:".format(config.kind, label))
         yield job
 
 
 @transforms.add
 def make_repackage_signing_description(config, jobs):
     for job in jobs:
         dep_job = job['dependent-task']
-        attributes = copy_attributes_from_dependent_job(dep_job)
-        attributes['repackage_type'] = 'repackage-signing'
+        attributes = dep_job.attributes
 
         treeherder = job.get('treeherder', {})
-        if attributes.get('nightly'):
-            treeherder.setdefault('symbol', 'rs(N)')
-        else:
-            treeherder.setdefault('symbol', 'rs(B)')
+        treeherder.setdefault('symbol', 'rs(N)')
         dep_th_platform = dep_job.task.get('extra', {}).get(
             'treeherder', {}).get('machine', {}).get('platform', '')
         treeherder.setdefault('platform',
                               "{}/opt".format(dep_th_platform))
         treeherder.setdefault('tier', 1)
         treeherder.setdefault('kind', 'build')
 
         label = job['label']
+        description = (
+            "Signing of repackaged artifacts for locale '{locale}' for build '"
+            "{build_platform}/{build_type}'".format(
+                locale=attributes.get('locale', 'en-US'),
+                build_platform=attributes.get('build_platform'),
+                build_type=attributes.get('build_type')
+            )
+        )
 
         dependencies = {"repackage": dep_job.label}
 
         signing_dependencies = dep_job.dependencies
         # This is so we get the build task etc in our dependencies to
         # have better beetmover support.
         dependencies.update({k: v for k, v in signing_dependencies.items()
                              if k != 'docker-image'})
+        attributes = copy_attributes_from_dependent_job(dep_job)
+        attributes['repackage_type'] = 'repackage-signing'
 
         locale_str = ""
         if dep_job.attributes.get('locale'):
             treeherder['symbol'] = 'rs({})'.format(dep_job.attributes.get('locale'))
             attributes['locale'] = dep_job.attributes.get('locale')
             locale_str = "{}/".format(dep_job.attributes.get('locale'))
 
-        description = (
-            "Signing of repackaged artifacts for locale '{locale}' for build '"
-            "{build_platform}/{build_type}'".format(
-                locale=attributes.get('locale', 'en-US'),
-                build_platform=attributes.get('build_platform'),
-                build_type=attributes.get('build_type')
-            )
-        )
-
         build_platform = dep_job.attributes.get('build_platform')
         is_nightly = dep_job.attributes.get('nightly')
         signing_cert_scope = get_signing_cert_scope_per_platform(
             build_platform, is_nightly, config
         )
         scopes = [signing_cert_scope, add_scope_prefix(config, 'signing:format:mar_sha384')]
 
         upstream_artifacts = [{
@@ -110,18 +107,20 @@ def make_repackage_signing_description(c
                 "taskType": "repackage",
                 "paths": [
                     get_artifact_path(dep_job, "{}target.installer.exe".format(locale_str)),
                 ],
                 "formats": ["sha2signcode"]
             })
             scopes.append(add_scope_prefix(config, "signing:format:sha2signcode"))
 
-            use_stub = attributes.get('stub-installer')
-            if use_stub:
+            # Stub installer is only generated on win32 and not on esr
+            no_stub = ("mozilla-esr60", "jamun")
+            if 'win32' in build_platform and not config.params["project"] in no_stub:
+                # TODO: fix the project hint to be a better design
                 upstream_artifacts.append({
                     "taskId": {"task-reference": "<repackage>"},
                     "taskType": "repackage",
                     "paths": [
                         get_artifact_path(
                             dep_job, "{}target.stub-installer.exe".format(locale_str)
                         ),
                     ],
--- a/taskcluster/taskgraph/transforms/task.py
+++ b/taskcluster/taskgraph/transforms/task.py
@@ -586,17 +586,16 @@ V2_NIGHTLY_L10N_TEMPLATES = [
     "index.{trust-domain}.v2.{project}.nightly.{build_date}.revision.{branch_rev}.{product}-l10n.{job-name}.{locale}",  # noqa - too long
     "index.{trust-domain}.v2.{project}.nightly.{build_date}.latest.{product}-l10n.{job-name}.{locale}",  # noqa - too long
     "index.{trust-domain}.v2.{project}.nightly.revision.{branch_rev}.{product}-l10n.{job-name}.{locale}",  # noqa - too long
 ]
 
 V2_L10N_TEMPLATES = [
     "index.{trust-domain}.v2.{project}.revision.{branch_rev}.{product}-l10n.{job-name}.{locale}",
     "index.{trust-domain}.v2.{project}.pushdate.{build_date_long}.{product}-l10n.{job-name}.{locale}",  # noqa - too long
-    "index.{trust-domain}.v2.{project}.pushlog-id.{pushlog_id}.{product}-l10n.{job-name}.{locale}",
     "index.{trust-domain}.v2.{project}.latest.{product}-l10n.{job-name}.{locale}",
 ]
 
 # the roots of the treeherder routes
 TREEHERDER_ROUTE_ROOT = 'tc-treeherder'
 
 
 def get_branch_rev(config):
@@ -1408,18 +1407,16 @@ def add_nightly_l10n_index_routes(config
     routes = task.setdefault('routes', [])
 
     verify_index(config, index)
 
     subs = config.params.copy()
     subs['job-name'] = index['job-name']
     subs['build_date_long'] = time.strftime("%Y.%m.%d.%Y%m%d%H%M%S",
                                             time.gmtime(config.params['build_date']))
-    subs['build_date'] = time.strftime("%Y.%m.%d",
-                                       time.gmtime(config.params['build_date']))
     subs['product'] = index['product']
     subs['trust-domain'] = config.graph_config['trust-domain']
     subs['branch_rev'] = get_branch_rev(config)
 
     locales = task['attributes'].get('chunk_locales',
                                      task['attributes'].get('all_locales'))
     # Some tasks has only one locale set
     if task['attributes'].get('locale'):
@@ -1431,16 +1428,18 @@ def add_nightly_l10n_index_routes(config
 
     if not locales:
         raise Exception("Error: Unable to use l10n index for tasks without locales")
 
     for locale in locales:
         for tpl in V2_NIGHTLY_L10N_TEMPLATES:
             routes.append(tpl.format(locale=locale, **subs))
 
+    # Add locales at old route too
+    task = add_l10n_index_routes(config, task, force_locale=force_locale)
     return task
 
 
 @transforms.add
 def add_index_routes(config, tasks):
     for task in tasks:
         index = task.get('index', {})
 
--- a/taskcluster/taskgraph/util/attributes.py
+++ b/taskcluster/taskgraph/util/attributes.py
@@ -32,17 +32,16 @@ RELEASE_PROMOTION_PROJECTS = {
 
 _OPTIONAL_ATTRIBUTES = (
     'artifact_prefix',
     'l10n_chunk',
     'nightly',
     'signed',
     'shipping_phase',
     'shipping_product',
-    'stub-installer',
 )
 
 
 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/taskcluster/taskgraph/util/signed_artifacts.py
+++ b/taskcluster/taskgraph/util/signed_artifacts.py
@@ -10,20 +10,20 @@ from taskgraph.util.taskcluster import g
 
 
 def is_partner_kind(kind):
     if kind and kind.startswith(('release-partner', 'release-eme-free')):
         return True
 
 
 def generate_specifications_of_artifacts_to_sign(
-    task, keep_locale_template=True, kind=None
+    task, keep_locale_template=True, kind=None, project=None
 ):
     build_platform = task.attributes.get('build_platform')
-    use_stub = task.attributes.get('stub-installer')
+    is_nightly = task.attributes.get('nightly')
     if kind == 'release-source-signing':
         artifacts_specifications = [{
             'artifacts': [
                 get_artifact_path(task, 'source.tar.xz')
             ],
             'formats': ['gpg'],
         }]
     elif 'android' in build_platform:
@@ -51,18 +51,20 @@ def generate_specifications_of_artifacts
             ],
             'formats': ['sha2signcode'],
         }, {
             'artifacts': [
                 get_artifact_path(task, '{locale}/target.zip'),
             ],
             'formats': ['sha2signcode', 'widevine'],
         }]
-
-        if use_stub:
+        no_stub = ("mozilla-esr60", "jamun")
+        if 'win32' in build_platform and is_nightly and project not in no_stub:
+            # TODO: fix the project hint to be a better design
+            # We don't build stub installer on esr, so we don't want to sign it
             artifacts_specifications[0]['artifacts'] += [
                 get_artifact_path(task, '{locale}/setup-stub.exe')
             ]
     elif 'linux' in build_platform:
         artifacts_specifications = [{
             'artifacts': [get_artifact_path(task, '{locale}/target.tar.bz2')],
             'formats': ['gpg', 'widevine'],
         }]
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/try.py
+++ b/testing/mozharness/configs/single_locale/try.py
@@ -1,15 +1,15 @@
 import os
 
 config = {
     "nightly_build": False,
     "branch": "try",
     "en_us_binary_url": "http://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central",
-    "update_channel": "nightly-try",
+    "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar
     "mar_tools_url": os.environ.get(
         "MAR_TOOLS_URL",
         # Default to fetching from ftp rather than setting an environ var