mirror of
https://github.com/servo/servo.git
synced 2025-06-17 04:44:28 +00:00
109 lines
3.4 KiB
Python
Executable file
109 lines
3.4 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
import argparse
|
|
import gzip
|
|
import logging
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
|
|
browser_specific_args = {
|
|
"servo": ["--install-browser", "--processes=12"]
|
|
}
|
|
|
|
|
|
def get_browser_args(product):
|
|
if product == "firefox":
|
|
local_binary = os.path.expanduser(os.path.join("~", "build", "firefox", "firefox"))
|
|
if os.path.exists(local_binary):
|
|
return ["--binary=%s" % local_binary]
|
|
print("WARNING: Local firefox binary not found")
|
|
return ["--install-browser", "--install-webdriver"]
|
|
return browser_specific_args.get(product, [])
|
|
|
|
|
|
def find_wptreport(args):
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--log-wptreport', action='store')
|
|
return parser.parse_known_args(args)[0].log_wptreport
|
|
|
|
|
|
def find_wptscreenshot(args):
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--log-wptscreenshot', action='store')
|
|
return parser.parse_known_args(args)[0].log_wptscreenshot
|
|
|
|
|
|
def gzip_file(filename, delete_original=True):
|
|
with open(filename, 'rb') as f_in:
|
|
with gzip.open('%s.gz' % filename, 'wb') as f_out:
|
|
shutil.copyfileobj(f_in, f_out)
|
|
if delete_original:
|
|
os.unlink(filename)
|
|
|
|
|
|
def main(product, commit_range, wpt_args):
|
|
"""Invoke the `wpt run` command according to the needs of the Taskcluster
|
|
continuous integration service."""
|
|
|
|
logger = logging.getLogger("tc-run")
|
|
logger.setLevel(logging.INFO)
|
|
handler = logging.StreamHandler()
|
|
handler.setFormatter(
|
|
logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
|
)
|
|
logger.addHandler(handler)
|
|
|
|
subprocess.call(['python', './wpt', 'manifest-download'])
|
|
|
|
if commit_range:
|
|
logger.info(
|
|
"Running tests affected in range '%s'..." % commit_range
|
|
)
|
|
wpt_args += ['--affected', commit_range]
|
|
else:
|
|
logger.info("Running all tests")
|
|
|
|
wpt_args += [
|
|
"--log-mach-level=info",
|
|
"--log-mach=-",
|
|
"-y",
|
|
"--no-pause",
|
|
"--no-restart-on-unexpected",
|
|
"--install-fonts",
|
|
"--no-headless",
|
|
"--verify-log-full"
|
|
]
|
|
wpt_args += get_browser_args(product)
|
|
|
|
# Hack to run servo with one process only for wdspec
|
|
if product == "servo" and "--test-type=wdspec" in wpt_args:
|
|
wpt_args = [item for item in wpt_args if not item.startswith("--processes")]
|
|
|
|
command = ["python", "./wpt", "run"] + wpt_args + [product]
|
|
|
|
logger.info("Executing command: %s" % " ".join(command))
|
|
retcode = subprocess.call(command, env=dict(os.environ, TERM="dumb"))
|
|
if retcode != 0:
|
|
sys.exit(retcode)
|
|
|
|
wptreport = find_wptreport(wpt_args)
|
|
if wptreport:
|
|
gzip_file(wptreport)
|
|
wptscreenshot = find_wptscreenshot(wpt_args)
|
|
if wptscreenshot:
|
|
gzip_file(wptscreenshot)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description=main.__doc__)
|
|
parser.add_argument("--commit-range", action="store",
|
|
help="""Git commit range. If specified, this will be
|
|
supplied to the `wpt tests-affected` command to
|
|
determine the list of test to execute""")
|
|
parser.add_argument("product", action="store",
|
|
help="Browser to run tests in")
|
|
parser.add_argument("wpt_args", nargs="*",
|
|
help="Arguments to forward to `wpt run` command")
|
|
main(**vars(parser.parse_args()))
|