Bug 1340564: use an attribute to identify signed tasks; r?Callek draft
authorDustin J. Mitchell <dustin@mozilla.com>
Sun, 05 Feb 2017 14:08:10 -0500
changeset 576292 67d58cfda81c78fdad5cfd03a5195c8cba49e091
parent 575756 1fcd9ee5ccb50a2e0d255b86237878b3a821596b
child 576293 d02c34f1a5e68fe14f6bc921edc1bdeb6a81a261
push id58315
push userdmitchell@mozilla.com
push dateThu, 11 May 2017 15:34:51 +0000
reviewersCallek
bugs1340564
milestone55.0a1
Bug 1340564: use an attribute to identify signed tasks; r?Callek This is a more robust approach than using substring matching on task labels. As an optimization, this simply avoids creating balrog tasks for unsigned beets using only-for-attributes, rather than omitting them in a transform. MozReview-Commit-ID: 8MNOxu0WgXo
taskcluster/ci/balrog/kind.yml
taskcluster/docs/attributes.rst
taskcluster/taskgraph/transforms/balrog.py
taskcluster/taskgraph/transforms/beetmover.py
taskcluster/taskgraph/transforms/beetmover_checksums.py
taskcluster/taskgraph/transforms/beetmover_repackage.py
taskcluster/taskgraph/transforms/signing.py
--- a/taskcluster/ci/balrog/kind.yml
+++ b/taskcluster/ci/balrog/kind.yml
@@ -10,8 +10,9 @@ transforms:
 
 kind-dependencies:
   - beetmover
   - beetmover-l10n
   - beetmover-repackage
 
 only-for-attributes:
   - nightly
+  - signed
--- a/taskcluster/docs/attributes.rst
+++ b/taskcluster/docs/attributes.rst
@@ -150,8 +150,12 @@ chunk_locales
 For the ``l10n`` and ``nightly-l10n`` kinds, this attribute contains an array of
 the individual locales this chunk is responsible for processing.
 
 locale
 ======
 For jobs that operate on only one locale, we set the attribute ``locale`` to the
 specific locale involved. Currently this is only in l10n versions of the
 ``beetmover`` and ``balrog`` kinds.
+
+signed
+======
+Signals that the output of this task contains signed artifacts.
--- a/taskcluster/taskgraph/transforms/balrog.py
+++ b/taskcluster/taskgraph/transforms/balrog.py
@@ -45,26 +45,16 @@ def validate(config, jobs):
     for job in jobs:
         label = job.get('dependent-task', object).__dict__.get('label', '?no-label?')
         yield validate_schema(
             balrog_description_schema, job,
             "In balrog ({!r} kind) task for {!r}:".format(config.kind, label))
 
 
 @transforms.add
-def skip_unsigned_beets(config, jobs):
-    for job in jobs:
-        if ('signing' not in job['dependent-task'].label and
-                'beetmover-repackage' not in job['dependent-task'].label):
-            # Skip making a balrog task for this
-            continue
-        yield job
-
-
-@transforms.add
 def make_task_description(config, jobs):
     for job in jobs:
         dep_job = job['dependent-task']
 
         treeherder = job.get('treeherder', {})
         treeherder.setdefault('symbol', 'tc-Up(N)')
         dep_th_platform = dep_job.task.get('extra', {}).get(
             'treeherder', {}).get('machine', {}).get('platform', '')
--- a/taskcluster/taskgraph/transforms/beetmover.py
+++ b/taskcluster/taskgraph/transforms/beetmover.py
@@ -217,16 +217,17 @@ def make_task_description(config, jobs):
         if len(dep_job.dependencies) > 1:
             raise NotImplementedError(
                 "Can't beetmove a signing task with multiple dependencies")
         signing_dependencies = dep_job.dependencies
         dependencies.update(signing_dependencies)
 
         attributes = {
             'nightly': dep_job.attributes.get('nightly', False),
+            'signed': dep_job.attributes.get('signed', False),
             'build_platform': dep_job.attributes.get('build_platform'),
             'build_type': dep_job.attributes.get('build_type'),
         }
         if job.get('locale'):
             attributes['locale'] = job['locale']
 
         bucket_scope = get_beetmover_bucket_scope(config)
         action_scope = get_beetmover_action_scope(config)
--- a/taskcluster/taskgraph/transforms/beetmover_checksums.py
+++ b/taskcluster/taskgraph/transforms/beetmover_checksums.py
@@ -60,16 +60,17 @@ def make_beetmover_checksums_description
         dependent_kind = str(dep_job.kind)
         dependencies = {dependent_kind: dep_job.label}
         for k, v in dep_job.dependencies.items():
             if k.startswith('beetmover'):
                 dependencies[k] = v
 
         attributes = {
             'nightly': dep_job.attributes.get('nightly', False),
+            'signed': dep_job.attributes.get('signed', False),
             'build_platform': dep_job.attributes.get('build_platform'),
             'build_type': dep_job.attributes.get('build_type'),
         }
         if dep_job.attributes.get('locale'):
             treeherder['symbol'] = 'tc-BMcs({})'.format(dep_job.attributes.get('locale'))
             attributes['locale'] = dep_job.attributes.get('locale')
 
         bucket_scope = get_beetmover_bucket_scope(config)
--- a/taskcluster/taskgraph/transforms/beetmover_repackage.py
+++ b/taskcluster/taskgraph/transforms/beetmover_repackage.py
@@ -142,16 +142,17 @@ def make_task_description(config, jobs):
         dependencies.update(repackage_dependencies)
         build_dependencies = {"build":
                               dep_job.dependencies["build-signing"].replace("signing-", "build-")
                               }
         dependencies.update(build_dependencies)
 
         attributes = {
             'nightly': dep_job.attributes.get('nightly', False),
+            'signed': dep_job.attributes.get('signed', False),
             'build_platform': dep_job.attributes.get('build_platform'),
             'build_type': dep_job.attributes.get('build_type'),
         }
         if job.get('locale'):
             attributes['locale'] = job['locale']
 
         bucket_scope = get_beetmover_bucket_scope(config)
         action_scope = get_beetmover_action_scope(config)
--- a/taskcluster/taskgraph/transforms/signing.py
+++ b/taskcluster/taskgraph/transforms/signing.py
@@ -96,16 +96,17 @@ def make_task_description(config, jobs):
         treeherder.setdefault('kind', 'build')
 
         label = job.get('label', "{}-signing".format(dep_job.label))
 
         attributes = {
             'nightly': dep_job.attributes.get('nightly', False),
             'build_platform': dep_job.attributes.get('build_platform'),
             'build_type': dep_job.attributes.get('build_type'),
+            'signed': True,
         }
         if dep_job.attributes.get('chunk_locales'):
             # Used for l10n attribute passthrough
             attributes['chunk_locales'] = dep_job.attributes.get('chunk_locales')
 
         # This code wasn't originally written with the possibility of using different
         # signing cert scopes for different platforms on the same branch. This isn't
         # ideal, but it's what we currently have to make this possible.