Add script for triggering Buildbucket builds
BUG=493885 TESTED=See https://paste.googleplex.com/5622248052359168 Review URL: https://codereview.chromium.org/1164363003 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@295569 0039d316-1c4b-4281-b951-d872f2087c98changes/01/332501/1
parent
8dd354610f
commit
5f0788be20
@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (c) 2015 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.
|
||||
|
||||
"""Tool for interacting with Buildbucket.
|
||||
|
||||
Usage:
|
||||
$ depot-tools-auth login https://cr-buildbucket.appspot.com
|
||||
$ buildbucket.py \
|
||||
put \
|
||||
--bucket master.tryserver.chromium.linux \
|
||||
--builder my-builder \
|
||||
|
||||
Puts a build into buildbucket for my-builder on tryserver.chromium.linux.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import urlparse
|
||||
import os
|
||||
import sys
|
||||
|
||||
from third_party import httplib2
|
||||
|
||||
import auth
|
||||
|
||||
|
||||
BUILDBUCKET_URL = 'https://cr-buildbucket.appspot.com'
|
||||
PUT_BUILD_URL = urlparse.urljoin(
|
||||
BUILDBUCKET_URL,
|
||||
'_ah/api/buildbucket/v1/builds',
|
||||
)
|
||||
|
||||
|
||||
def main(argv):
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
'-v',
|
||||
'--verbose',
|
||||
action='store_true',
|
||||
)
|
||||
subparsers = parser.add_subparsers(dest='command')
|
||||
put_parser = subparsers.add_parser('put')
|
||||
put_parser.add_argument(
|
||||
'--bucket',
|
||||
help=(
|
||||
'The bucket to schedule the build on. Typically the master name, e.g.'
|
||||
' master.tryserver.chromium.linux.'
|
||||
),
|
||||
required=True,
|
||||
)
|
||||
put_parser.add_argument(
|
||||
'-n',
|
||||
'--builder-name',
|
||||
help='The builder to schedule the build on.',
|
||||
required=True,
|
||||
)
|
||||
put_parser.add_argument(
|
||||
'-p',
|
||||
'--properties',
|
||||
help='A file to load a JSON dict of properties from.',
|
||||
)
|
||||
args = parser.parse_args()
|
||||
# TODO(smut): When more commands are implemented, refactor this.
|
||||
assert args.command == 'put'
|
||||
|
||||
properties = {}
|
||||
if args.properties:
|
||||
try:
|
||||
with open(args.properties) as fp:
|
||||
properties.update(json.load(fp))
|
||||
except (TypeError, ValueError):
|
||||
sys.stderr.write('%s contained invalid JSON dict.\n' % args.properties)
|
||||
raise
|
||||
|
||||
authenticator = auth.get_authenticator_for_host(
|
||||
BUILDBUCKET_URL,
|
||||
auth.make_auth_config(use_oauth2=True),
|
||||
)
|
||||
http = authenticator.authorize(httplib2.Http())
|
||||
http.force_exception_to_status_code = True
|
||||
response, content = http.request(
|
||||
PUT_BUILD_URL,
|
||||
'PUT',
|
||||
body=json.dumps({
|
||||
'bucket': args.bucket,
|
||||
'parameters_json': json.dumps({
|
||||
'builder_name': args.builder_name,
|
||||
'properties': properties,
|
||||
}),
|
||||
}),
|
||||
headers={'Content-Type': 'application/json'},
|
||||
)
|
||||
|
||||
if args.verbose:
|
||||
print content
|
||||
|
||||
return response.status != 200
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main(sys.argv))
|
Loading…
Reference in New Issue