diff options
Diffstat (limited to 'llvm_tools/update_all_tryjobs_with_auto.py')
-rwxr-xr-x | llvm_tools/update_all_tryjobs_with_auto.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/llvm_tools/update_all_tryjobs_with_auto.py b/llvm_tools/update_all_tryjobs_with_auto.py new file mode 100755 index 00000000..11e67ed4 --- /dev/null +++ b/llvm_tools/update_all_tryjobs_with_auto.py @@ -0,0 +1,80 @@ +#!/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() |