mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Report instances of intermittent failures to a tracker.
This commit is contained in:
parent
c0f85579c5
commit
c469cbbe72
1 changed files with 38 additions and 2 deletions
|
@ -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 (
|
||||||
|
@ -519,7 +522,9 @@ class MachCommands(CommandBase):
|
||||||
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('--tracker-api', default=None, action='store',
|
@CommandArgument('--tracker-api', default=None, action='store',
|
||||||
help='The API endpoint for tracking known intermittent failures.')
|
help='The API endpoint for tracking known intermittent failures.')
|
||||||
def filter_intermittents(self, summary, log_filteredsummary, log_intermittents, auth, tracker_api):
|
@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:
|
||||||
|
@ -536,7 +541,7 @@ class MachCommands(CommandBase):
|
||||||
if tracker_api:
|
if tracker_api:
|
||||||
if tracker_api == 'default':
|
if tracker_api == 'default':
|
||||||
tracker_api = "http://build.servo.org/intermittent-tracker"
|
tracker_api = "http://build.servo.org/intermittent-tracker"
|
||||||
else if tracker_api.endswith('/'):
|
elif tracker_api.endswith('/'):
|
||||||
tracker_api = tracker_api[0:-1]
|
tracker_api = tracker_api[0:-1]
|
||||||
|
|
||||||
query = urllib2.quote(failure['test'], safe='')
|
query = urllib2.quote(failure['test'], safe='')
|
||||||
|
@ -561,6 +566,37 @@ class MachCommands(CommandBase):
|
||||||
else:
|
else:
|
||||||
intermittents += [failure]
|
intermittents += [failure]
|
||||||
|
|
||||||
|
if reporter_api:
|
||||||
|
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