From c0b1cee8cb9c7dc685ce2359b058a31b1313c623 Mon Sep 17 00:00:00 2001 From: Alexey Yuzhakov Date: Thu, 23 Feb 2023 02:41:39 +0700 Subject: [PATCH] [plesk] Add automation (closes #79) Only 18.0.20.3 and later are picked up : - format of the title for 18.0.20 and 18.0.19 are different, - there is not entry for GA of versions 18.0.18 and older. Co-authored-by: Marc Wrobel --- src/plesk.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/plesk.py diff --git a/src/plesk.py b/src/plesk.py new file mode 100644 index 00000000..a4bbd1d8 --- /dev/null +++ b/src/plesk.py @@ -0,0 +1,53 @@ +import json +from datetime import datetime +import urllib.request +from bs4 import BeautifulSoup + +URL = "https://docs.plesk.com/release-notes/obsidian/change-log" +PRODUCT = "plesk" + + +def make_bs_request(url): + req = urllib.request.Request(url) + with urllib.request.urlopen(req, timeout=5) as response: + return BeautifulSoup(response.read(), features="html5lib") + + +# Only 18.0.20.3 and later will be picked up : +# - format of the title for 18.0.20 and 18.0.19 are different, +# - there is not entry for GA of version 18.0.18 and older. +def fetch_releases(): + result = {} + + soup = make_bs_request(URL) + releases = soup.find_all("div", class_="changelog-entry--obsidian") + for release in releases: + version = release.h2.text.strip() + if not version.startswith('Plesk Obsidian 18'): + continue + + version = version.replace(' Update ', '.').replace('Plesk Obsidian ', '') + if ' ' in version: + continue + date = datetime.strptime(release.p.text.strip(), '%d %B %Y').strftime("%Y-%m-%d") + result[version] = date + print(f"{version}: {date}") + + return result + + +def main(): + print(f"::group::{PRODUCT}") + + releases = fetch_releases() + with open(f"releases/{PRODUCT}.json", "w") as f: + f.write(json.dumps(dict( + # sort by date then version (desc) + sorted(releases.items(), key=lambda x: (x[1], x[0]), reverse=True) + ), indent=2)) + + print("::endgroup::") + + +if __name__ == '__main__': + main()