mirror of
https://github.com/servo/servo.git
synced 2025-07-16 11:53:39 +01:00
Auto merge of #16946 - jdm:report, r=Manishearth
Add intermittent failure reporting to filter-intermittents We need to address https://github.com/servo/saltfs/issues/671 before this can be enabled by default on the builders, but I got the pieces working locally. This collects relevant information about each recorded intermittent failure encountered during a test run and posts them to a webapp which stores them in a database for later investigation. This will allow us to track over time which intermittent test failures are the most frequent, as well as whether they only happen on a particular builder or operating system. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/16946) <!-- Reviewable:end -->
This commit is contained in:
commit
693c3dcfb2
2 changed files with 57 additions and 14 deletions
|
@ -3,7 +3,7 @@ mac-rel-wpt1:
|
|||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
||||
- ./mach test-wpt-failure
|
||||
- ./mach test-wpt --release --processes 4 --total-chunks 6 --this-chunk 1 --log-raw test-wpt.log --log-errorsummary wpt-errorsummary.log --always-succeed
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --use-tracker
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --tracker-api default --reporter-api default
|
||||
- ./mach test-wpt --release --binary-arg=--multiprocess --processes 8 --log-raw test-wpt-mp.log --log-errorsummary wpt-mp-errorsummary.log eventsource
|
||||
- bash ./etc/ci/lockfile_changed.sh
|
||||
- bash ./etc/ci/manifest_changed.sh
|
||||
|
@ -12,22 +12,22 @@ mac-rel-wpt2:
|
|||
- ./mach clean-nightlies --keep 3 --force
|
||||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
||||
- ./mach test-wpt --release --processes 4 --total-chunks 6 --this-chunk 2 --log-raw test-wpt.log --log-errorsummary wpt-errorsummary.log --always-succeed
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --use-tracker
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --tracker-api default --reporter-api default
|
||||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build-geckolib --release
|
||||
|
||||
mac-rel-wpt3:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
||||
- ./mach test-wpt --release --processes 4 --total-chunks 6 --this-chunk 3 --log-raw test-wpt.log --log-errorsummary wpt-errorsummary.log --always-succeed
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --use-tracker
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --tracker-api default --reporter-api default
|
||||
|
||||
mac-rel-wpt4:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
||||
- ./mach test-wpt --release --processes 4 --total-chunks 6 --this-chunk 4 --log-raw test-wpt.log --log-errorsummary wpt-errorsummary.log --always-succeed
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --use-tracker
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --tracker-api default --reporter-api default
|
||||
- ./mach test-wpt --release --pref dom.servoparser.async_html_tokenizer.enabled --processes=8 --log-raw test-async-parsing.log --log-errorsummary async-parsing-errorsummary.log --always-succeed domparsing html/syntax html/dom/documents html/dom/dynamic-markup-insertion
|
||||
- ./mach filter-intermittents async-parsing-errorsummary.log --log-intermittents async-parsing-intermittents.log --log-filteredsummary filtered-async-parsing-errorsummary.log --use-tracker
|
||||
- ./mach filter-intermittents async-parsing-errorsummary.log --log-intermittents async-parsing-intermittents.log --log-filteredsummary filtered-async-parsing-errorsummary.log --tracker-api default --reporter-api default
|
||||
|
||||
mac-dev-unit:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
|
@ -43,7 +43,7 @@ mac-rel-css1:
|
|||
- ./mach clean-nightlies --keep 3 --force
|
||||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
||||
- ./mach test-wpt --release --processes 4 --total-chunks 6 --this-chunk 5 --log-raw test-wpt.log --log-errorsummary wpt-errorsummary.log --always-succeed
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --use-tracker
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --tracker-api default --reporter-api default
|
||||
- bash ./etc/ci/lockfile_changed.sh
|
||||
- bash ./etc/ci/manifest_changed.sh
|
||||
|
||||
|
@ -51,7 +51,7 @@ mac-rel-css2:
|
|||
- ./mach clean-nightlies --keep 3 --force
|
||||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
||||
- ./mach test-wpt --release --processes 4 --total-chunks 6 --this-chunk 6 --log-raw test-wpt.log --log-errorsummary wpt-errorsummary.log --always-succeed
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --use-tracker
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --tracker-api default --reporter-api default
|
||||
|
||||
mac-nightly:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
|
@ -95,14 +95,14 @@ linux-rel-wpt:
|
|||
- ./mach build --release --with-debug-assertions
|
||||
- ./mach test-wpt-failure
|
||||
- ./mach test-wpt --release --processes 24 --total-chunks 2 --this-chunk 1 --log-raw test-wpt.log --log-errorsummary wpt-errorsummary.log --always-succeed
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --use-tracker
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --tracker-api default --reporter-api default
|
||||
- ./mach test-wpt --release --binary-arg=--multiprocess --processes 24 --log-raw test-wpt-mp.log --log-errorsummary wpt-mp-errorsummary.log eventsource
|
||||
|
||||
linux-rel-css:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- ./mach build --release --with-debug-assertions
|
||||
- ./mach test-wpt --release --processes 24 --total-chunks 2 --this-chunk 2 --log-raw test-wpt.log --log-errorsummary wpt-errorsummary.log --always-succeed
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --use-tracker
|
||||
- ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --tracker-api default --reporter-api default
|
||||
- ./mach build-geckolib --release
|
||||
- ./mach test-stylo --release
|
||||
- bash ./etc/ci/lockfile_changed.sh
|
||||
|
|
|
@ -14,13 +14,16 @@ import re
|
|||
import sys
|
||||
import os
|
||||
import os.path as path
|
||||
import platform
|
||||
import copy
|
||||
from collections import OrderedDict
|
||||
from time import time
|
||||
import json
|
||||
import urllib2
|
||||
import urllib
|
||||
import base64
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
from mach.registrar import Registrar
|
||||
from mach.decorators import (
|
||||
|
@ -517,9 +520,11 @@ class MachCommands(CommandBase):
|
|||
help='Print intermittents to file')
|
||||
@CommandArgument('--auth', default=None,
|
||||
help='File containing basic authorization credentials for Github API (format `username:password`)')
|
||||
@CommandArgument('--use-tracker', default=False, action='store_true',
|
||||
help='Use https://www.joshmatthews.net/intermittent-tracker')
|
||||
def filter_intermittents(self, summary, log_filteredsummary, log_intermittents, auth, use_tracker):
|
||||
@CommandArgument('--tracker-api', default=None, action='store',
|
||||
help='The API endpoint for tracking known intermittent failures.')
|
||||
@CommandArgument('--reporter-api', default=None, action='store',
|
||||
help='The API endpoint for reporting tracked intermittent failures.')
|
||||
def filter_intermittents(self, summary, log_filteredsummary, log_intermittents, auth, tracker_api, reporter_api):
|
||||
encoded_auth = None
|
||||
if auth:
|
||||
with open(auth, "r") as file:
|
||||
|
@ -533,9 +538,14 @@ class MachCommands(CommandBase):
|
|||
actual_failures = []
|
||||
intermittents = []
|
||||
for failure in failures:
|
||||
if use_tracker:
|
||||
if tracker_api:
|
||||
if tracker_api == 'default':
|
||||
tracker_api = "http://build.servo.org/intermittent-tracker"
|
||||
elif tracker_api.endswith('/'):
|
||||
tracker_api = tracker_api[0:-1]
|
||||
|
||||
query = urllib2.quote(failure['test'], safe='')
|
||||
request = urllib2.Request("http://build.servo.org/intermittent-tracker/query.py?name=%s" % query)
|
||||
request = urllib2.Request("%s/query.py?name=%s" % (tracker_api, query))
|
||||
search = urllib2.urlopen(request)
|
||||
data = json.load(search)
|
||||
if len(data) == 0:
|
||||
|
@ -556,6 +566,39 @@ class MachCommands(CommandBase):
|
|||
else:
|
||||
intermittents += [failure]
|
||||
|
||||
if reporter_api:
|
||||
if reporter_api == 'default':
|
||||
reporter_api = "http://build.servo.org/intermittent-failure-tracker"
|
||||
if reporter_api.endswith('/'):
|
||||
reporter_api = reporter_api[0:-1]
|
||||
reported = set()
|
||||
|
||||
proc = subprocess.Popen(
|
||||
["git", "log", "--merges", "--oneline", "-1"],
|
||||
stdout=subprocess.PIPE)
|
||||
(last_merge, _) = proc.communicate()
|
||||
|
||||
# Extract the issue reference from "abcdef Auto merge of #NNN"
|
||||
pull_request = int(last_merge.split(' ')[4][1:])
|
||||
|
||||
for intermittent in intermittents:
|
||||
if intermittent['test'] in reported:
|
||||
continue
|
||||
reported.add(intermittent['test'])
|
||||
|
||||
data = {
|
||||
'test_file': intermittent['test'],
|
||||
'platform': platform.system(),
|
||||
'builder': os.environ.get('BUILDER_NAME', 'BUILDER NAME MISSING'),
|
||||
'number': pull_request,
|
||||
}
|
||||
request = urllib2.Request("%s/record.py" % reporter_api, urllib.urlencode(data))
|
||||
request.add_header('Accept', 'application/json')
|
||||
response = urllib2.urlopen(request)
|
||||
data = json.load(response)
|
||||
if data['status'] != "success":
|
||||
print('Error reporting test failure: ' + data['error'])
|
||||
|
||||
if log_intermittents:
|
||||
with open(log_intermittents, "w") as intermittents_file:
|
||||
for intermittent in intermittents:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue