mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D186092
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# 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()
 |