blob: 5fc84a5e7d35e30f05d4c5740ac6b0d0ac629bde [file] [log] [blame]
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from recipe_engine import recipe_api
class Gatekeeper(recipe_api.RecipeApi):
"""Module for Gatekeeper NG."""
def __call__(self, gatekeeper_default_json, gatekeeper_trees_json):
config = self.m.json.read(
'reading %s' % self.m.path.basename(gatekeeper_trees_json),
gatekeeper_trees_json,
).json.output
for tree_name, tree_args in config.iteritems():
# TODO(martiniss): create a creds recipe module to make a nice path
# reference to /creds
# Use tree-specific config if specified, otherwise use default.
# Tree-specific configs must be relative to the trees file.
gatekeeper_json = gatekeeper_default_json
if tree_args.get('config'):
assert '..' not in tree_args['config'].split('/')
gatekeeper_json = self.m.path.join(
self.m.path.dirname(gatekeeper_trees_json),
*tree_args['config'].split('/'))
args = [
'--json', gatekeeper_json, '--email-app-secret-file',
'/creds/gatekeeper/mailer_password',
'--service-account-path',
self.m.puppet_service_account.get_key_path('gatekeeper'),
]
if tree_args.get('status-url'):
args.extend(['--status-url', tree_args['status-url']])
if tree_args.get('sheriff-url'):
args.extend(['--sheriff-url', tree_args['sheriff-url']])
if tree_args.get('set-status'):
args.append('--set-status')
if tree_args.get('open-tree'):
args.append('--open-tree')
if tree_args.get('track-revisions'):
args.append('--track-revisions')
if tree_args.get('revision-properties'):
args.extend(['--revision-properties', tree_args['revision-properties']])
if tree_args.get('build-db'):
args.extend(['--build-db', tree_args['build-db']])
if tree_args.get('password-file'):
args.extend(['--password-file', tree_args['password-file']])
if tree_args.get('use-project-email-address'):
args.extend(['--default-from-email',
'%s-buildbot@chromium-build.appspotmail.com' % tree_name])
elif tree_args.get('default-from-email'): # pragma: nocover
args.extend(['--default-from-email', tree_args['default-from-email']])
if tree_args.get('filter-domain'):
args.extend(['--filter-domain', tree_args['filter-domain']])
if tree_args.get('status-user'):
args.extend(['--status-user', tree_args['status-user']])
if tree_args.get('masters'):
if self.c and self.c.use_new_logic:
valid_masters = []
modifies_tree = False
if tree_args.get('set-status') or tree_args.get('open-tree'):
modifies_tree = True
for master, allowed in tree_args['masters'].items():
if '*' in allowed:
valid_masters.append(master)
elif allowed:
valid_masters.append(master + ':' + ','.join(allowed))
args.extend(valid_masters)
else: #pragma: no cover
args.extend(tree_args['masters'])
try:
self.m.build.python(
'gatekeeper: %s' % str(tree_name),
self.package_repo_resource('scripts', 'slave', 'gatekeeper_ng.py'),
args,
)
except self.m.step.StepFailure:
pass