You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.3 KiB
81 lines
2.3 KiB
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
# Copyright 2019 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Updates the status of all tryjobs to the result of `cros buildresult`."""
|
|
|
|
from __future__ import print_function
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
|
|
import chroot
|
|
import update_tryjob_status
|
|
|
|
|
|
def GetPathToUpdateAllTryjobsWithAutoScript():
|
|
"""Returns the absolute path to this script."""
|
|
|
|
return os.path.abspath(__file__)
|
|
|
|
|
|
def GetCommandLineArgs():
|
|
"""Parses the command line for the command line arguments."""
|
|
|
|
# Default absoute path to the chroot if not specified.
|
|
cros_root = os.path.expanduser('~')
|
|
cros_root = os.path.join(cros_root, 'chromiumos')
|
|
|
|
# Create parser and add optional command-line arguments.
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
|
|
# Add argument for the JSON file to use for the update of a tryjob.
|
|
parser.add_argument(
|
|
'--last_tested',
|
|
required=True,
|
|
help='The absolute path to the JSON file that contains the tryjobs used '
|
|
'for bisecting LLVM.')
|
|
|
|
# Add argument for a specific chroot path.
|
|
parser.add_argument(
|
|
'--chroot_path',
|
|
default=cros_root,
|
|
help='the path to the chroot (default: %(default)s)')
|
|
|
|
args_output = parser.parse_args()
|
|
|
|
if not os.path.isfile(args_output.last_tested) or \
|
|
not args_output.last_tested.endswith('.json'):
|
|
raise ValueError('File does not exist or does not ending in ".json" '
|
|
': %s' % args_output.last_tested)
|
|
|
|
return args_output
|
|
|
|
|
|
def main():
|
|
"""Updates the status of a tryjob."""
|
|
|
|
chroot.VerifyOutsideChroot()
|
|
|
|
args_output = GetCommandLineArgs()
|
|
|
|
with open(args_output.last_tested) as tryjobs:
|
|
bisect_contents = json.load(tryjobs)
|
|
|
|
for tryjob in bisect_contents['jobs']:
|
|
if tryjob['status'] == update_tryjob_status.TryjobStatus.PENDING.value:
|
|
tryjob['status'] = update_tryjob_status.GetAutoResult(
|
|
args_output.chroot_path, tryjob['buildbucket_id'])
|
|
|
|
new_file = '%s.new' % args_output.last_tested
|
|
with open(new_file, 'w') as update_tryjobs:
|
|
json.dump(bisect_contents, update_tryjobs, indent=4, separators=(',', ': '))
|
|
os.rename(new_file, args_output.last_tested)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|