build/gen_test_packages_manifest.py
author Brian Hackett <bhackett1024@gmail.com>
Wed, 14 Nov 2018 16:09:58 -1000
changeset 446931 1c7fc8389e012c987347efefca6b35f3948b742a
parent 437642 eeb4c8b9087292d98d1ddd8ffead55a6b5838496
child 449619 b2a0ae5e511537db7d316ce5a8de1b739290595b
permissions -rw-r--r--
Bug 1507359 Part 2 - Bindings and internal changes to allow ReplayDebugger to control child pausing/resuming, r=mccr8.

#!/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.
    'mochitest',
    'reftest',
    'xpcshell',
    'cppunittest',
    'jittest',
    'mozbase',
    'web-platform',
    'talos',
    'raptor',
    'awsy',
    'gtest',
    'updater-dep'
]

PACKAGE_SPECIFIED_HARNESSES = [
    'cppunittest',
    'mochitest',
    'reftest',
    'xpcshell',
    'web-platform',
    'talos',
    'raptor',
    'awsy',
    'updater-dep',
]

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