gecko-dev/build/gen_test_packages_manifest.py

127 lines
3.4 KiB
Python

#!/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)