]> git.ipfire.org Git - thirdparty/pdns.git/blame - build-scripts/check-debian-autoremovals.py
Merge pull request #12856 from romeroalx/enable-ipv6-actions-container
[thirdparty/pdns.git] / build-scripts / check-debian-autoremovals.py
CommitLineData
f7b722dc 1#!/usr/bin/python3
f7b722dc 2import re
5826ff6e
CH
3import sys
4
5import requests
6import yaml
7
8
9PACKAGE_NAMES = ["pdns", "pdns-recursor", "dnsdist"]
f7b722dc 10
5826ff6e
CH
11
12def 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
26def 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
31def 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
57def 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
71if __name__ == "__main__":
72 main()