75 lines
3.1 KiB
Python
75 lines
3.1 KiB
Python
# mypy: allow-untyped-defs
|
|
|
|
import logging
|
|
import os
|
|
import subprocess
|
|
from argparse import ArgumentParser
|
|
|
|
logger = logging.getLogger()
|
|
|
|
wpt_root = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))
|
|
|
|
# These paths should be kept in sync with job_path_map in jobs.py.
|
|
scripts = {
|
|
"canvas": ["html/canvas/tools/gentest.py"],
|
|
"conformance-checkers": ["conformance-checkers/tools/dl.py",
|
|
"conformance-checkers/tools/ins-del-datetime.py",
|
|
"conformance-checkers/tools/picture.py",
|
|
"conformance-checkers/tools/url.py"],
|
|
"css-images": ["css/css-images/tools/generate_object_view_box_tests.py"],
|
|
"css-ui": ["css/css-ui/tools/appearance-build-webkit-reftests.py"],
|
|
"css-writing-modes": ["css/css-writing-modes/tools/generators/generate.py"],
|
|
# FIXME: https://github.com/web-platform-tests/wpt/issues/32060
|
|
# "css-text": ["css/css-text/line-breaking/tools/generate-segment-break-transformation-rules-tests.py"],
|
|
# "css-text-decor": ["css/css-text-decor/tools/generate-text-emphasis-line-height-tests.py",
|
|
# "css/css-text-decor/tools/generate-text-emphasis-position-property-tests.py",
|
|
# "css/css-text-decor/tools/generate-text-emphasis-ruby-tests.py",
|
|
# "css/css-text-decor/tools/generate-text-emphasis-style-property-tests.py"],
|
|
"fetch": ["fetch/metadata/tools/generate.py"],
|
|
"html5lib": ["html/tools/update_html5lib_tests.py"],
|
|
"infrastructure": ["infrastructure/assumptions/tools/ahem-generate-table.py"],
|
|
"mimesniff": ["mimesniff/mime-types/resources/generated-mime-types.py"],
|
|
"speculative-parsing": ["html/syntax/speculative-parsing/tools/generate.py"]
|
|
}
|
|
|
|
|
|
def get_parser():
|
|
parser = ArgumentParser()
|
|
parser.add_argument("--list", action="store_true",
|
|
help="List suites that can be updated and the related script files")
|
|
parser.add_argument("--include", nargs="*", choices=scripts.keys(),
|
|
help="Suites to update (default is to update everything)")
|
|
return parser
|
|
|
|
|
|
def list_suites(include):
|
|
for name, script_paths in scripts.items():
|
|
if name in include:
|
|
print(name)
|
|
for script_path in script_paths:
|
|
print(f" {script_path}")
|
|
|
|
|
|
def run(venv, **kwargs):
|
|
include = kwargs["include"]
|
|
if include is None:
|
|
include = list(scripts.keys())
|
|
|
|
if kwargs["list"]:
|
|
list_suites(include)
|
|
return 0
|
|
|
|
failed = False
|
|
|
|
for target in include:
|
|
for script in scripts[target]:
|
|
script_path = script.replace("/", os.path.sep)
|
|
cmd = [os.path.join(venv.bin_path, "python3"), os.path.join(wpt_root, script_path)]
|
|
logger.info(f"Running {' '.join(cmd)}")
|
|
try:
|
|
subprocess.check_call(cmd, cwd=os.path.dirname(script_path))
|
|
except subprocess.CalledProcessError:
|
|
logger.error(f"Update script {script} failed")
|
|
failed = True
|
|
|
|
return 1 if failed else 0
|