From c5e45cbafcc367c1eaa9949e575fd04636f24f50 Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Thu, 22 Dec 2022 12:13:53 +0100 Subject: [PATCH] bundles/sshmon: add check_forgejo_for_new_release --- .../files/check_forgejo_for_new_release | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 bundles/sshmon/files/check_forgejo_for_new_release diff --git a/bundles/sshmon/files/check_forgejo_for_new_release b/bundles/sshmon/files/check_forgejo_for_new_release new file mode 100644 index 0000000..99fb18d --- /dev/null +++ b/bundles/sshmon/files/check_forgejo_for_new_release @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 + + +from sys import argv, exit + +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) >= 4 +), "Usage: check_forgejo_for_new_release [tag prefix]" + +host = argv[1] +repo = argv[2] +current_version = argv[3] +if len(argv) >= 5: + tag_prefix = argv[4] +else: + tag_prefix = "" + +try: + r = get( + "https://{}/api/v1/repos/{}/releases".format(host, 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"]) + ) and not (i["prerelease"] or i["draft"]): + 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 + ) + ) + exit(2) + else: + print( + "Currently installed version {} matches newest release on github".format( + current_version + ) + ) + exit(0) +except Exception as e: + print(repr(e)) + exit(3)