[artifactory] Refactor script (#214)
Make the script more readable, mostly by: - using the endoflife.Product class, - removing the unnecessary use of functions, - a little bit of renaming.
This commit is contained in:
@@ -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")
|
logging.info(f"ignoring version {version_text} ({date_text}), date pattern don't match")
|
||||||
continue
|
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_pattern in VERSION_PATTERNS[product.name]:
|
||||||
for version in version_pattern.findall(version_text):
|
for version in version_pattern.findall(version_text):
|
||||||
if not product.has_version(version):
|
if not product.has_version(version):
|
||||||
|
|||||||
@@ -1,40 +1,27 @@
|
|||||||
|
import datetime
|
||||||
from common import dates
|
from common import dates
|
||||||
from common import endoflife
|
from common import endoflife
|
||||||
from requests_html import HTMLSession
|
from requests_html import HTMLSession
|
||||||
|
|
||||||
URL = "https://jfrog.com/help/r/jfrog-release-information/artifactory-end-of-life"
|
"""Fetches Artifactory versions from https://jfrog.com, using requests_html because JavaScript is
|
||||||
PRODUCT = "artifactory"
|
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):
|
for row in r.html.find('.informaltable tbody tr'):
|
||||||
date_str = date_str.replace("Sept", "Sep").replace("_", "-")
|
|
||||||
return dates.parse_date(date_str).strftime("%Y-%m-%d")
|
|
||||||
|
|
||||||
|
|
||||||
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")
|
cells = row.find("td")
|
||||||
if len(cells) >= 2:
|
if len(cells) >= 2:
|
||||||
version = cells[0].text.strip()
|
version = cells[0].text.strip()
|
||||||
date_text = cells[1].text.strip()
|
if version:
|
||||||
if date_text:
|
date_str = cells[1].text.strip().replace("_", "-").replace("Sept-", "Sep-")
|
||||||
date = parse_date(date_text)
|
product.declare_version(version, dates.parse_date(date_str))
|
||||||
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.
|
# 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...
|
# Sent a mail to jfrog-help-center-feedback@jfrog.com to fix it, but in the meantime...
|
||||||
result['7.29.9'] = '2022-01-11'
|
product.replace_version('7.29.9', datetime.datetime(2022, 1, 11))
|
||||||
return result
|
|
||||||
|
|
||||||
|
product.write()
|
||||||
print(f"::group::{PRODUCT}")
|
|
||||||
versions = fetch_releases()
|
|
||||||
endoflife.write_releases(PRODUCT, versions)
|
|
||||||
print("::endgroup::")
|
print("::endgroup::")
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from datetime import datetime, timezone
|
|
||||||
import calendar
|
import calendar
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
|
|
||||||
def parse_date(text, formats=frozenset([
|
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
|
# so that we don't have to deal with some special characters in formats
|
||||||
text = text.strip().replace(", ", " ").replace(". ", " ").replace("(", "").replace(")", "")
|
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:
|
for fmt in formats:
|
||||||
try:
|
try:
|
||||||
date = datetime.strptime(text, fmt)
|
date = datetime.strptime(text, fmt)
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class Product:
|
|||||||
if version not in self.versions:
|
if version not in self.versions:
|
||||||
raise ValueError(f"version {version} cannot be replaced as it does not exist for {self.name}")
|
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
|
self.versions[version] = date
|
||||||
|
|
||||||
def remove_version(self, version: str) -> None:
|
def remove_version(self, version: str) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user