blob: 11e67ed4b50916ce4f8380ad997d63bf01055669 [file] [log] [blame]
#!/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()