Bug 1050109 - stop build jobs from clobbering/cloning mozharness/tools repos, r=catlee
authorJordan Lund <jlund@mozilla.com>
Thu, 06 Nov 2014 21:32:39 -0800 (2014-11-07)
changeset 11371 b6b8b27e43aed083fc47a7aff4363df6b190197c
parent 11369 87af517fa7aeb63b22e9d95762000c6b9c1f8dfc
child 11372 a9e5d76790991808d3c9d1c62b28b5f06e07f0ca
child 11373 bd6998682ead771b05df99cd091aebdf4c54bf4e
push id8316
push userjlund@mozilla.com
push dateFri, 07 Nov 2014 05:41:46 +0000 (2014-11-07)
reviewerscatlee
bugs1050109
Bug 1050109 - stop build jobs from clobbering/cloning mozharness/tools repos, r=catlee
mozilla/b2g_config.py
mozilla/b2g_project_branches.py
mozilla/config.py
mozilla/project_branches.py
--- a/mozilla/b2g_config.py
+++ b/mozilla/b2g_config.py
@@ -1110,16 +1110,21 @@ PLATFORM_VARS = {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'hamachi', '--config', 'b2g/releng-fota-updates.py',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales',
                            '--config', GLOBAL_VARS['mozharness_configs']['balrog']],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': True,
         'enable_dep': False,
     },
@@ -1127,16 +1132,21 @@ PLATFORM_VARS = {
         'mozharness_config': {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'hamachi', '--config', 'b2g/releng-fota-eng.py',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': False,
         'enable_dep': True,
     },
@@ -1145,16 +1155,21 @@ PLATFORM_VARS = {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'tarako', '--config', 'b2g/releng-fota-updates.py',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales',
                            '--config', GLOBAL_VARS['mozharness_configs']['balrog']],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': False,
         'enable_dep': True,
     },
@@ -1162,16 +1177,21 @@ PLATFORM_VARS = {
         'mozharness_config': {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'tarako', '--config', 'b2g/releng-fota-eng.py',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': False,
         'enable_dep': True,
     },
@@ -1180,20 +1200,23 @@ PLATFORM_VARS = {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'nexus-4', '--config', 'b2g/releng-private-updates.py',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales',
                            '--config', GLOBAL_VARS['mozharness_configs']['balrog']],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
         },
         'env': {
             'PATH': '/tools/python27-mercurial/bin:/tools/python27/bin:/usr/local/bin:/usr/lib64/ccache:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/cltbld/bin',
             'PYTHONPATH': '/tools/python27/lib',
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': True,
         'enable_dep': False,
     },
@@ -1201,20 +1224,23 @@ PLATFORM_VARS = {
         'mozharness_config': {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'nexus-4', '--config', 'b2g/releng-otoro-eng.py',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
         },
         'env': {
             'PATH': '/tools/python27-mercurial/bin:/tools/python27/bin:/usr/local/bin:/usr/lib64/ccache:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/cltbld/bin',
             'PYTHONPATH': '/tools/python27/lib',
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': True,
         'enable_dep': False,
     },
@@ -1223,16 +1249,21 @@ PLATFORM_VARS = {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'helix', '--config', 'b2g/releng-private-updates.py',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales',
                            '--config', GLOBAL_VARS['mozharness_configs']['balrog']],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': True,
         'enable_dep': False,
     },
@@ -1241,16 +1272,21 @@ PLATFORM_VARS = {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'emulator', '--config', 'b2g/releng-emulator.py',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'non_unified_extra_args': ['--non-unified'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'enable_nonunified_build': True,
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'maxTime': 6 * 3600,
     },
@@ -1260,16 +1296,21 @@ PLATFORM_VARS = {
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'emulator', '--config', 'b2g/releng-emulator.py',
                            '--debug',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'non_unified_extra_args': ['--non-unified'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'enable_nonunified_build': True,
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'maxTime': 6 * 3600,
     },
@@ -1278,16 +1319,21 @@ PLATFORM_VARS = {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'emulator-jb', '--config', 'b2g/releng-emulator.py',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'non_unified_extra_args': ['--non-unified'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'enable_nonunified_build': True,
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'maxTime': 6 * 3600,
     },
@@ -1297,16 +1343,21 @@ PLATFORM_VARS = {
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'emulator-jb', '--config', 'b2g/releng-emulator.py',
                            '--debug',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'non_unified_extra_args': ['--non-unified'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'enable_nonunified_build': True,
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'maxTime': 6 * 3600,
     },
@@ -1315,16 +1366,21 @@ PLATFORM_VARS = {
             'script_name': 'scripts/hazard_build.py',
             'extra_args': [
                 '--target', 'emulator-jb',
                 '--config-file', 'b2g/releng-emulator.py',
                 '--b2g-config-dir', 'emulator-jb',
                 '--config-file', 'hazards/common.py',
                 '--config-file', 'hazards/build_b2g.py',
             ],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'maxTime': 6 * 3600,
         'try_by_default': True,
         'consider_for_nightly': False,
@@ -1335,16 +1391,21 @@ PLATFORM_VARS = {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'emulator-kk', '--config', 'b2g/releng-emulator.py',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'non_unified_extra_args': ['--non-unified'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'enable_nonunified_build': True,
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': True,
         'enable_dep': False,
@@ -1356,16 +1417,21 @@ PLATFORM_VARS = {
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'emulator-kk', '--config', 'b2g/releng-emulator.py',
                            '--debug',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'non_unified_extra_args': ['--non-unified'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'enable_nonunified_build': True,
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': True,
         'enable_dep': False,
@@ -1376,16 +1442,21 @@ PLATFORM_VARS = {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             # using releng-otoro since we are not doing nightlies/updates
             'extra_args': ['--target', 'wasabi', '--config', 'b2g/releng-otoro.py',
                            '--gaia-languages-file', 'locales/languages_dev.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': True,
         'enable_dep': False,
     },
@@ -1394,16 +1465,21 @@ PLATFORM_VARS = {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'flame', '--config', 'b2g/releng-private-updates.py',
                            '--gaia-languages-file', 'locales/languages_all.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales',
                            '--config', GLOBAL_VARS['mozharness_configs']['balrog']],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': True,
         'enable_dep': False,
     },
@@ -1411,16 +1487,21 @@ PLATFORM_VARS = {
         'mozharness_config': {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'flame', '--config', 'b2g/releng-otoro-eng.py',
                            '--gaia-languages-file', 'locales/languages_all.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': False,
         'enable_dep': True,
     },
@@ -1482,16 +1563,21 @@ PLATFORM_VARS = {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'dolphin', '--config', 'b2g/releng-private-updates.py',
                            '--gaia-languages-file', 'locales/languages_all.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales',
                            '--config', GLOBAL_VARS['mozharness_configs']['balrog']],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': True,
         'enable_dep': False,
     },
@@ -1499,16 +1585,21 @@ PLATFORM_VARS = {
         'mozharness_config': {
             'script_name': 'scripts/b2g_build.py',
             # b2g_build.py will checkout gecko from hg and look up a tooltool manifest given by the
             # --target name below
             'extra_args': ['--target', 'dolphin', '--config', 'b2g/releng-otoro-eng.py',
                            '--gaia-languages-file', 'locales/languages_all.json',
                            '--gecko-languages-file', 'gecko/b2g/locales/all-locales'],
             'reboot_command': ['bash', '-c', 'sudo reboot; sleep 600'],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
+        },
+        'env': {
+            'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         },
         'stage_product': 'b2g',
         'product_name': 'b2g',
         'base_name': builder_prefix + '_%(branch)s_%(platform)s',
         'slaves': SLAVES['mock'],
         'enable_periodic': True,
         'enable_dep': False,
     },
--- a/mozilla/b2g_project_branches.py
+++ b/mozilla/b2g_project_branches.py
@@ -37,16 +37,17 @@ PROJECT_BRANCHES = {
     #},
     #####  TWIGS aka RENTABLE BRANCHES
     # Booked for Thunderbird
     #'alder': {},
     'ash': {
         'mozharness_repo_path': 'build/ash-mozharness',
         'mozharness_repo': 'https://hg.mozilla.org/build/ash-mozharness',
         'mozharness_tag': 'default',
+        'use_mozharness_repo_cache': False,
     },
     # Not needed on Birch at the moment, bug 977420.
     #'birch': {},
     'cedar': {
         'mozharness_tag': 'default',
     },
     'cypress': {
         'mozharness_tag': 'default',
--- a/mozilla/config.py
+++ b/mozilla/config.py
@@ -35,16 +35,17 @@ GLOBAL_VARS = {
     'balrog_credentials_file': 'BuildSlaves.py',
     'hg_username': 'ffxbld',
     'hg_ssh_key': '~cltbld/.ssh/ffxbld_rsa',
     'graph_selector': '/server/collect.cgi',
     'compare_locales_repo_path': 'build/compare-locales',
     'compare_locales_tag': 'RELEASE_AUTOMATION',
     'mozharness_repo_path': 'build/mozharness',
     'mozharness_tag': 'production',
+    'use_mozharness_repo_cache': True,  # ash overwrites this
     'multi_locale_merge': True,
     'default_build_space': 5,
     'default_l10n_space': 3,
     'default_clobber_time': 24*7,  # 1 week
     'unittest_suites': [
         ('mochitest', dict(suite='mochitest-plain', chunkByDir=4, totalChunks=5)),
         ('mochitest-browser-chrome', ['mochitest-browser-chrome']),
         ('mochitest-other', ['mochitest-chrome', 'mochitest-a11y', 'mochitest-ipcplugins']),
@@ -124,16 +125,17 @@ GLOBAL_VARS = {
         'pgo': ['--enable-pgo'],
     },
     # list platforms with mozharness l10n repacks enabled.
     # mozharness repacks will be enabled per branch
     'mozharness_desktop_l10n_platforms': [
         'linux', 'linux64', 'macosx64'
     ],
     # bug 1027890: excluding win32/win64 for now
+
 }
 GLOBAL_VARS.update(localconfig.GLOBAL_VARS.copy())
 
 # shorthand, because these are used often
 OBJDIR = GLOBAL_VARS['objdir']
 SYMBOL_SERVER_PATH = GLOBAL_VARS['symbol_server_path']
 SYMBOL_SERVER_POST_UPLOAD_CMD = GLOBAL_VARS['symbol_server_post_upload_cmd']
 SYMBOL_SERVER_MOBILE_PATH = GLOBAL_VARS['symbol_server_mobile_path']
@@ -142,18 +144,22 @@ GLOBAL_ENV = {
     'MOZ_CRASHREPORTER_NO_REPORT': '1',
     'TINDERBOX_OUTPUT': '1',
     'MOZ_AUTOMATION': '1',
 }
 
 PLATFORM_VARS = {
         'linux': {
             'mozharness_python': '/tools/buildbot/bin/python',
-            'reboot_command': ['scripts/external_tools/count_and_reboot.py',
-                               '-f', '../reboot_count.txt', '-n', '1', '-z'],
+            'reboot_command': [
+                '/tools/checkouts/mozharness/external_tools/count_and_reboot.py',
+                '-f', '../reboot_count.txt', '-n', '1', '-z'
+            ],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
             'mozharness_desktop_build': {
                 'script_name': 'scripts/fx_desktop_build.py',
                 'extra_args': [
                     '--config', 'builds/releng_base_linux_32_builds.py',
                 ],
                 'script_timeout': 3 * 3600,
                 'script_maxtime': int(5.5 * 3600),
             },
@@ -256,18 +262,22 @@ PLATFORM_VARS = {
                 ('/home/cltbld/.boto', '/builds/.boto'),
                 ('/builds/gapi.data', '/builds/gapi.data'),
                 ('/tools/tooltool.py', '/builds/tooltool.py'),
                 ('/builds/google-oauth-api.key', '/builds/google-oauth-api.key'),
             ],
         },
         'linux64': {
             'mozharness_python': '/tools/buildbot/bin/python',
-            'reboot_command': ['scripts/external_tools/count_and_reboot.py',
-                               '-f', '../reboot_count.txt', '-n', '1', '-z'],
+            'reboot_command': [
+                '/tools/checkouts/mozharness/external_tools/count_and_reboot.py',
+                '-f', '../reboot_count.txt', '-n', '1', '-z'
+            ],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
             'mozharness_desktop_build': {
                 'script_name': 'scripts/fx_desktop_build.py',
                 'extra_args': [
                     '--config', 'builds/releng_base_linux_64_builds.py',
                 ],
                 'script_timeout': 3 * 3600,
                 'script_maxtime': int(5.5 * 3600),
             },
@@ -359,18 +369,22 @@ PLATFORM_VARS = {
                 ('/home/cltbld/.boto', '/builds/.boto'),
                 ('/builds/gapi.data', '/builds/gapi.data'),
                 ('/tools/tooltool.py', '/builds/tooltool.py'),
                 ('/builds/google-oauth-api.key', '/builds/google-oauth-api.key'),
             ],
         },
         'linux64-asan': {
             'mozharness_python': '/tools/buildbot/bin/python',
-            'reboot_command': ['scripts/external_tools/count_and_reboot.py',
-                               '-f', '../reboot_count.txt','-n', '1', '-z'],
+            'reboot_command': [
+                '/tools/checkouts/mozharness/external_tools/count_and_reboot.py',
+                '-f', '../reboot_count.txt', '-n', '1', '-z'
+            ],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
             'mozharness_desktop_build': {
                 'script_name': 'scripts/fx_desktop_build.py',
                 'extra_args': [
                     '--config', 'builds/releng_base_linux_64_builds.py',
                     '--custom-build-variant-cfg', 'asan',
                 ],
                 'script_timeout': 3 * 3600,
                 'script_maxtime': int(5.5 * 3600),
@@ -451,18 +465,22 @@ PLATFORM_VARS = {
                 ('/builds/google-oauth-api.key', '/builds/google-oauth-api.key'),
             ],
             # The status of this build doesn't affect the last good revision
             # algorithm for nightlies
             'consider_for_nightly': False,
         },
         'linux64-asan-debug': {
             'mozharness_python': '/tools/buildbot/bin/python',
-            'reboot_command': ['scripts/external_tools/count_and_reboot.py',
-                               '-f', '../reboot_count.txt','-n', '1', '-z'],
+            'reboot_command': [
+                '/tools/checkouts/mozharness/external_tools/count_and_reboot.py',
+                '-f', '../reboot_count.txt', '-n', '1', '-z'
+            ],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
             'mozharness_desktop_build': {
                 'script_name': 'scripts/fx_desktop_build.py',
                 'extra_args': [
                     '--config', 'builds/releng_base_linux_64_builds.py',
                     '--custom-build-variant-cfg', 'asan-and-debug',
                 ],
                 'script_timeout': 3 * 3600,
                 'script_maxtime': int(5.5 * 3600),
@@ -544,18 +562,22 @@ PLATFORM_VARS = {
                 ('/builds/google-oauth-api.key', '/builds/google-oauth-api.key'),
             ],
             # The status of this build doesn't affect the last good revision
             # algorithm for nightlies
             'consider_for_nightly': False,
         },
         'linux64-st-an-debug': {
             'mozharness_python': '/tools/buildbot/bin/python',
-            'reboot_command': ['scripts/external_tools/count_and_reboot.py',
-                               '-f', '../reboot_count.txt','-n', '1', '-z'],
+            'reboot_command': [
+                '/tools/checkouts/mozharness/external_tools/count_and_reboot.py',
+                '-f', '../reboot_count.txt', '-n', '1', '-z'
+            ],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
             'mozharness_desktop_build': {
                 'script_name': 'scripts/fx_desktop_build.py',
                 'extra_args': [
                     '--config', 'builds/releng_base_linux_64_builds.py',
                     '--custom-build-variant-cfg', 'stat-and-debug',
                 ],
                 'script_timeout': 3 * 3600,
                 'script_maxtime': int(5.5 * 3600),
@@ -642,34 +664,44 @@ PLATFORM_VARS = {
         },
         'linux64-sh-haz': {
             'mozharness_config': {
                 'script_name': 'scripts/spidermonkey_build.py',
                 'extra_args': [
                     '--config-file', 'hazards/build_shell.py',
                     '--config-file', 'hazards/common.py',
                 ],
+                'mozharness_repo_cache': '/tools/checkouts/mozharness',
+                'tools_repo_cache': '/tools/checkouts/build-tools',
+            },
+            'env': {
+                'HG_SHARE_BASE_DIR': '/builds/hg-shared',
             },
             'stage_product': 'firefox',
             'product_name': 'firefox',
             'base_name': '%(platform)s_%(branch)s',
             'slaves': SLAVES['mock'],
             'try_by_default': False,
             'consider_for_nightly': False,
             'mock_target': 'mozilla-centos6-x86_64',
         },
         'linux64-br-haz': {
             'mozharness_config': {
                 'script_name': 'scripts/spidermonkey_build.py',
                 'extra_args': [
                     '--config-file', 'hazards/build_browser.py',
                     '--config-file', 'hazards/common.py',
                 ],
+                'mozharness_repo_cache': '/tools/checkouts/mozharness',
+                'tools_repo_cache': '/tools/checkouts/build-tools',
             },
 
+            'env': {
+                'HG_SHARE_BASE_DIR': '/builds/hg-shared',
+            },
             'stage_product': 'firefox',
             'product_name': 'firefox',
             'base_name': '%(platform)s_%(branch)s',
             'slaves': SLAVES['mock'],
             'try_by_default': True,
             'consider_for_nightly': False,
             'mock_target': 'mozilla-centos6-x86_64',
         },
@@ -987,18 +1019,22 @@ PLATFORM_VARS = {
             # algorithm for nightlies
             'consider_for_nightly': False,
             'tooltool_manifest_src': 'browser/config/tooltool-manifests/win64/releng.manifest',
             'tooltool_l10n_manifest_src': 'browser/config/tooltool-manifests/win64/l10n.manifest',
             'tooltool_script': ['python', '/c/mozilla-build/tooltool.py'],
         },
         'linux-debug': {
             'mozharness_python': '/tools/buildbot/bin/python',
-            'reboot_command': ['scripts/external_tools/count_and_reboot.py',
-                               '-f', '../reboot_count.txt','-n', '1', '-z'],
+            'reboot_command': [
+                '/tools/checkouts/mozharness/external_tools/count_and_reboot.py',
+                '-f', '../reboot_count.txt', '-n', '1', '-z'
+            ],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
             'mozharness_desktop_build': {
                 'script_name': 'scripts/fx_desktop_build.py',
                 'extra_args': [
                     '--config', 'builds/releng_base_linux_32_builds.py',
                     '--custom-build-variant-cfg', 'debug',
                 ],
                 'script_timeout': 3 * 3600,
                 'script_maxtime': int(5.5 * 3600),
@@ -1086,18 +1122,22 @@ PLATFORM_VARS = {
                 ('/home/cltbld/.hgrc', '/builds/.hgrc'),
                 ('/home/cltbld/.boto', '/builds/.boto'),
                 ('/builds/gapi.data', '/builds/gapi.data'),
                 ('/builds/google-oauth-api.key', '/builds/google-oauth-api.key'),
             ],
         },
         'linux64-debug': {
             'mozharness_python': '/tools/buildbot/bin/python',
-            'reboot_command': ['scripts/external_tools/count_and_reboot.py',
-                               '-f', '../reboot_count.txt','-n', '1', '-z'],
+            'reboot_command': [
+                '/tools/checkouts/mozharness/external_tools/count_and_reboot.py',
+                '-f', '../reboot_count.txt', '-n', '1', '-z'
+            ],
+            'mozharness_repo_cache': '/tools/checkouts/mozharness',
+            'tools_repo_cache': '/tools/checkouts/build-tools',
             'mozharness_desktop_build': {
                 'script_name': 'scripts/fx_desktop_build.py',
                 'extra_args': [
                     '--config', 'builds/releng_base_linux_64_builds.py',
                     '--custom-build-variant-cfg', 'debug',
                 ],
                 'script_timeout': 3 * 3600,
                 'script_maxtime': int(5.5 * 3600),
--- a/mozilla/project_branches.py
+++ b/mozilla/project_branches.py
@@ -142,16 +142,17 @@ PROJECT_BRANCHES = {
     },
     'ash': {
         'enable_perproduct_builds': False,
         'desktop_mozharness_repacks_enabled': True,
         'enable_nightly': True,
         'mozharness_repo_path': 'build/ash-mozharness',
         'mozharness_repo': 'https://hg.mozilla.org/build/ash-mozharness',
         'mozharness_tag': 'default',
+        'use_mozharness_repo_cache': False,
         'lock_platforms': True,
         'talos_suites': {
             'xperf': 1,
         },
         'platforms': {
             'linux': {},
             'linux64': {},
             'win32': {},