From 8ff90126404cda8957a68447d8159b8bbfba2370 Mon Sep 17 00:00:00 2001 From: Salud Lemus Date: Tue, 3 Sep 2019 16:58:14 -0700 Subject: LLVM tools: Added a simple custom script example This custom script determines what to set the tryjob's 'status' to based off of the script's exit code. BUG=None TEST=Ran the 'update_tryjob_status.py' script with `--custom_script` and `--set_status custom_script` option. Used the absolute path to this script for `--custom_script`. The tryjob's 'status' was updated correctly based off of the exit code by the custom script. Change-Id: Ib4fe58406ba6f9c9cb0cdc9dcc3e7d5e9bb18fb7 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/1783838 Reviewed-by: George Burgess Reviewed-by: Manoj Gupta Tested-by: Salud Lemus --- llvm_tools/custom_script_example.py | 72 +++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100755 llvm_tools/custom_script_example.py (limited to 'llvm_tools/custom_script_example.py') diff --git a/llvm_tools/custom_script_example.py b/llvm_tools/custom_script_example.py new file mode 100755 index 00000000..7e107ad8 --- /dev/null +++ b/llvm_tools/custom_script_example.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python2 +# -*- 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. + +"""A custom script example that utilizes the .JSON contents of the tryjob.""" + +from __future__ import print_function + +import json +import sys + +from update_tryjob_status import TryjobStatus + + +def main(): + """Determines the exit code based off of the contents of the .JSON file.""" + + # Index 1 in 'sys.argv' is the path to the .JSON file which contains + # the contents of the tryjob. + # + # Format of the tryjob contents: + # { + # "status" : [TRYJOB_STATUS], + # "buildbucket_id" : [BUILDBUCKET_ID], + # "extra_cls" : [A_LIST_OF_EXTRA_CLS_PASSED_TO_TRYJOB], + # "url" : [GERRIT_URL], + # "builder" : [TRYJOB_BUILDER_LIST], + # "rev" : [REVISION], + # "link" : [LINK_TO_TRYJOB], + # "options" : [A_LIST_OF_OPTIONS_PASSED_TO_TRYJOB] + # } + abs_path_json_file = sys.argv[1] + + with open(abs_path_json_file) as f: + tryjob_contents = json.load(f) + + CUTOFF_PENDING_REVISION = 369416 + + SKIP_REVISION_CUTOFF_START = 369420 + SKIP_REVISION_CUTOFF_END = 369428 + + if tryjob_contents['status'] == TryjobStatus.PENDING.value: + if tryjob_contents['rev'] <= CUTOFF_PENDING_REVISION: + # Exit code 0 means to set the tryjob 'status' as 'good'. + sys.exit(0) + + # Exit code 124 means to set the tryjob 'status' as 'bad'. + sys.exit(124) + + if tryjob_contents['status'] == TryjobStatus.BAD.value: + # Need to take a closer look at the contents of the tryjob to then decide + # what that tryjob's 'status' value should be. + # + # Since the exit code is not in the mapping, an exception will occur which + # will save the file in the directory of this custom script example. + sys.exit(1) + + if tryjob_contents['status'] == TryjobStatus.SKIP.value: + # Validate that the 'skip value is really set between the cutoffs. + if SKIP_REVISION_CUTOFF_START < tryjob_contents['rev'] < \ + SKIP_REVISION_CUTOFF_END: + # Exit code 125 means to set the tryjob 'status' as 'skip'. + sys.exit(125) + + if tryjob_contents['rev'] >= SKIP_REVISION_CUTOFF_END: + sys.exit(124) + + +if __name__ == '__main__': + main() -- cgit v1.2.3