diff --git a/src/graalvm.py b/src/graalvm.py new file mode 100644 index 00000000..829136c0 --- /dev/null +++ b/src/graalvm.py @@ -0,0 +1,32 @@ +import re +from bs4 import BeautifulSoup +from common import endoflife +from datetime import datetime + +URL = "https://www.graalvm.org/release-calendar/" +# https://regex101.com/r/877ibq/1 +regex = r"RHEL (?P\d)(\. ?(?P\d+))?(( Update (?P\d))| GA)?" + +def parse_date(text): + return datetime.strptime(text, "%B %d, %Y").strftime("%Y-%m-%d") + +def split_versions(text): + # GraalVM for JDK versions has to be prefixed as their release cycle collide + # with older GraalVM release cycles. Example: GraalVM for JDK 20 and 20.0. + return text.replace("GraalVM for JDK ", "jdk-").split(", ") + +print("::group::graalvm") +response = endoflife.fetch_url(URL) +soup = BeautifulSoup(response, features="html5lib") + +versions = {} +for tr in soup.findAll("table")[1].find("tbody").findAll("tr"): + td_list = tr.findAll("td") + date = parse_date(td_list[0].get_text()) + + for version in split_versions(td_list[2].get_text()): + versions[version] = date + print(f"{version}: {date}") + +endoflife.write_releases('graalvm', versions) +print("::endgroup::")