blob: b3a4ed4ee219e41829ea82c9a57053fc9c5deca0 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
import utils
import datetime
import os
CHOICES = ["all", "failing", "past-failing", "outstanding"]
DEFAULT_REPORTS_ROOT = os.path.join(utils.BUILD, "testing-state")
def set_up_test_state(gradle_args, testing_state_mode, testing_state_path):
if not testing_state_mode:
return
if not testing_state_path:
testing_state_path = os.path.join(DEFAULT_REPORTS_ROOT,
utils.get_HEAD_branch())
testing_state_path = os.path.abspath(testing_state_path)
gradle_args.append('-Ptesting-state-mode=%s' % testing_state_mode)
gradle_args.append('-Ptesting-state-path=%s' % testing_state_path)
prepare_testing_index(testing_state_mode, testing_state_path)
def fresh_testing_index(testing_state_dir):
number = 0
while True:
freshIndex = os.path.join(testing_state_dir, "index.%d.html" % number)
number += 1
if not os.path.exists(freshIndex):
return freshIndex
def prepare_testing_index(testing_state_mode, testing_state_dir):
if not os.path.exists(testing_state_dir):
os.makedirs(testing_state_dir)
index_path = os.path.join(testing_state_dir, "index.html")
parent_report = None
resuming = os.path.exists(index_path)
mode = testing_state_mode if resuming else f"starting (flag: {testing_state_mode})"
if (resuming):
parent_report = fresh_testing_index(testing_state_dir)
os.rename(index_path, parent_report)
index = open(index_path, "a")
title = f"Testing: {os.path.basename(testing_state_dir)}"
# Print a console link to the test report for easy access.
print("=" * 70)
print("Test report written to:")
print(f" file://{index_path}")
print("=" * 70)
# Print the new index content.
index.write(f"<html><head><title>{title}</title>")
index.write("<style> * { font-family: monospace; }</style>")
index.write("<meta http-equiv='refresh' content='10' />")
index.write(f"</head><body><h1>{title}</h1>")
index.write(f"<h2>Mode: {mode}</h2>")
# write index links first to avoid jumping when browsing.
if parent_report:
index.write(
f"<p><a href=\"file://{parent_report}\">Previous result index</a></p>"
)
index.write(
f"<p><a href=\"file://{index_path}\">Most recent result index</a></p>")
index.write(
f"<p><a href=\"file://{testing_state_dir}\">Test directories</a></p>")
# git branch/hash and diff for future reference
index.write(f"<p>Run on: {datetime.datetime.now()}</p>")
index.write(f"<p>State path: {testing_state_dir}</p>")
index.write(f"<p>Git branch: {utils.get_HEAD_branch()}")
index.write(f"</br>Git SHA: {utils.get_HEAD_sha1()}")
index.write(f'</br>Git diff summary:\n')
index.write(
f'<pre style="background-color: lightgray">{utils.get_HEAD_diff_stat()}</pre></p>'
)
# header for the failing tests
index.write(
"<h2>Failing tests (refreshing automatically every 10 seconds)</h2><ul>"
)