Bug 1463190 - Add forced-MSVC builds to CI to keep that platform green. r=ted
authorDavid Major <dmajor@mozilla.com>
Mon, 09 Jul 2018 18:22:45 -0400
changeset 425566 827519f9d0326f76f524061cddff306a56f51255
parent 425565 4511c613a7539920e5b224124f8f1d14ac6084a0
child 425567 465d19904f09327988de1dc8a7af311548f92e47
push id34259
push usertoros@mozilla.com
push dateTue, 10 Jul 2018 09:45:44 +0000
treeherdermozilla-central@a675c5d7eb76 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersted
bugs1463190
milestone63.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1463190 - Add forced-MSVC builds to CI to keep that platform green. r=ted
browser/config/mozconfigs/win32/debug-msvc
browser/config/mozconfigs/win32/opt-msvc
browser/config/mozconfigs/win64/debug-msvc
browser/config/mozconfigs/win64/opt-msvc
taskcluster/ci/build/windows.yml
taskcluster/ci/test/test-platforms.yml
taskcluster/taskgraph/loader/build_signing.py
taskcluster/taskgraph/transforms/signing.py
taskcluster/taskgraph/transforms/tests.py
new file mode 100644
--- /dev/null
+++ b/browser/config/mozconfigs/win32/debug-msvc
@@ -0,0 +1,5 @@
+. "$topsrcdir/browser/config/mozconfigs/win32/debug"
+
+export CC="cl.exe"
+export CXX="cl.exe"
+export LINKER="link.exe"
new file mode 100644
--- /dev/null
+++ b/browser/config/mozconfigs/win32/opt-msvc
@@ -0,0 +1,5 @@
+. "$topsrcdir/browser/config/mozconfigs/win32/nightly"
+
+export CC="cl.exe"
+export CXX="cl.exe"
+export LINKER="link.exe"
new file mode 100644
--- /dev/null
+++ b/browser/config/mozconfigs/win64/debug-msvc
@@ -0,0 +1,5 @@
+. "$topsrcdir/browser/config/mozconfigs/win64/debug"
+
+export CC="cl.exe"
+export CXX="cl.exe"
+export LINKER="link.exe"
new file mode 100644
--- /dev/null
+++ b/browser/config/mozconfigs/win64/opt-msvc
@@ -0,0 +1,5 @@
+. "$topsrcdir/browser/config/mozconfigs/win64/nightly"
+
+export CC="cl.exe"
+export CXX="cl.exe"
+export LINKER="link.exe"
--- a/taskcluster/ci/build/windows.yml
+++ b/taskcluster/ci/build/windows.yml
@@ -760,16 +760,144 @@ win32-mingw32/opt:
         - mingw32-rust
         - linux64-upx
         - linux64-wine
         - linux64-sccache
         - linux64-mingw32-gcc
         - linux64-mingw32-nsis
         - linux64-mingw32-fxc2
 
+win32-msvc/debug:
+    description: "Win32 MSVC Debug"
+    index:
+        product: firefox
+        job-name: win32-msvc-debug
+    treeherder:
+        platform: windows2012-32/debug
+        symbol: Bmsvc
+        tier: 2
+    worker-type: aws-provisioner-v1/gecko-{level}-b-win2012
+    worker:
+        max-run-time: 7200
+        env:
+            TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/win32/releng.manifest"
+            PERFHERDER_EXTRA_OPTIONS: msvc
+    run:
+        using: mozharness
+        options: [append-env-variables-from-configs]
+        script: mozharness/scripts/fx_desktop_build.py
+        config:
+            - builds/releng_base_firefox.py
+            - builds/taskcluster_base_windows.py
+            - builds/taskcluster_base_win32.py
+            - builds/taskcluster_sub_win32/debug.py
+        extra-config:
+            mozconfig_variant: 'debug-msvc'
+    run-on-projects: ['mozilla-central']
+    toolchains:
+        - win64-clang-cl
+        - win64-rust
+        - win64-sccache
+
+win32-msvc/opt:
+    description: "Win32 MSVC Opt"
+    index:
+        product: firefox
+        job-name: win32-msvc-opt
+    treeherder:
+        platform: windows2012-32/opt
+        symbol: Bmsvc
+        tier: 2
+    worker-type: aws-provisioner-v1/gecko-{level}-b-win2012
+    worker:
+        max-run-time: 7200
+        env:
+            TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/win32/releng.manifest"
+            PERFHERDER_EXTRA_OPTIONS: msvc
+    run:
+        using: mozharness
+        options: [append-env-variables-from-configs]
+        script: mozharness/scripts/fx_desktop_build.py
+        config:
+            - builds/releng_base_firefox.py
+            - builds/taskcluster_base_windows.py
+            - builds/taskcluster_base_win32.py
+            - builds/taskcluster_sub_win32/opt.py
+        extra-config:
+            mozconfig_variant: 'opt-msvc'
+    run-on-projects: ['mozilla-central']
+    toolchains:
+        - win64-clang-cl
+        - win64-rust
+        - win64-sccache
+
+win64-msvc/debug:
+    description: "Win64 MSVC Debug"
+    index:
+        product: firefox
+        job-name: win64-msvc-debug
+    treeherder:
+        platform: windows2012-64/debug
+        symbol: Bmsvc
+        tier: 2
+    worker-type: aws-provisioner-v1/gecko-{level}-b-win2012
+    worker:
+        max-run-time: 7200
+        env:
+            TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/win64/releng.manifest"
+            PERFHERDER_EXTRA_OPTIONS: msvc
+    run:
+        using: mozharness
+        options: [append-env-variables-from-configs]
+        script: mozharness/scripts/fx_desktop_build.py
+        config:
+            - builds/releng_base_firefox.py
+            - builds/taskcluster_base_windows.py
+            - builds/taskcluster_base_win64.py
+            - builds/taskcluster_sub_win64/debug.py
+        extra-config:
+            mozconfig_variant: 'debug-msvc'
+    run-on-projects: ['mozilla-central']
+    toolchains:
+        - win64-clang-cl
+        - win64-rust
+        - win64-sccache
+
+win64-msvc/opt:
+    description: "Win64 MSVC Opt"
+    index:
+        product: firefox
+        job-name: win64-msvc-opt
+    treeherder:
+        platform: windows2012-64/opt
+        symbol: Bmsvc
+        tier: 2
+    worker-type: aws-provisioner-v1/gecko-{level}-b-win2012
+    worker:
+        max-run-time: 7200
+        env:
+            TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/win64/releng.manifest"
+            PERFHERDER_EXTRA_OPTIONS: msvc
+    run:
+        using: mozharness
+        options: [append-env-variables-from-configs]
+        script: mozharness/scripts/fx_desktop_build.py
+        config:
+            - builds/releng_base_firefox.py
+            - builds/taskcluster_base_windows.py
+            - builds/taskcluster_base_win64.py
+            - builds/taskcluster_sub_win64/opt.py
+        extra-config:
+            mozconfig_variant: 'opt-msvc'
+    run-on-projects: ['mozilla-central']
+    toolchains:
+        - win64-clang-cl
+        - win64-rust
+        - win64-sccache
+
 win32-mingw32/debug:
     description: "Win32 MinGW Debug"
     index:
         product: firefox
         job-name: win32-mingw32-debug
     treeherder:
         platform: windows-mingw32/all
         symbol: WM32(Bd)
--- a/taskcluster/ci/test/test-platforms.yml
+++ b/taskcluster/ci/test/test-platforms.yml
@@ -122,16 +122,22 @@ linux64-jsdcov/opt:
 
 # win32
 windows7-32/debug:
     build-platform: win32/debug
     test-sets:
         - windows-reftest-gpu
         - windows-tests
 
+windows7-32-msvc/debug:
+    build-platform: win32-msvc/debug
+    test-sets:
+        - windows-reftest-gpu
+        - windows-tests
+
 windows7-32/opt:
     build-platform: win32/opt
     test-sets:
         - awsy
         - desktop-screenshot-capture
         - windows-reftest-gpu
         - windows-talos
         - windows-tests
@@ -157,32 +163,47 @@ windows7-32-nightly/opt:
 
 windows7-32-devedition/opt:
     build-platform: win32-devedition-nightly/opt
     test-sets:
         - desktop-screenshot-capture
         - windows-reftest-gpu
         - windows-tests
 
+windows7-32-msvc/opt:
+    build-platform: win32-msvc/opt
+    test-sets:
+        - awsy
+        - desktop-screenshot-capture
+        - windows-reftest-gpu
+        - windows-talos
+        - windows-tests
+
 # win64
 windows10-64-ccov/debug:
     build-platform: win64-ccov/debug
     test-sets:
         - awsy
         - desktop-screenshot-capture
         - windows-reftest-gpu
         - windows-talos
         - windows-tests
 
 windows10-64/debug:
     build-platform: win64/debug
     test-sets:
         - windows-tests
         - mochitest-headless
 
+windows10-64-msvc/debug:
+    build-platform: win64-msvc/debug
+    test-sets:
+        - windows-tests
+        - mochitest-headless
+
 windows10-64/opt:
     build-platform: win64/opt
     test-sets:
         - awsy
         - desktop-screenshot-capture
         - windows-talos
         - windows-tests
         - mochitest-headless
@@ -212,16 +233,25 @@ windows10-64-devedition/opt:
         - desktop-screenshot-capture
         - windows-tests
 
 windows10-64-asan/opt:
     build-platform: win64-asan/opt
     test-sets:
         - common-tests
 
+windows10-64-msvc/opt:
+    build-platform: win64-msvc/opt
+    test-sets:
+        - awsy
+        - desktop-screenshot-capture
+        - windows-talos
+        - windows-tests
+        - mochitest-headless
+
 # QR builds just run a subset right now.
 windows10-64-qr/debug:
     build-platform: win64/debug
     test-sets:
         - windows-qr-tests
 
 windows10-64-qr/opt:
     build-platform: win64/opt
--- a/taskcluster/taskgraph/loader/build_signing.py
+++ b/taskcluster/taskgraph/loader/build_signing.py
@@ -5,17 +5,19 @@
 from __future__ import absolute_import, print_function, unicode_literals
 
 from taskgraph.loader.single_dep import loader as base_loader
 
 # 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-win32-msvc/debug', 'build-win32-msvc/opt',
     'build-win64/debug', 'build-win64/opt', 'build-win64/pgo',
+    'build-win64-msvc/debug', 'build-win64-msvc/opt',
     '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',
--- a/taskcluster/taskgraph/transforms/signing.py
+++ b/taskcluster/taskgraph/transforms/signing.py
@@ -105,27 +105,34 @@ def make_task_description(config, jobs):
             signing_format_scopes.append(
                 add_scope_prefix(config, 'signing:format:{}'.format(format))
             )
 
         is_nightly = dep_job.attributes.get('nightly', False)
         treeherder = None
         if 'partner' not in config.kind and 'eme-free' not in config.kind:
             treeherder = job.get('treeherder', {})
-            treeherder.setdefault('symbol', _generate_treeherder_symbol(is_nightly, config.kind))
 
             dep_th_platform = dep_job.task.get('extra', {}).get(
                 'treeherder', {}).get('machine', {}).get('platform', '')
             build_type = dep_job.attributes.get('build_type')
             build_platform = dep_job.attributes.get('build_platform')
             treeherder.setdefault('platform', _generate_treeherder_platform(
                 dep_th_platform, build_platform, build_type
             ))
+            treeherder.setdefault('symbol', _generate_treeherder_symbol(
+                is_nightly, build_platform
+            ))
 
-            treeherder.setdefault('tier', 1 if '-ccov' not in build_platform else 2)
+            # ccov and msvc builds are tier 2, so they cannot have tier 1 tasks
+            # depending on them.
+            if '-ccov' in build_platform or '-msvc' in build_platform:
+                treeherder.setdefault('tier', 2)
+            else:
+                treeherder.setdefault('tier', 1)
             treeherder.setdefault('kind', 'build')
 
         label = job['label']
         description = (
             "Initial Signing for locale '{locale}' for build '"
             "{build_platform}/{build_type}'".format(
                 locale=attributes.get('locale', 'en-US'),
                 build_platform=attributes.get('build_platform'),
@@ -173,13 +180,13 @@ def _generate_treeherder_platform(dep_th
         actual_build_type = 'pgo'
     elif '-ccov' in build_platform:
         actual_build_type = 'ccov'
     else:
         actual_build_type = build_type
     return '{}/{}'.format(dep_th_platform, actual_build_type)
 
 
-def _generate_treeherder_symbol(is_nightly, kind):
-    if is_nightly:
-        return 'Ns'
-    else:
-        return 'Bs'
+def _generate_treeherder_symbol(is_nightly, build_platform):
+    symbol = 'Ns' if is_nightly else 'Bs'
+    if '-msvc' in build_platform:
+        symbol += '-msvc'
+    return symbol
--- a/taskcluster/taskgraph/transforms/tests.py
+++ b/taskcluster/taskgraph/transforms/tests.py
@@ -67,16 +67,21 @@ WINDOWS_WORKER_TYPES = {
       'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win7-32-gpu',
       'hardware': 'releng-hardware/gecko-t-win10-64-hw',
     },
     'windows7-32-devedition': {
       'virtual': 'aws-provisioner-v1/gecko-t-win7-32',
       'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win7-32-gpu',
       'hardware': 'releng-hardware/gecko-t-win10-64-hw',
     },
+    'windows7-32-msvc': {
+      'virtual': 'aws-provisioner-v1/gecko-t-win7-32',
+      'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win7-32-gpu',
+      'hardware': 'releng-hardware/gecko-t-win10-64-hw',
+    },
     'windows10-64': {
       'virtual': 'aws-provisioner-v1/gecko-t-win10-64',
       'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win10-64-gpu',
       'hardware': 'releng-hardware/gecko-t-win10-64-hw',
     },
     'windows10-64-ccov': {
       'virtual': 'aws-provisioner-v1/gecko-t-win10-64',
       'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win10-64-gpu',
@@ -97,16 +102,21 @@ WINDOWS_WORKER_TYPES = {
       'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win10-64-gpu',
       'hardware': 'releng-hardware/gecko-t-win10-64-hw',
     },
     'windows10-64-asan': {
       'virtual': 'aws-provisioner-v1/gecko-t-win10-64',
       'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win10-64-gpu',
       'hardware': 'releng-hardware/gecko-t-win10-64-hw',
     },
+    'windows10-64-msvc': {
+      'virtual': 'aws-provisioner-v1/gecko-t-win10-64',
+      'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win10-64-gpu',
+      'hardware': 'releng-hardware/gecko-t-win10-64-hw',
+    },
     'windows10-64-qr': {
       'virtual': 'aws-provisioner-v1/gecko-t-win10-64',
       'virtual-with-gpu': 'aws-provisioner-v1/gecko-t-win10-64-gpu',
       'hardware': 'releng-hardware/gecko-t-win10-64-hw',
     },
 }
 
 # os x worker types keyed by test-platform