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 |