bundles/sshmon: rewrite check_github_for_new_release

This commit is contained in:
Franzi 2021-12-22 11:09:26 +01:00
parent 58192620b9
commit b8a109efb0
Signed by: kunsi
GPG key ID: 12E3D2136B818350
2 changed files with 55 additions and 21 deletions

View file

@ -1,33 +1,66 @@
#!/usr/bin/env python3
from requests import get
from sys import argv, exit
if not len(argv) == 3:
print('Usage: check_github_for_new_release <repo> <version>')
exit(3)
from requests import get
try:
# Arch Linux (possibly future Ubuntu releases)
from packaging.version import parse
except ModuleNotFoundError:
# Debian
from setuptools._vendor.packaging.version import parse
assert (
len(argv) >= 3
), "Usage: check_github_for_new_release <repo> <version> [tag prefix]"
repo = argv[1]
current_version = argv[2]
if len(argv) >= 4:
tag_prefix = argv[3]
else:
tag_prefix = ""
try:
r = get('https://api.github.com/repos/{}/releases/latest'.format(repo), headers={'Accept': 'application/json'}).json()
r = get(
"https://api.github.com/repos/{}/releases".format(repo),
headers={"Accept": "application/json"},
)
r.raise_for_status()
releases = r.json()
newest_release = None
for i in releases:
if i["tag_name"].startswith(tag_prefix):
if newest_release is None or parse(i["tag_name"]) > parse(
newest_release["tag_name"]
):
newest_release = i
assert newest_release is not None, "Could not determine latest release"
if parse(newest_release["tag_name"]) > parse(current_version):
print(
"There is a newer version available: {} (currently installed: {})".format(
newest_release["tag_name"], current_version
)
)
if newest_release["prerelease"] or newest_release["draft"]:
print("Please note this is only a prerelease/draft.")
# Don't alert people for prereleases.
exit(0)
else:
exit(2)
else:
print("Currently installed version matches newest release on github")
exit(0)
except Exception as e:
print(repr(e))
exit(3)
newest_release = r['tag_name']
if newest_release != current_version:
print('There is a newer version available: {} (currently installed: {})'.format(newest_release, current_version))
if r['prerelease'] or r['draft']:
print('Please note this is only a prerelease/draft.')
# Don't alert people for prereleases.
exit(0)
else:
exit(2)
else:
print('Currently installed version matches newest release on github')
exit(0)

View file

@ -7,6 +7,7 @@ defaults = {
'libwww-perl': {}, # needed by check_nginx_status
'monitoring-plugins': {},
'python3-requests': {},
'python3-setuptools': {}, # needed by check_github_for_new_release
'sysstat': {}, # needed by check_cpu_stats
},
},