summaryrefslogtreecommitdiffstats
path: root/build/gen_test_packages_manifest.py
blob: 162f4e84209acfe581575c4ac7c65eb68cc1e83d (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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/python
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

import json
from argparse import ArgumentParser

ALL_HARNESSES = [
    "common",  # Harnesses without a specific package will look here.
    "condprof",
    "mochitest",
    "reftest",
    "xpcshell",
    "cppunittest",
    "jittest",
    "mozbase",
    "web-platform",
    "talos",
    "raptor",
    "awsy",
    "gtest",
    "updater-dep",
    "jsreftest",
    "perftests",
    "fuzztest",
]

PACKAGE_SPECIFIED_HARNESSES = [
    "condprof",
    "cppunittest",
    "mochitest",
    "reftest",
    "xpcshell",
    "web-platform",
    "talos",
    "raptor",
    "awsy",
    "updater-dep",
    "jittest",
    "jsreftest",
    "perftests",
    "fuzztest",
]

# These packages are not present for every build configuration.
OPTIONAL_PACKAGES = [
    "gtest",
]


def parse_args():
    parser = ArgumentParser(
        description="Generate a test_packages.json file to tell automation which harnesses "
        "require which test packages."
    )
    parser.add_argument(
        "--common",
        required=True,
        action="store",
        dest="tests_common",
        help='Name of the "common" archive, a package to be used by all ' "harnesses.",
    )
    parser.add_argument(
        "--jsshell",
        required=True,
        action="store",
        dest="jsshell",
        help="Name of the jsshell zip.",
    )
    for harness in PACKAGE_SPECIFIED_HARNESSES:
        parser.add_argument(
            "--%s" % harness,
            required=True,
            action="store",
            dest=harness,
            help="Name of the %s zip." % harness,
        )
    for harness in OPTIONAL_PACKAGES:
        parser.add_argument(
            "--%s" % harness,
            required=False,
            action="store",
            dest=harness,
            help="Name of the %s zip." % harness,
        )
    parser.add_argument(
        "--dest-file",
        required=True,
        action="store",
        dest="destfile",
        help="Path to the output file to be written.",
    )
    return parser.parse_args()


def generate_package_data(args):
    # Generate a dictionary mapping test harness names (exactly as they're known to
    # mozharness and testsuite-targets.mk, ideally) to the set of archive names that
    # harness depends on to run.
    # mozharness will use this file to determine what test zips to download,
    # which will be an optimization once parts of the main zip are split to harness
    # specific zips.
    tests_common = args.tests_common
    jsshell = args.jsshell

    harness_requirements = dict([(k, [tests_common]) for k in ALL_HARNESSES])
    harness_requirements["jittest"].append(jsshell)
    harness_requirements["jsreftest"].append(args.reftest)
    harness_requirements["common"].append("target.condprof.tests.tar.gz")
    for harness in PACKAGE_SPECIFIED_HARNESSES + OPTIONAL_PACKAGES:
        pkg_name = getattr(args, harness, None)
        if pkg_name is None:
            continue
        harness_requirements[harness].append(pkg_name)
        harness_requirements[harness].append("target.condprof.tests.tar.gz")
    return harness_requirements


if __name__ == "__main__":
    args = parse_args()
    packages_data = generate_package_data(args)
    with open(args.destfile, "w") as of:
        json.dump(packages_data, of, indent=4)