Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generalize the 2020 regression report to show local unexpected failures #26437

Merged
merged 2 commits into from May 7, 2020
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

@@ -6,7 +6,7 @@
/.vs
/android-toolchains
/target
/etc/layout-2020-regressions/regressions.html
/tests/wpt/reftests-report/report.html
/ports/android/bin
/ports/android/libs
/ports/android/local.properties
@@ -260,12 +260,13 @@ def layout_2020_regressions_report():
.with_dockerfile(dockerfile_path("base"))
.with_repo_bundle()
.with_script(
"python3 etc/layout-2020-regressions/gen.py %s %s"
"python3 tests/wpt/reftests-report/gen.py %s %s"
% (CONFIG.tree_hash(), CONFIG.git_sha)
)
.with_index_and_artifacts_expire_in(log_artifacts_expire_in)
.with_artifacts("/repo/etc/layout-2020-regressions/regressions.html")
.find_or_create("layout-2020-regressions-report")
.with_artifacts("/repo/tests/wpt/reftests-report/report.html")
.with_index_at("layout-2020-regressions-report")
.create()
)

def macos_unit():
@@ -157,6 +157,10 @@ def __init__(self, name):

with_extra = chaining(update_attr, "extra")

def with_index_at(self, index_path):
self.routes.append("index.%s.%s" % (CONFIG.index_prefix, index_path))

This comment has been minimized.

@jdm

jdm May 6, 2020

Member

This needs to return self.

return self

def with_treeherder_required(self):
self.treeherder_required = True
return self
@@ -291,7 +295,7 @@ def find_or_create(self, index_path):
if e.status_code != 404: # pragma: no cover
raise
if not CONFIG.index_read_only:
self.routes.append("index.%s.%s" % (CONFIG.index_prefix, index_path))
self.with_index_at(index_path)
task_id = self.create()

SHARED.found_or_created_indexed_tasks[index_path] = task_id
@@ -83,6 +83,7 @@ files = [
# Python 3 syntax causes "E901 SyntaxError" when flake8 runs in Python 2
"./etc/taskcluster/decision_task.py",
"./etc/taskcluster/decisionlib.py",
"./tests/wpt/reftests-report/gen.py",
"./components/style/properties/build.py",
]
# Directories that are ignored for the non-WPT tidy check.
@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -41,33 +41,49 @@ def failing_reftests(platform, key):

for chunk in range(1, total_chunks + 1):
with fetch(task(platform, chunk, key) + "/artifacts/public/test-wpt.log") as response:
for line in response:
message = json.loads(line)
if message.get("status") not in {None, "OK", "PASS"}:
screenshots = message.get("extra", {}).get("reftest_screenshots")
if screenshots:
yield message["test"], screenshots


def main(index_key, commit_sha):
failures_2013 = {url for url, _ in failing_reftests("linux_x64", index_key)}
failures_2020 = Directory()
for url, screenshots in failing_reftests("linux_x64_2020", index_key):
if url not in failures_2013:
assert url.startswith("/")
failures_2020.add(url[1:], screenshots)
yield from parse(response)


def parse(file_like):
seen = set()
for line in file_like:
message = json.loads(line)
status = message.get("status")
if status not in {None, "OK", "PASS"}:
screenshots = message.get("extra", {}).get("reftest_screenshots")
if screenshots:
url = message["test"]
assert url.startswith("/")
yield url[1:], message.get("expected") == "PASS", screenshots


def main(source, commit_sha=None):
failures = Directory()

if commit_sha:
title = "<h1>Layout 2020 regressions in commit <code>%s</code></h1>" % commit_sha
failures_2013 = {url for url, _ in failing_reftests("linux_x64", source)}
for url, _expected_pass, screenshots in failing_reftests("linux_x64_2020", source):
if url not in failures_2013:
failures.add(url, screenshots)
else:
title = "Unexpected failures"
with open(source, "rb") as file_obj:
for url, expected_pass, screenshots in parse(file_obj):
if expected_pass:
failures.add(url, screenshots)

here = os.path.dirname(__file__)
with open(os.path.join(here, "prism.js")) as f:
prism_js = f.read()
with open(os.path.join(here, "prism.css")) as f:
prism_css = f.read()
with open(os.path.join(here, "regressions.html"), "w", encoding="utf-8") as html:
os.chdir(os.path.join(here, "../../tests/wpt"))
with open(os.path.join(here, "report.html"), "w", encoding="utf-8") as html:
os.chdir(os.path.join(here, ".."))
html.write("""
<!doctype html>
<meta charset=utf-8>
<title>Layout 2020 regressions</title>
<title>WPT reftests failures report</title>
<link rel=stylesheet href=prism.css>
<style>
ul { padding-left: 1em }
@@ -80,11 +96,11 @@ def main(index_key, commit_sha):
li > div > img:hover { transform: scale(3); transform-origin: 0 0 }
li > div > pre { grid-row: 3; font-size: 12px !important }
pre code { white-space: pre-wrap !important }
%s
<h1>%s</h1>
</style>
<h1>Layout 2020 regressions in tree <code>%s</code></h1>
""" % (prism_css, commit_sha))
failures_2020.write(html)
%s
""" % (prism_css, title))
failures.write(html)
html.write("""
<script>
for (let li of document.getElementsByTagName("li")) {
@@ -129,11 +145,15 @@ def write(self, html):
prefix = "/_mozilla/"
if url.startswith(prefix):
filename = "mozilla/tests/" + url[len(prefix):]
elif url == "about:blank":
src = ""
filename = None
else:
filename = "web-platform-tests" + url
with open(filename, encoding="utf-8") as f:
src = html_escape(f.read())
html.write("<pre><code class=language-html>%s</code></pre>\n" % src)
if filename:
with open(filename, encoding="utf-8") as f:
src = html_escape(f.read())
html.write("<pre><code class=language-html>%s</code></pre>\n" % src)
html.write("</li>\n")
html.write("</ul>\n")

ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.