aboutsummaryrefslogtreecommitdiff
path: root/llvm_tools/custom_script_example.py
blob: a2d6a66a750a655af9a87c293c7c6619c3a29db3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/usr/bin/env python3
# Copyright 2019 The ChromiumOS Authors
# 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."""

import json
import sys

import update_tryjob_status


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, encoding="utf-8") 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"]
        == update_tryjob_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"] == update_tryjob_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"]
        == update_tryjob_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()