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()