| OLD | NEW |
| 1 from __future__ import print_function |
| 2 |
| 1 import argparse | 3 import argparse |
| 2 import json | 4 import json |
| 3 import logging | 5 import logging |
| 4 import os | 6 import os |
| 5 import re | 7 import re |
| 6 import stat | 8 import stat |
| 7 import subprocess | 9 import subprocess |
| 8 import sys | 10 import sys |
| 9 import tarfile | 11 import tarfile |
| 10 import traceback | 12 import traceback |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 def __init__(self, inner, actions): | 70 def __init__(self, inner, actions): |
| 69 BaseHandler.__init__(self, inner) | 71 BaseHandler.__init__(self, inner) |
| 70 self.inner = inner | 72 self.inner = inner |
| 71 self.actions = actions | 73 self.actions = actions |
| 72 | 74 |
| 73 def __call__(self, item): | 75 def __call__(self, item): |
| 74 if item["action"] in self.actions: | 76 if item["action"] in self.actions: |
| 75 return self.inner(item) | 77 return self.inner(item) |
| 76 | 78 |
| 77 | 79 |
| 80 class TravisFold(object): |
| 81 def __init__(self, name): |
| 82 self.name = name |
| 83 |
| 84 def __enter__(self): |
| 85 print("travis_fold:start:%s" % self.name, file=sys.stderr) |
| 86 |
| 87 def __exit__(self, type, value, traceback): |
| 88 print("travis_fold:end:%s" % self.name, file=sys.stderr) |
| 89 |
| 90 |
| 78 class GitHub(object): | 91 class GitHub(object): |
| 79 def __init__(self, org, repo, token): | 92 def __init__(self, org, repo, token): |
| 80 self.token = token | 93 self.token = token |
| 81 self.headers = {"Accept": "application/vnd.github.v3+json"} | 94 self.headers = {"Accept": "application/vnd.github.v3+json"} |
| 82 self.auth = (self.token, "x-oauth-basic") | 95 self.auth = (self.token, "x-oauth-basic") |
| 83 self.org = org | 96 self.org = org |
| 84 self.repo = repo | 97 self.repo = repo |
| 85 self.base_url = "https://api.github.com/repos/%s/%s/" % (org, repo) | 98 self.base_url = "https://api.github.com/repos/%s/%s/" % (org, repo) |
| 86 | 99 |
| 87 def _headers(self, headers): | 100 def _headers(self, headers): |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 return 1 | 504 return 1 |
| 492 | 505 |
| 493 os.chdir(args.root) | 506 os.chdir(args.root) |
| 494 | 507 |
| 495 if args.gh_token: | 508 if args.gh_token: |
| 496 gh_handler = setup_github_logging(args) | 509 gh_handler = setup_github_logging(args) |
| 497 else: | 510 else: |
| 498 logger.warning("Can't log to GitHub") | 511 logger.warning("Can't log to GitHub") |
| 499 gh_handler = None | 512 gh_handler = None |
| 500 | 513 |
| 501 print >> sys.stderr, "travis_fold:start:browser_setup" | 514 with TravisFold("browser_setup"): |
| 502 logger.info("# %s #" % args.browser.title()) | 515 logger.info("# %s #" % args.browser.title()) |
| 503 | 516 |
| 504 browser_cls = {"firefox": Firefox, | 517 browser_cls = {"firefox": Firefox, |
| 505 "chrome": Chrome}.get(args.browser) | 518 "chrome": Chrome}.get(args.browser) |
| 506 if browser_cls is None: | 519 if browser_cls is None: |
| 507 logger.critical("Unrecognised browser %s" % args.browser) | 520 logger.critical("Unrecognised browser %s" % args.browser) |
| 508 return 1 | 521 return 1 |
| 509 | 522 |
| 510 fetch_wpt_master() | 523 fetch_wpt_master() |
| 511 | 524 |
| 512 head_sha1 = get_sha1() | 525 head_sha1 = get_sha1() |
| 513 logger.info("Testing revision %s" % head_sha1) | 526 logger.info("Testing revision %s" % head_sha1) |
| 514 | 527 |
| 515 # For now just pass the whole list of changed files to wptrunner and | 528 # For now just pass the whole list of changed files to wptrunner and |
| 516 # assume that it will run everything that's actually a test | 529 # assume that it will run everything that's actually a test |
| 517 files_changed = get_files_changed() | 530 files_changed = get_files_changed() |
| 518 | 531 |
| 519 if not files_changed: | 532 if not files_changed: |
| 520 logger.info("No files changed") | 533 logger.info("No files changed") |
| 521 return 0 | 534 return 0 |
| 522 | 535 |
| 523 build_manifest() | 536 build_manifest() |
| 524 install_wptrunner() | 537 install_wptrunner() |
| 525 do_delayed_imports() | 538 do_delayed_imports() |
| 526 | 539 |
| 527 logger.debug("Files changed:\n%s" % "".join(" * %s\n" % item for item in fil
es_changed)) | 540 logger.debug("Files changed:\n%s" % "".join(" * %s\n" % item for item in
files_changed)) |
| 528 | 541 |
| 529 browser = browser_cls(args.gh_token) | 542 browser = browser_cls(args.gh_token) |
| 530 | 543 |
| 531 browser.install() | 544 browser.install() |
| 532 browser.install_webdriver() | 545 browser.install_webdriver() |
| 533 | 546 |
| 534 kwargs = wptrunner_args(args.root, | 547 kwargs = wptrunner_args(args.root, |
| 535 files_changed, | 548 files_changed, |
| 536 args.iterations, | 549 args.iterations, |
| 537 browser) | 550 browser) |
| 538 | 551 |
| 539 print >> sys.stderr, "travis_fold:end:browser_setup" | 552 with TravisFold("running_tests"): |
| 540 print >> sys.stderr, "travis_fold:start:running_tests" | 553 logger.info("Starting %i test iterations" % args.iterations) |
| 541 logger.info("Starting %i test iterations" % args.iterations) | 554 with open("raw.log", "wb") as log: |
| 542 with open("raw.log", "wb") as log: | 555 wptrunner.setup_logging(kwargs, |
| 543 wptrunner.setup_logging(kwargs, | 556 {"raw": log}) |
| 544 {"raw": log}) | 557 # Setup logging for wptrunner that keeps process output and |
| 545 # Setup logging for wptrunner that keeps process output and | 558 # warning+ level logs only |
| 546 # warning+ level logs only | 559 wptrunner.logger.add_handler( |
| 547 wptrunner.logger.add_handler( | 560 LogActionFilter( |
| 548 LogActionFilter( | 561 LogLevelFilter( |
| 549 LogLevelFilter( | 562 StreamHandler( |
| 550 StreamHandler( | 563 sys.stdout, |
| 551 sys.stdout, | 564 TbplFormatter() |
| 552 TbplFormatter() | 565 ), |
| 553 ), | 566 "WARNING"), |
| 554 "WARNING"), | 567 ["log", "process_output"])) |
| 555 ["log", "process_output"])) | |
| 556 | 568 |
| 557 wptrunner.run_tests(**kwargs) | 569 wptrunner.run_tests(**kwargs) |
| 558 | 570 |
| 559 with open("raw.log", "rb") as log: | 571 with open("raw.log", "rb") as log: |
| 560 results, inconsistent = process_results(log, args.iterations) | 572 results, inconsistent = process_results(log, args.iterations) |
| 561 | |
| 562 print >> sys.stderr, "travis_fold:end:running_tests" | |
| 563 | 573 |
| 564 if results: | 574 if results: |
| 565 if inconsistent: | 575 if inconsistent: |
| 566 write_inconsistent(inconsistent, args.iterations) | 576 write_inconsistent(inconsistent, args.iterations) |
| 567 retcode = 2 | 577 retcode = 2 |
| 568 else: | 578 else: |
| 569 logger.info("All results were stable\n") | 579 logger.info("All results were stable\n") |
| 570 print >> sys.stderr, "travis_fold:start:full_results" | 580 with TravisFold("full_results"): |
| 571 write_results(results, args.iterations, args.comment_pr) | 581 write_results(results, args.iterations, args.comment_pr) |
| 572 print >> sys.stderr, "travis_fold:end:full_results" | |
| 573 else: | 582 else: |
| 574 logger.info("No tests run.") | 583 logger.info("No tests run.") |
| 575 | 584 |
| 576 try: | 585 try: |
| 577 if gh_handler: | 586 if gh_handler: |
| 578 gh_handler.send() | 587 gh_handler.send() |
| 579 except Exception: | 588 except Exception: |
| 580 logger.error(traceback.format_exc()) | 589 logger.error(traceback.format_exc()) |
| 581 return retcode | 590 return retcode |
| 582 | 591 |
| 583 | 592 |
| 584 if __name__ == "__main__": | 593 if __name__ == "__main__": |
| 585 try: | 594 try: |
| 586 retcode = main() | 595 retcode = main() |
| 587 except: | 596 except: |
| 588 raise | 597 raise |
| 589 else: | 598 else: |
| 590 sys.exit(retcode) | 599 sys.exit(retcode) |
| OLD | NEW |