diff --git a/src/apple.py b/src/apple.py index 687eef1e..6adcd20a 100644 --- a/src/apple.py +++ b/src/apple.py @@ -74,7 +74,8 @@ for product_name in VERSION_PATTERNS.keys(): logging.info(f"ignoring version {version_text} ({date_text}), date pattern don't match") continue - date = dates.parse_date(date_match.group(0)) + date_str = date_match.group(0).replace("Sept ", "Sep ") + date = dates.parse_date(date_str) for version_pattern in VERSION_PATTERNS[product.name]: for version in version_pattern.findall(version_text): if not product.has_version(version): diff --git a/src/artifactory.py b/src/artifactory.py index b4d0dc84..be29bc5a 100644 --- a/src/artifactory.py +++ b/src/artifactory.py @@ -1,40 +1,27 @@ +import datetime from common import dates from common import endoflife from requests_html import HTMLSession -URL = "https://jfrog.com/help/r/jfrog-release-information/artifactory-end-of-life" -PRODUCT = "artifactory" +"""Fetches Artifactory versions from https://jfrog.com, using requests_html because JavaScript is +needed to render the page.""" +product = endoflife.Product("artifactory") +print(f"::group::{product.name}") +r = HTMLSession().get("https://jfrog.com/help/r/jfrog-release-information/artifactory-end-of-life") +r.html.render(sleep=2, scrolldown=5) -def parse_date(date_str): - date_str = date_str.replace("Sept", "Sep").replace("_", "-") - return dates.parse_date(date_str).strftime("%Y-%m-%d") +for row in r.html.find('.informaltable tbody tr'): + cells = row.find("td") + if len(cells) >= 2: + version = cells[0].text.strip() + if version: + date_str = cells[1].text.strip().replace("_", "-").replace("Sept-", "Sep-") + product.declare_version(version, dates.parse_date(date_str)) +# 7.29.9 release date is wrong on https://jfrog.com/help/r/jfrog-release-information/artifactory-end-of-life. +# Sent a mail to jfrog-help-center-feedback@jfrog.com to fix it, but in the meantime... +product.replace_version('7.29.9', datetime.datetime(2022, 1, 11)) -def fetch_releases(): - result = {} - - session = HTMLSession() - r = session.get(URL) - r.html.render(sleep=2, scrolldown=5) - - for row in r.html.find('.informaltable tbody tr'): - cells = row.find("td") - if len(cells) >= 2: - version = cells[0].text.strip() - date_text = cells[1].text.strip() - if date_text: - date = parse_date(date_text) - result[version] = date - print(f"{version}: {date}") - - # 7.29.9 release date is wrong on https://jfrog.com/help/r/jfrog-release-information/artifactory-end-of-life. - # Sent a mail to jfrog-help-center-feedback@jfrog.com to fix it, but in the meantime... - result['7.29.9'] = '2022-01-11' - return result - - -print(f"::group::{PRODUCT}") -versions = fetch_releases() -endoflife.write_releases(PRODUCT, versions) +product.write() print("::endgroup::") diff --git a/src/common/dates.py b/src/common/dates.py index f60e05b0..328bcd48 100644 --- a/src/common/dates.py +++ b/src/common/dates.py @@ -1,5 +1,5 @@ -from datetime import datetime, timezone import calendar +from datetime import datetime, timezone def parse_date(text, formats=frozenset([ @@ -42,7 +42,6 @@ def parse_datetime(text, formats=frozenset([ """ # so that we don't have to deal with some special characters in formats text = text.strip().replace(", ", " ").replace(". ", " ").replace("(", "").replace(")", "") - text = text.replace("Sept ", "Sep ") # common typo, for ex. on Apple and Artifactory products for fmt in formats: try: date = datetime.strptime(text, fmt) diff --git a/src/common/endoflife.py b/src/common/endoflife.py index d7d44a6c..7cd74779 100644 --- a/src/common/endoflife.py +++ b/src/common/endoflife.py @@ -47,7 +47,7 @@ class Product: if version not in self.versions: raise ValueError(f"version {version} cannot be replaced as it does not exist for {self.name}") - logging.info(f"replacing version {version} ({self.versions[version]} -> {date}) to {self.name}") + logging.info(f"replacing version {version} ({self.versions[version]} -> {date}) in {self.name}") self.versions[version] = date def remove_version(self, version: str) -> None: