Source code

Revision control

Copy as Markdown

Other Tools

# 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
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import argparse
import json
import pathlib
def filter_changes(line):
# Skip diff headers
if line.startswith("---") or line.startswith("+++"):
return False
# Only count lines that changed
return line.startswith("-") or line.startswith("+")
def run():
parser = argparse.ArgumentParser(
description="Classify output of taskgraph for CI analsyis"
)
parser.add_argument(
"path",
type=pathlib.Path,
help="Folder containing all the TXT files from taskgraph target.",
)
parser.add_argument(
"threshold",
type=int,
help="Minimum number of lines to trigger a warning on taskgraph output.",
)
args = parser.parse_args()
out = {"files": {}, "status": "OK", "threshold": args.threshold}
for path in args.path.glob("*.txt"):
with path.open() as f:
nb = len(list(filter(filter_changes, f.readlines())))
out["files"][path.stem] = {
"nb": nb,
"status": "WARNING" if nb >= args.threshold else "OK",
}
if nb >= args.threshold:
out["status"] = "WARNING"
(args.path / "summary.json").write_text(json.dumps(out, sort_keys=True, indent=4))
if __name__ == "__main__":
run()