Bug 1301720: whitelist gecko-v2 job names; r?mshal draft
authorDustin J. Mitchell <dustin@mozilla.com>
Wed, 14 Sep 2016 21:32:23 +0000
changeset 414533 ea85232da03696978a4af76503419dc51be28773
parent 413901 a387818ed08a57cc9d292c19dbd0a66f37ee94c3
child 414534 4d1183e2b3d1a032708c0978ac5c04e123fa6a16
push id29694
push userdmitchell@mozilla.com
push dateFri, 16 Sep 2016 15:11:55 +0000
reviewersmshal
bugs1301720
milestone51.0a1
Bug 1301720: whitelist gecko-v2 job names; r?mshal MozReview-Commit-ID: 7Gs1yEMSr4V
taskcluster/taskgraph/transforms/gecko_v2_whitelist.py
taskcluster/taskgraph/transforms/task.py
new file mode 100644
--- /dev/null
+++ b/taskcluster/taskgraph/transforms/gecko_v2_whitelist.py
@@ -0,0 +1,72 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+"""
+This file contains a whitelist of gecko.v2 index route job names.  The intent
+of this whitelist is to raise an alarm when new jobs are added.  If those jobs
+already run in Buildbot, then it's important that the generated index routes
+match (and that only one of Buildbot and TaskCluster be tier-1 at any time).
+If the jobs are new and never ran in Buildbot, then their job name can be added
+here without any further fuss.
+
+Once all jobs have been ported from Buildbot, this file can be removed.
+"""
+
+from __future__ import absolute_import, print_function, unicode_literals
+
+# please keep me in lexical order
+JOB_NAME_WHITELIST = set([
+    'android-api-15-debug',
+    'android-api-15-gradle-dependencies-opt',
+    'android-api-15-gradle-opt',
+    'android-api-15-opt',
+    'android-api-15-partner-sample1-opt',
+    'android-l10n-opt',
+    'android-x86-opt',
+    'aries-debug',
+    'aries-eng-opt',
+    'browser-haz-debug',
+    'linux32-l10n-opt',
+    'linux64-artifact-opt',
+    'linux64-asan-debug',
+    'linux64-asan-opt',
+    'linux64-debug',
+    'linux64-l10n-opt',
+    'linux64-opt',
+    'linux64-pgo-opt',
+    'linux64-st-an-opt',
+    'linux64-valgrind-opt',
+    'linux-debug',
+    'linux-opt',
+    'macosx64-debug',
+    'macosx64-opt',
+    'macosx64-st-an-opt',
+    'mulet-dbg',
+    'mulet-haz-debug',
+    'mulet-opt',
+    'nexus-5-l-eng-debug',
+    'nexus-5-l-eng-opt',
+    'shell-haz-debug',
+    'sm-arm64-sim-debug',
+    'sm-arm-sim-debug',
+    'sm-asan-opt',
+    'sm-compacting-debug',
+    'sm-msan-opt',
+    'sm-nonunified-debug',
+    'sm-package-opt',
+    'sm-plaindebug-debug',
+    'sm-plain-opt',
+    'sm-rootanalysis-debug',
+    'sm-tsan-opt',
+    'win32-debug',
+    'win32-opt',
+    'win64-debug',
+    'win64-opt',
+])
+
+JOB_NAME_WHITELIST_ERROR = """\
+The gecko-v2 job name {} is not in the whitelist in __file__.
+If this job runs on Buildbot, please ensure that the job names match between
+Buildbot and TaskCluster, then add the job name to the whitelist.  If this is a
+new job, there is nothing to check -- just add the job to the whitelist.
+"""
--- a/taskcluster/taskgraph/transforms/task.py
+++ b/taskcluster/taskgraph/transforms/task.py
@@ -14,16 +14,18 @@ import time
 
 from taskgraph.util.treeherder import split_symbol
 from taskgraph.transforms.base import (
     validate_schema,
     TransformSequence
 )
 from voluptuous import Schema, Any, Required, Optional, Extra
 
+from .gecko_v2_whitelist import JOB_NAME_WHITELIST, JOB_NAME_WHITELIST_ERROR
+
 # shortcut for a string where task references are allowed
 taskref_or_string = Any(
     basestring,
     {Required('task-reference'): basestring})
 
 # A task description is a general description of a TaskCluster task
 task_description_schema = Schema({
     # the label for this task
@@ -403,16 +405,20 @@ def add_index_routes(config, tasks):
         # unpack the v2 name to v1 and buildbot names
         if isinstance(job_name, basestring):
             base_name, type_name = job_name.rsplit('-', 1)
             job_name = {
                 'buildbot': base_name,
                 'gecko-v1': '{}.{}'.format(base_name, type_name),
                 'gecko-v2': '{}-{}'.format(base_name, type_name),
             }
+
+        if job_name['gecko-v2'] not in JOB_NAME_WHITELIST:
+            raise Exception(JOB_NAME_WHITELIST_ERROR.format(job_name['gecko-v2']))
+
         subs = config.params.copy()
         for n in job_name:
             subs['job-name-' + n] = job_name[n]
         subs['pushdate_long'] = time.strftime(
             "%Y.%m.%d.%Y%m%d%H%M%S",
             time.gmtime(config.params['pushdate']))
         subs['product'] = index['product']