| #!/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() |