Bug 1361436 - Emit build stats immediately after build; r=ted
authorGregory Szorc <gps@mozilla.com>
Tue, 02 May 2017 14:32:52 -0700
changeset 390578 2877aa1e02c88562d144d9c4b211a01459470359
parent 390577 ba61a05620e4d2a0d85a63461d49c8ca9ce8b4e1
child 390579 fe781f252ec489c95b76b4bcf87ee72c34e841c6
push id51
push userfmarier@mozilla.com
push dateFri, 05 May 2017 18:41:45 +0000
reviewersted
bugs1361436, 1304508
milestone55.0a1
Bug 1361436 - Emit build stats immediately after build; r=ted The "generate-build-stats" mozharness action collects a bunch of build system metrics, including build_resources.json, ctors count, and installer size and reports them by writing special messages that log parsers read. Before this commit, this mozharness action occurred sometime after "build." But relative ordering to other actions was not consistent and appears to be significantly cargo culted. 4e61e69a383c (bug 1304508) changed the "check" mozharness action to invoke `mach build check` instead of `make` directly. An unintended consequence of this is that `mach build` replaced the build_resources.json file from the build itself with one measuring `make check`. This made the "build time summary" metric take a nose dive. This commit works around the issue introduced by 4e61e69a383c by reordering the mozharness actions so "generate-build-stats" follows immediately after the "build" action. Not only does it now occur before the "check" action, but it also occurs before uploading and other actions. I'm not sure why "generate-build-stats" is its own action and not part of "build" itself. As the diff shows, numerous instances of "generate-build-stats" are commented out, which means we aren't collecting metrics. "generate-build-stats" is also missing from a handful of mozharness configs, including Windows Clang builds. I'm not sure what the history is (it is likely varied and almost certainly involves a fair amount of cargo culting), but I think it is a bug that we aren't collecting build metrics for every build. I would like to fix this. And moving "generate-build-stats" immediately after "build" should make that transition easier. MozReview-Commit-ID: 7jNTVWRvMnh
taskcluster/ci/build/linux.yml
taskcluster/ci/valgrind/kind.yml
testing/mozharness/configs/builds/releng_base_android_64_builds.py
testing/mozharness/configs/builds/releng_base_linux_32_builds.py
testing/mozharness/configs/builds/releng_base_linux_64_builds.py
testing/mozharness/configs/builds/releng_base_mac_64_builds.py
testing/mozharness/configs/builds/releng_base_windows_32_builds.py
testing/mozharness/configs/builds/releng_base_windows_64_builds.py
testing/mozharness/configs/builds/releng_sub_linux_configs/32_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/32_qr_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_add-on-devel.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_artifact.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_and_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc_and_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug_artifact.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_qr_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_stylo.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_stylo_debug.py
testing/mozharness/configs/builds/releng_sub_linux_configs/64_valgrind.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_add-on-devel.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_qr_debug.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_debug.py
testing/mozharness/configs/builds/releng_sub_mac_configs/64_stat_and_debug.py
testing/mozharness/configs/builds/releng_sub_windows_configs/32_add-on-devel.py
testing/mozharness/configs/builds/releng_sub_windows_configs/32_debug.py
testing/mozharness/configs/builds/releng_sub_windows_configs/64_add-on-devel.py
testing/mozharness/configs/builds/releng_sub_windows_configs/64_debug.py
testing/mozharness/configs/builds/taskcluster_firefox_win32_qr_debug.py
testing/mozharness/configs/builds/taskcluster_firefox_win32_qr_opt.py
testing/mozharness/configs/builds/taskcluster_firefox_windows_32_addondevel.py
testing/mozharness/configs/builds/taskcluster_firefox_windows_32_debug.py
testing/mozharness/configs/builds/taskcluster_firefox_windows_32_opt.py
testing/mozharness/configs/builds/taskcluster_firefox_windows_64_addondevel.py
testing/mozharness/configs/builds/taskcluster_firefox_windows_64_debug.py
testing/mozharness/configs/builds/taskcluster_firefox_windows_64_opt.py
testing/mozharness/scripts/fx_desktop_build.py
--- a/taskcluster/ci/build/linux.yml
+++ b/taskcluster/ci/build/linux.yml
@@ -7,17 +7,17 @@ linux64/opt:
         platform: linux64/opt
         symbol: tc(B)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
 
@@ -31,17 +31,17 @@ linux64/pgo:
         symbol: tc(B)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     coalesce-name: linux64-pgo
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         options: [enable-pgo]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
@@ -55,17 +55,17 @@ linux64/debug:
         platform: linux64/debug
         symbol: tc(B)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: debug
         tooltool-downloads: public
         need-xvfb: true
@@ -79,17 +79,17 @@ linux64-devedition/opt:
         platform: linux64-devedition/opt
         symbol: tc(B)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
         custom-build-variant-cfg: devedition
@@ -105,17 +105,17 @@ linux/opt:
         symbol: tc(B)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     coalesce-name: opt_linux32
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_32_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
 
@@ -129,17 +129,17 @@ linux/debug:
         symbol: tc(B)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     coalesce-name: dbg_linux32
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_32_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: debug
         tooltool-downloads: public
         need-xvfb: true
@@ -154,17 +154,17 @@ linux/pgo:
         symbol: tc(B)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     coalesce-name: linux32-pgo
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         options: [enable-pgo]
         config:
             - builds/releng_base_linux_32_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
@@ -178,17 +178,17 @@ linux-devedition/opt:
         platform: linux32-devedition/opt
         symbol: tc(B)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_32_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
         custom-build-variant-cfg: devedition
@@ -206,17 +206,17 @@ linux-nightly/opt:
         platform: linux32/opt
         symbol: tc(N)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_32_builds.py
             - disable_signing.py
             - taskcluster_nightly.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
@@ -231,17 +231,17 @@ linux64-asan/opt:
         platform: linux64/asan
         symbol: tc(Bo)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: asan-tc
         tooltool-downloads: public
         need-xvfb: true
@@ -255,17 +255,17 @@ linux64-asan/debug:
         platform: linux64/asan
         symbol: tc(Bd)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: asan-tc-and-debug
         tooltool-downloads: public
         need-xvfb: true
@@ -282,17 +282,17 @@ linux64-nightly/opt:
         platform: linux64/opt
         symbol: tc(N)
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - disable_signing.py
             - taskcluster_nightly.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
@@ -307,17 +307,17 @@ linux64-stylo/opt:
         symbol: tc(B)
         tier: 2
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 3600
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: stylo
         tooltool-downloads: public
     run-on-projects: [ 'stylo', 'autoland', 'mozilla-inbound', 'mozilla-central', 'try' ]
@@ -332,17 +332,17 @@ linux64-stylo/debug:
         symbol: tc(B)
         tier: 2
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 3600
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: stylo-debug
         tooltool-downloads: public
     run-on-projects: [ 'stylo', 'autoland', 'mozilla-inbound', 'mozilla-central', 'try' ]
@@ -358,17 +358,17 @@ linux64-jsdcov/opt:
         tier: 2
     run-on-projects: [ ]
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
 
@@ -384,17 +384,17 @@ linux64-ccov/opt:
         tier: 2
     run-on-projects: [ ]
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: code-coverage
         tooltool-downloads: public
         need-xvfb: true
@@ -409,17 +409,17 @@ linux64-add-on-devel/opt:
         symbol: tc(B)
         tier: 2
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: add-on-devel
         tooltool-downloads: public
         need-xvfb: true
@@ -435,17 +435,17 @@ linux64-qr/debug:
         symbol: tc(B)
         tier: 2
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: qr-debug
         tooltool-downloads: public
         need-xvfb: true
@@ -461,17 +461,17 @@ linux64-qr/opt:
         symbol: tc(B)
         tier: 2
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_64_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: qr-opt
         tooltool-downloads: public
         need-xvfb: true
@@ -487,17 +487,17 @@ linux-qr/opt:
         symbol: tc(B)
         tier: 2
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_32_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: qr-opt
         tooltool-downloads: public
         need-xvfb: true
@@ -514,17 +514,17 @@ linux-qr/debug:
         tier: 2
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         implementation: docker-worker
         max-run-time: 36000
     coalesce-name: dbg_linux32
     run:
         using: mozharness
-        actions: [get-secrets build check-test generate-build-stats update]
+        actions: [get-secrets build generate-build-stats check-test update]
         config:
             - builds/releng_base_linux_32_builds.py
             - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: qr-debug
         tooltool-downloads: public
         need-xvfb: true
--- a/taskcluster/ci/valgrind/kind.yml
+++ b/taskcluster/ci/valgrind/kind.yml
@@ -22,17 +22,17 @@ jobs:
             tier: 1
         worker-type: aws-provisioner-v1/gecko-{level}-b-linux
         worker:
             implementation: docker-worker
             docker-image: {in-tree: desktop-build}
             max-run-time: 72000
         run:
             using: mozharness
-            actions: [get-secrets build valgrind-test generate-build-stats]
+            actions: [get-secrets build generate-build-stats valgrind-test]
             custom-build-variant-cfg: valgrind
             config:
                 - builds/releng_base_linux_64_builds.py
                 - balrog/production.py
             script: "mozharness/scripts/fx_desktop_build.py"
             secrets: true
             tooltool-downloads: public
             need-xvfb: true
--- a/testing/mozharness/configs/builds/releng_base_android_64_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_android_64_builds.py
@@ -6,20 +6,20 @@ config = {
 
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        'generate-build-stats',
         'upload-files',
         'sendchange',
         'multi-l10n',
-        'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     "buildbot_json_path": "buildprops.json",
     'exes': {
         "buildbot": "/tools/buildbot/bin/buildbot",
     },
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
--- a/testing/mozharness/configs/builds/releng_base_linux_32_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_linux_32_builds.py
@@ -10,20 +10,20 @@ config = {
 
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     "buildbot_json_path": "buildprops.json",
     'exes': {
         "buildbot": "/tools/buildbot/bin/buildbot",
     },
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
--- a/testing/mozharness/configs/builds/releng_base_linux_64_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_linux_64_builds.py
@@ -9,20 +9,20 @@ config = {
     # releng_base_linux_64_builds.py
 
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     "buildbot_json_path": "buildprops.json",
     'exes': {
         "buildbot": "/tools/buildbot/bin/buildbot",
     },
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
--- a/testing/mozharness/configs/builds/releng_base_mac_64_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_mac_64_builds.py
@@ -6,20 +6,20 @@ config = {
     ######## MACOSX GENERIC CONFIG KEYS/VAlUES
 
     'default_actions': [
         'clobber',
         'clone-tools',
         # 'setup-mock',
         'checkout-sources',
         'build',
+        'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     "buildbot_json_path": "buildprops.json",
     'exes': {
         'python2.7': sys.executable,
         "buildbot": "/tools/buildbot/bin/buildbot",
     },
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
--- a/testing/mozharness/configs/builds/releng_base_windows_32_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_windows_32_builds.py
@@ -10,20 +10,20 @@ config = {
     # releng_base_windows_32_builds.py
 
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         # 'setup-mock', windows do not use mock
         'build',
+        'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     "buildbot_json_path": "buildprops.json",
     'exes': {
         'python2.7': sys.executable,
         "buildbot": [
             sys.executable,
             'c:\\mozilla-build\\buildbotve\\scripts\\buildbot'
--- a/testing/mozharness/configs/builds/releng_base_windows_64_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_windows_64_builds.py
@@ -10,20 +10,20 @@ config = {
     # releng_base_windows_64_builds.py
 
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         # 'setup-mock', windows do not use mock
         'build',
+        'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     "buildbot_json_path": "buildprops.json",
     'exes': {
         'python2.7': sys.executable,
         "buildbot": [
             sys.executable,
             'c:\\mozilla-build\\buildbotve\\scripts\\buildbot'
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/32_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/32_debug.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        # 'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'debug_build': True,
     'stage_platform': 'linux-debug',
     'enable_signing': False,
     'enable_talos_sendchange': False,
     #### 32 bit build specific #####
     'env': {
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/32_qr_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/32_qr_debug.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        # 'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'debug_build': True,
     'stage_platform': 'linux-debug',
     'enable_signing': False,
     'enable_talos_sendchange': False,
     #### 32 bit build specific #####
     'env': {
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_add-on-devel.py
@@ -2,20 +2,20 @@ import os
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
 #        'sendchange',
         'check-test',
-        # 'generate-build-stats',
         # 'update',
     ],
     'stage_platform': 'linux64-add-on-devel',
     'publish_nightly_en_US_routes': False,
     'build_type': 'add-on-devel',
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
     'enable_talos_sendchange': False,
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_artifact.py
@@ -3,18 +3,18 @@ import os
 config = {
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'sendchange',
-        # 'generate-build-stats',
     ],
     "buildbot_json_path": "buildprops.json",
     'exes': {
         "buildbot": "/tools/buildbot/bin/buildbot",
     },
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': False,
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        # 'generate-build-stats',
         # 'update',
     ],
     'stage_platform': 'linux64-asan',
     'publish_nightly_en_US_routes': False,
     'build_type': 'asan',
     'tooltool_manifest_src': "browser/config/tooltool-manifests/linux64/\
 asan.manifest",
     'platform_supports_post_upload_to_latest': False,
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_and_debug.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        # 'generate-build-stats',
         # 'update',
     ],
     'stage_platform': 'linux64-asan-debug',
     'publish_nightly_en_US_routes': False,
     'build_type': 'asan-debug',
     'debug_build': True,
     'tooltool_manifest_src': "browser/config/tooltool-manifests/linux64/\
 asan.manifest",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        # 'generate-build-stats',
         # 'update',
     ],
     'stage_platform': 'linux64-asan',
     'publish_nightly_en_US_routes': False,
     'build_type': 'asan',
     'tooltool_manifest_src': "browser/config/tooltool-manifests/linux64/\
 asan.manifest",
     'platform_supports_post_upload_to_latest': False,
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc_and_debug.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        # 'generate-build-stats',
         # 'update',
     ],
     'stage_platform': 'linux64-asan-debug',
     'publish_nightly_en_US_routes': False,
     'build_type': 'asan-debug',
     'debug_build': True,
     'tooltool_manifest_src': "browser/config/tooltool-manifests/linux64/\
 asan.manifest",
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        # 'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'linux64-ccov',
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
     'enable_talos_sendchange': False,
     'enable_count_ctors': False,
     #### 64 bit build specific #####
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        # 'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'linux64-debug',
     'debug_build': True,
     'enable_signing': False,
     'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug_artifact.py
@@ -5,18 +5,18 @@ MOZ_OBJDIR = 'obj-firefox'
 config = {
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'sendchange',
-        # 'generate-build-stats',
     ],
     "buildbot_json_path": "buildprops.json",
     'exes': {
         "buildbot": "/tools/buildbot/bin/buildbot",
     },
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     'enable_ccache': True,
     'vcs_share_base': '/builds/hg-shared',
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_qr_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_qr_debug.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        # 'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'linux64-debug',
     'debug_build': True,
     'enable_signing': False,
     'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_stylo.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_stylo.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        # 'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'linux64-stylo',
     'enable_signing': False,
     'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_stylo_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_stylo_debug.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        # 'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'linux64-stylo-debug',
     'debug_build': True,
     'enable_signing': False,
     'enable_talos_sendchange': False,
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_valgrind.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_valgrind.py
@@ -4,21 +4,21 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         #'setup-mock',
         'build',
+        # 'generate-build-stats',
         #'upload-files',
         #'sendchange',
         'check-test',
         'valgrind-test',
-        #'generate-build-stats',
         #'update',
     ],
     'stage_platform': 'linux64-valgrind',
     'publish_nightly_en_US_routes': False,
     'build_type': 'valgrind',
     'tooltool_manifest_src': "browser/config/tooltool-manifests/linux64/\
 releng.manifest",
     'platform_supports_post_upload_to_latest': False,
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_add-on-devel.py
@@ -2,20 +2,20 @@ import os
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
 #        'setup-mock',
         'build',
+#        'generate-build-stats',
         'upload-files',
 #        'sendchange',
         'check-test',
-#        'generate-build-stats',
 #        'update',
     ],
     'stage_platform': 'macosx64-add-on-devel',
     'publish_nightly_en_US_routes': False,
     'build_type': 'add-on-devel',
     'platform_supports_post_upload_to_latest': False,
     'objdir': 'obj-firefox',
     'enable_signing': False,
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug.py
@@ -4,19 +4,19 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         # 'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
-        # 'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'macosx64-debug',
     'debug_build': True,
     'objdir': 'obj-firefox',
     'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_qr_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_qr_debug.py
@@ -4,19 +4,19 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         # 'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
-        # 'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'macosx64-debug',
     'debug_build': True,
     'objdir': 'obj-firefox',
     'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_debug.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         # 'setup-mock',
         'build',
+        'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'macosx64-debug',
     'debug_build': True,
     'objdir': 'obj-firefox',
     'enable_talos_sendchange': False,
     'enable_unittest_sendchange': False,
     #### 64 bit build specific #####
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_stat_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_stat_and_debug.py
@@ -4,19 +4,19 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         # 'setup-mock',
         'build',
+        # 'generate-build-stats',
         'upload-files',
         'sendchange',
-        # 'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'debug_build': True,
     'stage_platform': 'macosx64-st-an-debug',
     'build_type': 'st-an-debug',
     'tooltool_manifest_src': "browser/config/tooltool-manifests/macosx64/\
 clang.manifest",
     'platform_supports_post_upload_to_latest': False,
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/32_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/32_add-on-devel.py
@@ -2,20 +2,20 @@ import os
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         # 'setup-mock', windows do not use mock
         'build',
+#        'generate-build-stats',
         'upload-files',
 #        'sendchange',
         'check-test',
-#        'generate-build-stats',
 #        'update',
     ],
     'stage_platform': 'win32-add-on-devel',
     'build_type': 'add-on-devel',
     'enable_talos_sendchange': False,
     #### 32 bit build specific #####
     'env': {
         'BINSCOPE': 'C:/Program Files (x86)/Microsoft/SDL BinScope/BinScope.exe',
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/32_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/32_debug.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         # 'setup-mock', windows do not use mock
         'build',
+        'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'win32-debug',
     'debug_build': True,
     'enable_talos_sendchange': False,
     #### 32 bit build specific #####
     'env': {
         'BINSCOPE': 'C:/Program Files (x86)/Microsoft/SDL BinScope/BinScope.exe',
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/64_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/64_add-on-devel.py
@@ -2,20 +2,20 @@ import os
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         # 'setup-mock', windows do not use mock
         'build',
+#        'generate-build-stats',
         'upload-files',
 #        'sendchange',
         'check-test',
-#        'generate-build-stats',
 #        'update',
     ],
     'stage_platform': 'win64-add-on-devel',
     'build_type': 'add-on-devel',
     'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'BINSCOPE': 'C:/Program Files (x86)/Microsoft/SDL BinScope/BinScope.exe',
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/64_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/64_debug.py
@@ -4,20 +4,20 @@ MOZ_OBJDIR = 'obj-firefox'
 
 config = {
     'default_actions': [
         'clobber',
         'clone-tools',
         'checkout-sources',
         # 'setup-mock', windows do not use mock
         'build',
+        'generate-build-stats',
         'upload-files',
         'sendchange',
         'check-test',
-        'generate-build-stats',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'win64-debug',
     'debug_build': True,
     'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'BINSCOPE': 'C:/Program Files (x86)/Microsoft/SDL BinScope/BinScope.exe',
--- a/testing/mozharness/configs/builds/taskcluster_firefox_win32_qr_debug.py
+++ b/testing/mozharness/configs/builds/taskcluster_firefox_win32_qr_debug.py
@@ -14,18 +14,18 @@ config = {
     # - taskcluster_firefox_win32_clang
     # - taskcluster_firefox_win32_clang_debug
     # - taskcluster_firefox_win64_clang
     # - taskcluster_firefox_win64_clang_debug
 
     'default_actions': [
         'clone-tools',
         'build',
+        'generate-build-stats',
         'check-test',
-        'generate-build-stats'
     ],
     'exes': {
         'python2.7': sys.executable,
         'virtualenv': [
             sys.executable,
             os.path.join(
                 os.getcwd(), 'build', 'src', 'python', 'virtualenv', 'virtualenv.py'
             )
--- a/testing/mozharness/configs/builds/taskcluster_firefox_win32_qr_opt.py
+++ b/testing/mozharness/configs/builds/taskcluster_firefox_win32_qr_opt.py
@@ -14,18 +14,18 @@ config = {
     # - taskcluster_firefox_win32_clang
     # - taskcluster_firefox_win32_clang_debug
     # - taskcluster_firefox_win64_clang
     # - taskcluster_firefox_win64_clang_debug
 
     'default_actions': [
         'clone-tools',
         'build',
+        'generate-build-stats',
         'check-test',
-        'generate-build-stats'
     ],
     'exes': {
         'python2.7': sys.executable,
         'virtualenv': [
             sys.executable,
             os.path.join(
                 os.getcwd(), 'build', 'src', 'python', 'virtualenv', 'virtualenv.py'
             )
--- a/testing/mozharness/configs/builds/taskcluster_firefox_windows_32_addondevel.py
+++ b/testing/mozharness/configs/builds/taskcluster_firefox_windows_32_addondevel.py
@@ -14,18 +14,18 @@ config = {
     # - taskcluster_firefox_win32_clang
     # - taskcluster_firefox_win32_clang_debug
     # - taskcluster_firefox_win64_clang
     # - taskcluster_firefox_win64_clang_debug
 
     'default_actions': [
         'clone-tools',
         'build',
+        'generate-build-stats',
         'check-test',
-        'generate-build-stats'
     ],
     'exes': {
         'python2.7': sys.executable,
         'virtualenv': [
             sys.executable,
             os.path.join(
                 os.getcwd(), 'build', 'src', 'python', 'virtualenv', 'virtualenv.py'
             )
--- a/testing/mozharness/configs/builds/taskcluster_firefox_windows_32_debug.py
+++ b/testing/mozharness/configs/builds/taskcluster_firefox_windows_32_debug.py
@@ -14,18 +14,18 @@ config = {
     # - taskcluster_firefox_win32_clang
     # - taskcluster_firefox_win32_clang_debug
     # - taskcluster_firefox_win64_clang
     # - taskcluster_firefox_win64_clang_debug
 
     'default_actions': [
         'clone-tools',
         'build',
+        'generate-build-stats',
         'check-test',
-        'generate-build-stats'
     ],
     'exes': {
         'python2.7': sys.executable,
         'virtualenv': [
             sys.executable,
             os.path.join(
                 os.getcwd(), 'build', 'src', 'python', 'virtualenv', 'virtualenv.py'
             )
--- a/testing/mozharness/configs/builds/taskcluster_firefox_windows_32_opt.py
+++ b/testing/mozharness/configs/builds/taskcluster_firefox_windows_32_opt.py
@@ -14,18 +14,18 @@ config = {
     # - taskcluster_firefox_win32_clang
     # - taskcluster_firefox_win32_clang_debug
     # - taskcluster_firefox_win64_clang
     # - taskcluster_firefox_win64_clang_debug
 
     'default_actions': [
         'clone-tools',
         'build',
+        'generate-build-stats',
         'check-test',
-        'generate-build-stats'
     ],
     'exes': {
         'python2.7': sys.executable,
         'virtualenv': [
             sys.executable,
             os.path.join(
                 os.getcwd(), 'build', 'src', 'python', 'virtualenv', 'virtualenv.py'
             )
--- a/testing/mozharness/configs/builds/taskcluster_firefox_windows_64_addondevel.py
+++ b/testing/mozharness/configs/builds/taskcluster_firefox_windows_64_addondevel.py
@@ -15,18 +15,18 @@ config = {
     # - taskcluster_firefox_win32_clang_debug
     # - taskcluster_firefox_win64_clang
     # - taskcluster_firefox_win64_clang_debug
     # - taskcluster_firefox_win64_addonsdevel
 
     'default_actions': [
         'clone-tools',
         'build',
+        'generate-build-stats',
         'check-test',
-        'generate-build-stats'
     ],
     'exes': {
         'python2.7': sys.executable,
         'virtualenv': [
             sys.executable,
             os.path.join(
                 os.getcwd(), 'build', 'src', 'python', 'virtualenv', 'virtualenv.py'
             )
--- a/testing/mozharness/configs/builds/taskcluster_firefox_windows_64_debug.py
+++ b/testing/mozharness/configs/builds/taskcluster_firefox_windows_64_debug.py
@@ -14,18 +14,18 @@ config = {
     # - taskcluster_firefox_win32_clang
     # - taskcluster_firefox_win32_clang_debug
     # - taskcluster_firefox_win64_clang
     # - taskcluster_firefox_win64_clang_debug
 
     'default_actions': [
         'clone-tools',
         'build',
+        'generate-build-stats',
         'check-test',
-        'generate-build-stats'
     ],
     'exes': {
         'python2.7': sys.executable,
         'virtualenv': [
             sys.executable,
             os.path.join(
                 os.getcwd(), 'build', 'src', 'python', 'virtualenv', 'virtualenv.py'
             )
--- a/testing/mozharness/configs/builds/taskcluster_firefox_windows_64_opt.py
+++ b/testing/mozharness/configs/builds/taskcluster_firefox_windows_64_opt.py
@@ -14,18 +14,18 @@ config = {
     # - taskcluster_firefox_win32_clang
     # - taskcluster_firefox_win32_clang_debug
     # - taskcluster_firefox_win64_clang
     # - taskcluster_firefox_win64_clang_debug
 
     'default_actions': [
         'clone-tools',
         'build',
+        'generate-build-stats',
         'check-test',
-        'generate-build-stats'
     ],
     'exes': {
         'python2.7': sys.executable,
         'virtualenv': [
             sys.executable,
             os.path.join(
                 os.getcwd(), 'build', 'src', 'python', 'virtualenv', 'virtualenv.py'
             )
--- a/testing/mozharness/scripts/fx_desktop_build.py
+++ b/testing/mozharness/scripts/fx_desktop_build.py
@@ -34,24 +34,24 @@ class FxDesktopBuild(BuildScript, TryToo
             'config_options': BUILD_BASE_CONFIG_OPTIONS + copy.deepcopy(try_config_options),
             'all_actions': [
                 'get-secrets',
                 'clobber',
                 'clone-tools',
                 'checkout-sources',
                 'setup-mock',
                 'build',
+                'generate-build-stats',
                 'upload-files',  # upload from BB to TC
                 'sendchange',
                 'check-test',
                 'valgrind-test',
                 'package-source',
                 'generate-source-signing-manifest',
                 'multi-l10n',
-                'generate-build-stats',
                 'update',
             ],
             'require_config_file': True,
             # Default configuration
             'config': {
                 'is_automation': True,
                 "pgo_build": False,
                 "debug_build": False,