]> git.ipfire.org Git - thirdparty/pdns.git/blob - build-scripts/check-debian-autoremovals.py
Merge pull request #13311 from omoerbeek/rec-more-log-fixes
[thirdparty/pdns.git] / build-scripts / check-debian-autoremovals.py
1 #!/usr/bin/python3
2 import re
3 import sys
4
5 import requests
6 import yaml
7
8
9 PACKAGE_NAMES = ["pdns", "pdns-recursor", "dnsdist"]
10
11
12 def get_bugs_titles(bugs):
13 ret = []
14 title_regex = re.compile(r"<title>(.*) - Debian Bug report logs</title>")
15 for bug in bugs:
16 bug_r = requests.get("https://bugs.debian.org/cgi-bin/bugreport.cgi", params={"bug": bug})
17 lines = bug_r.text.split("\n")
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
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)
29
30
31 def warn_removal(all_autoremovals, package_name):
32 removal = all_autoremovals.get(package_name)
33 if not removal:
34 return False
35
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 )
42
43 bugs = get_bugs_titles(removal.get("bugs_dependencies", []))
44 if len(bugs):
45 msg += f"This is caused by the following dependency bug{'s' if len(bugs) > 1 else ''}:\n "
46 msg += ("\n ".join(bugs)) + "\n"
47
48 bugs = get_bugs_titles(removal["bugs"])
49 if len(bugs):
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"
52
53 print(msg)
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
70
71 if __name__ == "__main__":
72 main()