From c1e19979daa3b6b8f9652ee266892a82aa61c10e Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 7 Apr 2025 18:42:02 +0200 Subject: [PATCH] check-keyalias-collision.py: codequality JSON output --- tools/check-keyalias-collision.py | 46 +++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/tools/check-keyalias-collision.py b/tools/check-keyalias-collision.py index 34fc1780d5..36a67954a1 100755 --- a/tools/check-keyalias-collision.py +++ b/tools/check-keyalias-collision.py @@ -3,7 +3,9 @@ import glob import hashlib import inspect +import json import os +import urllib.request import sys @@ -13,22 +15,48 @@ def generate_keyalias(s): return m.hexdigest()[:8] -base = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -metadata_files = sorted( - glob.glob(base + '/metadata/*.txt') + glob.glob(base + '/metadata/*.yml') -) +metadata_files = glob.glob("metadata/*.yml") + +CODEQUALITY_REPORT = list() +CHECK_NAME = os.path.basename(__file__) if not metadata_files: - print('No metadata files found!') + print("No metadata files found!") sys.exit(1) +errors = 0 keyaliases = dict() for f in metadata_files: appid = os.path.basename(f)[:-4] keyalias = generate_keyalias(appid) if keyalias in keyaliases: - print(appid, "keyalias conflicts with", keyaliases[keyalias]) - sys.exit(1) + errors += 1 + original = appid + conflicting = keyaliases[keyalias] + try: + url = f'https://f-droid.org/api/v1/packages/{appid}' + r = urllib.request.Request(url, method='HEAD') + with urllib.request.urlopen(r) as response: + if response.status == 200: + original = keyaliases[keyalias] + conflicting = appid + except urllib.error.URLError: + pass + msg = f"{conflicting} keyalias conflicts with {original}" + path = f'metadata/{conflicting}.yml' + print(msg) + CODEQUALITY_REPORT.append( + { + "description": msg, + "check_name": CHECK_NAME, + "fingerprint": CHECK_NAME + keyalias + f + path, + "severity": "blocker", + "location": {"path": path, "lines": {"begin": 0}}, + } + ) keyaliases[keyalias] = appid + +with open(f"{CHECK_NAME}.json", "w") as fp: + json.dump(CODEQUALITY_REPORT, fp) + +sys.exit(errors)