Mypal/taskcluster/taskgraph/task/signing.py

65 lines
2.3 KiB
Python

# 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/.
from __future__ import absolute_import, print_function, unicode_literals
import logging
import os
from . import base
from taskgraph.util.templates import Templates
logger = logging.getLogger(__name__)
GECKO = os.path.realpath(os.path.join(__file__, '..', '..', '..', '..'))
ARTIFACT_URL = 'https://queue.taskcluster.net/v1/task/{}/artifacts/{}'
INDEX_URL = 'https://index.taskcluster.net/v1/task/{}'
class SigningTask(base.Task):
def __init__(self, kind, name, task, attributes):
self.unsigned_artifact_label = task['unsigned-task']['label']
super(SigningTask, self).__init__(kind, name, task=task['task'],
attributes=attributes)
@classmethod
def load_tasks(cls, kind, path, config, params, loaded_tasks):
root = os.path.abspath(path)
tasks = []
for filename in config.get('jobs-from', []):
templates = Templates(root)
jobs = templates.load(filename, {})
for name, job in jobs.iteritems():
for artifact in job['unsigned-task']['artifacts']:
url = ARTIFACT_URL.format('<{}>'.format('unsigned-artifact'), artifact)
job['task']['payload']['unsignedArtifacts'].append({
'task-reference': url
})
attributes = job.setdefault('attributes', {})
attributes.update({'kind': 'signing'})
tasks.append(cls(kind, name, job, attributes=attributes))
return tasks
def get_dependencies(self, taskgraph):
return [(self.unsigned_artifact_label, 'unsigned-artifact')]
def optimize(self, params):
return False, None
@classmethod
def from_json(cls, task_dict):
unsigned_task_label = task_dict['dependencies']['unsigned-artifact']
task_dict['unsigned-task'] = {
'label': unsigned_task_label
}
signing_task = cls(kind='build-signing',
name=task_dict['label'],
attributes=task_dict['attributes'],
task=task_dict)
return signing_task