aboutsummaryrefslogtreecommitdiff
path: root/llvm_tools/update_all_tryjobs_with_auto.py
diff options
context:
space:
mode:
Diffstat (limited to 'llvm_tools/update_all_tryjobs_with_auto.py')
-rwxr-xr-xllvm_tools/update_all_tryjobs_with_auto.py80
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()