Bug 1376550 - Support beetmoving target.complete.mar (from repackage), does not yet support l10n repacks. r=dustin
authorJustin Wood <Callek@gmail.com>
Tue, 27 Jun 2017 16:18:52 -0700
changeset 601446 35a899f1624290f938af9cd395cea1a1692e4601
parent 601445 a6fd8e071d84db60a4f2449f50c351f4db2e9364
child 601447 a850b430bc0a0531c8014e12cd0533ef8a0444eb
child 601465 d858e9a1e21746612793c52230146472bc47df2f
push id66056
push userCallek@gmail.com
push dateWed, 28 Jun 2017 19:19:30 +0000
reviewersdustin
bugs1376550
milestone56.0a1
Bug 1376550 - Support beetmoving target.complete.mar (from repackage), does not yet support l10n repacks. r=dustin Support OSX Signed nightlies (in the complete.mar too) MozReview-Commit-ID: Zt04wLHyDW
taskcluster/ci/beetmover-repackage/kind.yml
taskcluster/taskgraph/transforms/beetmover_repackage.py
--- a/taskcluster/ci/beetmover-repackage/kind.yml
+++ b/taskcluster/ci/beetmover-repackage/kind.yml
@@ -5,12 +5,12 @@
 loader: taskgraph.loader.single_dep:loader
 
 transforms:
    - taskgraph.transforms.beetmover_repackage_l10n:transforms
    - taskgraph.transforms.beetmover_repackage:transforms
    - taskgraph.transforms.task:transforms
 
 kind-dependencies:
-  - repackage
+  - repackage-signing
 
 only-for-build-platforms:
   - macosx64-nightly/opt
--- a/taskcluster/taskgraph/transforms/beetmover_repackage.py
+++ b/taskcluster/taskgraph/transforms/beetmover_repackage.py
@@ -63,16 +63,24 @@ UPSTREAM_ARTIFACT_UNSIGNED_PATHS = {
 # Until bug 1331141 is fixed, if you are adding any new artifacts here that
 # need to be transfered to S3, please be aware you also need to follow-up
 # with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
 # See example in bug 1348286
 UPSTREAM_ARTIFACT_REPACKAGE_PATHS = {
     'macosx64-nightly': ["target.dmg"],
     'macosx64-nightly-l10n': ["target.dmg"],
 }
+# Until bug 1331141 is fixed, if you are adding any new artifacts here that
+# need to be transfered to S3, please be aware you also need to follow-up
+# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
+# See example in bug 1348286
+UPSTREAM_ARTIFACT_SIGNED_REPACKAGE_PATHS = {
+    'macosx64-nightly': ["target.complete.mar"],
+    'macosx64-nightly-l10n': ["target.complete.mar"],
+}
 
 # Voluptuous uses marker objects as dictionary *keys*, but they are not
 # comparable, so we cast all of the keys back to regular strings
 task_description_schema = {str(k): v for k, v in task_description_schema.schema.iteritems()}
 
 transforms = TransformSequence()
 
 # shortcut for a string where task references are allowed
@@ -118,42 +126,51 @@ def make_task_description(config, jobs):
         treeherder.setdefault('symbol', 'tc(BM-R)')
         dep_th_platform = dep_job.task.get('extra', {}).get(
             'treeherder', {}).get('machine', {}).get('platform', '')
         treeherder.setdefault('platform',
                               "{}/opt".format(dep_th_platform))
         treeherder.setdefault('tier', 1)
         treeherder.setdefault('kind', 'build')
         label = job.get('label', "beetmover-{}".format(dep_job.label))
+
         dependent_kind = str(dep_job.kind)
         dependencies = {dependent_kind: dep_job.label}
 
         # macosx nightly builds depend on repackage which use in tree docker
         # images and thus have two dependencies
         # change the signing_dependencies to be use the ones in
         docker_dependencies = {"docker-image":
-                               dep_job.dependencies["docker-image"]
+                               dep_job.dependencies['docker-image']
                                }
         dependencies.update(docker_dependencies)
+
         signing_name = "build-signing"
         if job.get('locale'):
             signing_name = "nightly-l10n-signing"
         signing_dependencies = {signing_name:
                                 dep_job.dependencies[signing_name]
                                 }
         dependencies.update(signing_dependencies)
 
         build_name = "build"
         if job.get('locale'):
             build_name = "unsigned-repack"
         build_dependencies = {"build":
                               dep_job.dependencies[build_name]
                               }
         dependencies.update(build_dependencies)
 
+        repackage_name = "repackage"
+        # repackage-l10n actually uses the repackage depname here
+        repackage_dependencies = {"repackage":
+                                  dep_job.dependencies[repackage_name]
+                                  }
+        dependencies.update(repackage_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']
@@ -172,20 +189,22 @@ def make_task_description(config, jobs):
             'run-on-projects': dep_job.attributes.get('run_on_projects'),
             'treeherder': treeherder,
         }
 
         yield task
 
 
 def generate_upstream_artifacts(build_task_ref, repackage_task_ref,
-                                platform, locale=None):
+                                repackage_signing_task_ref, platform,
+                                locale=None):
 
     build_mapping = UPSTREAM_ARTIFACT_UNSIGNED_PATHS
     repackage_mapping = UPSTREAM_ARTIFACT_REPACKAGE_PATHS
+    repackage_signing_mapping = UPSTREAM_ARTIFACT_SIGNED_REPACKAGE_PATHS
 
     artifact_prefix = 'public/build'
     if locale:
         artifact_prefix = 'public/build/{}'.format(locale)
         platform = "{}-l10n".format(platform)
 
     upstream_artifacts = [{
         "taskId": {"task-reference": build_task_ref},
@@ -194,45 +213,56 @@ def generate_upstream_artifacts(build_ta
                   for p in build_mapping[platform]],
         "locale": locale or "en-US",
         }, {
         "taskId": {"task-reference": repackage_task_ref},
         "taskType": "repackage",
         "paths": ["{}/{}".format(artifact_prefix, p)
                   for p in repackage_mapping[platform]],
         "locale": locale or "en-US",
+        }, {
+        "taskId": {"task-reference": repackage_signing_task_ref},
+        "taskType": "repackage",
+        "paths": ["{}/{}".format(artifact_prefix, p)
+                  for p in repackage_signing_mapping[platform]],
+        "locale": locale or "en-US",
     }]
 
     return upstream_artifacts
 
 
 @transforms.add
 def make_task_worker(config, jobs):
     for job in jobs:
-        valid_beetmover_job = (len(job["dependencies"]) == 4 and
+        valid_beetmover_job = (len(job["dependencies"]) == 5 and
                                any(['repackage' in j for j in job['dependencies']]))
         if not valid_beetmover_job:
-            raise NotImplementedError("Beetmover_repackage must have four dependencies.")
+            raise NotImplementedError("Beetmover_repackage must have five dependencies.")
 
         locale = job["attributes"].get("locale")
         platform = job["attributes"]["build_platform"]
         build_task = None
         repackage_task = None
+        repackage_signing_task = None
         for dependency in job["dependencies"].keys():
-            if 'repackage' in dependency:
+            if 'repackage-signing' in dependency:
+                repackage_signing_task = dependency
+            elif 'repackage' in dependency:
                 repackage_task = dependency
             elif 'signing' in dependency:
                 pass
             else:
                 build_task = "build"
 
         build_task_ref = "<" + str(build_task) + ">"
         repackage_task_ref = "<" + str(repackage_task) + ">"
+        repackage_signing_task_ref = "<" + str(repackage_signing_task) + ">"
         upstream_artifacts = generate_upstream_artifacts(
-            build_task_ref, repackage_task_ref, platform, locale
+            build_task_ref, repackage_task_ref,
+            repackage_signing_task_ref, platform, locale
         )
 
         worker = {'implementation': 'beetmover',
                   'upstream-artifacts': upstream_artifacts}
         if locale:
             worker["locale"] = locale
         job["worker"] = worker