]>
Commit | Line | Data |
---|---|---|
f7b722dc | 1 | #!/usr/bin/python3 |
f7b722dc | 2 | import re |
5826ff6e CH |
3 | import sys |
4 | ||
5 | import requests | |
6 | import yaml | |
7 | ||
8 | ||
9 | PACKAGE_NAMES = ["pdns", "pdns-recursor", "dnsdist"] | |
f7b722dc | 10 | |
5826ff6e CH |
11 | |
12 | def get_bugs_titles(bugs): | |
f7b722dc | 13 | ret = [] |
5826ff6e | 14 | title_regex = re.compile(r"<title>(.*) - Debian Bug report logs</title>") |
f7b722dc | 15 | for bug in bugs: |
5826ff6e CH |
16 | bug_r = requests.get("https://bugs.debian.org/cgi-bin/bugreport.cgi", params={"bug": bug}) |
17 | lines = bug_r.text.split("\n") | |
f7b722dc PD |
18 | for line in lines: |
19 | match = title_regex.search(line) | |
20 | if match: | |
21 | ret.append(match.group(1)) | |
22 | break | |
23 | return ret | |
24 | ||
25 | ||
5826ff6e CH |
26 | def get_all_autoremovals(): |
27 | r = requests.get("https://udd.debian.org/cgi-bin/autoremovals.yaml.cgi") | |
28 | return yaml.load(r.text, Loader=yaml.SafeLoader) | |
f7b722dc | 29 | |
f7b722dc | 30 | |
5826ff6e CH |
31 | def warn_removal(all_autoremovals, package_name): |
32 | removal = all_autoremovals.get(package_name) | |
33 | if not removal: | |
34 | return False | |
f7b722dc | 35 | |
5826ff6e CH |
36 | reason = "there are bugged dependencies." if removal["dependencies_only"] else "of a bug in PowerDNS!" |
37 | msg = ( | |
38 | f"::warning ::{package_name} slated for removal from Debian on " | |
39 | f"{removal['removal_date']} (https://tracker.debian.org/pkg/{package_name}) " | |
40 | f"because {reason}\n\n" | |
41 | ) | |
f7b722dc | 42 | |
5826ff6e | 43 | bugs = get_bugs_titles(removal.get("bugs_dependencies", [])) |
f7b722dc | 44 | if len(bugs): |
5826ff6e CH |
45 | msg += f"This is caused by the following dependency bug{'s' if len(bugs) > 1 else ''}:\n " |
46 | msg += ("\n ".join(bugs)) + "\n" | |
f7b722dc | 47 | |
5826ff6e | 48 | bugs = get_bugs_titles(removal["bugs"]) |
f7b722dc | 49 | if len(bugs): |
5826ff6e CH |
50 | msg += f"This is caused by the following bug{'s' if len(bugs) > 1 else ''} in PowerDNS:\n " |
51 | msg += ("\n ".join(bugs)) + "\n" | |
f7b722dc PD |
52 | |
53 | print(msg) | |
5826ff6e CH |
54 | return True |
55 | ||
56 | ||
57 | def main(): | |
58 | all_autoremovals = get_all_autoremovals() | |
59 | removals = [] | |
60 | for package_name in PACKAGE_NAMES: | |
61 | if warn_removal(all_autoremovals, package_name): | |
62 | removals.append(package_name) | |
63 | ||
64 | if removals: | |
65 | sys.exit(1) | |
66 | else: | |
67 | print("::notice ::No packages marked for autoremoval from Debian (yay!)") | |
68 | sys.exit(0) | |
69 | ||
f7b722dc | 70 | |
5826ff6e CH |
71 | if __name__ == "__main__": |
72 | main() |