mirror of
https://github.com/servo/servo.git
synced 2025-07-17 12:23:40 +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
|
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
||||||
- ./mach test-wpt-failure
|
- ./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 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
|
- ./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/lockfile_changed.sh
|
||||||
- bash ./etc/ci/manifest_changed.sh
|
- bash ./etc/ci/manifest_changed.sh
|
||||||
|
@ -12,22 +12,22 @@ mac-rel-wpt2:
|
||||||
- ./mach clean-nightlies --keep 3 --force
|
- ./mach clean-nightlies --keep 3 --force
|
||||||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
- 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 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
|
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build-geckolib --release
|
||||||
|
|
||||||
mac-rel-wpt3:
|
mac-rel-wpt3:
|
||||||
- ./mach clean-nightlies --keep 3 --force
|
- ./mach clean-nightlies --keep 3 --force
|
||||||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
- 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 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:
|
mac-rel-wpt4:
|
||||||
- ./mach clean-nightlies --keep 3 --force
|
- ./mach clean-nightlies --keep 3 --force
|
||||||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
- 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 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 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:
|
mac-dev-unit:
|
||||||
- ./mach clean-nightlies --keep 3 --force
|
- ./mach clean-nightlies --keep 3 --force
|
||||||
|
@ -43,7 +43,7 @@ mac-rel-css1:
|
||||||
- ./mach clean-nightlies --keep 3 --force
|
- ./mach clean-nightlies --keep 3 --force
|
||||||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
- 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 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/lockfile_changed.sh
|
||||||
- bash ./etc/ci/manifest_changed.sh
|
- bash ./etc/ci/manifest_changed.sh
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ mac-rel-css2:
|
||||||
- ./mach clean-nightlies --keep 3 --force
|
- ./mach clean-nightlies --keep 3 --force
|
||||||
- env PKG_CONFIG_PATH=/usr/local/opt/zlib/lib/pkgconfig ./mach build --release
|
- 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 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:
|
mac-nightly:
|
||||||
- ./mach clean-nightlies --keep 3 --force
|
- ./mach clean-nightlies --keep 3 --force
|
||||||
|
@ -95,14 +95,14 @@ linux-rel-wpt:
|
||||||
- ./mach build --release --with-debug-assertions
|
- ./mach build --release --with-debug-assertions
|
||||||
- ./mach test-wpt-failure
|
- ./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 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
|
- ./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:
|
linux-rel-css:
|
||||||
- ./mach clean-nightlies --keep 3 --force
|
- ./mach clean-nightlies --keep 3 --force
|
||||||
- ./mach build --release --with-debug-assertions
|
- ./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 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 build-geckolib --release
|
||||||
- ./mach test-stylo --release
|
- ./mach test-stylo --release
|
||||||
- bash ./etc/ci/lockfile_changed.sh
|
- bash ./etc/ci/lockfile_changed.sh
|
||||||
|
|
|
@ -14,13 +14,16 @@ import re
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import os.path as path
|
import os.path as path
|
||||||
|
import platform
|
||||||
import copy
|
import copy
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from time import time
|
from time import time
|
||||||
import json
|
import json
|
||||||
import urllib2
|
import urllib2
|
||||||
|
import urllib
|
||||||
import base64
|
import base64
|
||||||
import shutil
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
|
||||||
from mach.registrar import Registrar
|
from mach.registrar import Registrar
|
||||||
from mach.decorators import (
|
from mach.decorators import (
|
||||||
|
@ -517,9 +520,11 @@ class MachCommands(CommandBase):
|
||||||
help='Print intermittents to file')
|
help='Print intermittents to file')
|
||||||
@CommandArgument('--auth', default=None,
|
@CommandArgument('--auth', default=None,
|
||||||
help='File containing basic authorization credentials for Github API (format `username:password`)')
|
help='File containing basic authorization credentials for Github API (format `username:password`)')
|
||||||
@CommandArgument('--use-tracker', default=False, action='store_true',
|
@CommandArgument('--tracker-api', default=None, action='store',
|
||||||
help='Use https://www.joshmatthews.net/intermittent-tracker')
|
help='The API endpoint for tracking known intermittent failures.')
|
||||||
def filter_intermittents(self, summary, log_filteredsummary, log_intermittents, auth, use_tracker):
|
@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
|
encoded_auth = None
|
||||||
if auth:
|
if auth:
|
||||||
with open(auth, "r") as file:
|
with open(auth, "r") as file:
|
||||||
|
@ -533,9 +538,14 @@ class MachCommands(CommandBase):
|
||||||
actual_failures = []
|
actual_failures = []
|
||||||
intermittents = []
|
intermittents = []
|
||||||
for failure in failures:
|
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='')
|
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)
|
search = urllib2.urlopen(request)
|
||||||
data = json.load(search)
|
data = json.load(search)
|
||||||
if len(data) == 0:
|
if len(data) == 0:
|
||||||
|
@ -556,6 +566,39 @@ class MachCommands(CommandBase):
|
||||||
else:
|
else:
|
||||||
intermittents += [failure]
|
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:
|
if log_intermittents:
|
||||||
with open(log_intermittents, "w") as intermittents_file:
|
with open(log_intermittents, "w") as intermittents_file:
|
||||||
for intermittent in intermittents:
|
for intermittent in intermittents:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue