57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
import re
|
|
from bs4 import BeautifulSoup
|
|
from common import endoflife
|
|
from datetime import datetime
|
|
|
|
PRODUCT = "splunk"
|
|
URL = "https://docs.splunk.com/Documentation/Splunk"
|
|
RELNOTES_URL_TEMPLATE = "https://docs.splunk.com/Documentation/Splunk/{version}/ReleaseNotes/MeetSplunk"
|
|
PATTERN = r"Splunk Enterprise (?P<version>\d+\.\d+(?:\.\d+)*) was (?:first )?released on (?P<date>\w+\s\d\d?,\s\d{4})\."
|
|
|
|
|
|
def convert_date(date: str) -> str:
|
|
return datetime.strptime(date, "%B %d, %Y").strftime("%Y-%m-%d")
|
|
|
|
|
|
print(f"::group::{PRODUCT}")
|
|
releases = dict()
|
|
main = endoflife.fetch_url(URL)
|
|
soup = BeautifulSoup(main, features="html5lib")
|
|
|
|
all_versions = list(map(
|
|
lambda option: option.attrs['value'],
|
|
soup.select("select#version-select > option")
|
|
))
|
|
|
|
# Release notes for versions before 7.2 don't contain release information
|
|
eligible_versions = list(filter(
|
|
lambda v: v.split('.') >= '7.2'.split('.'),
|
|
all_versions
|
|
))
|
|
|
|
# Sort from highest to lowest version so that we can skip versions we already
|
|
# have (because, for example, 9.0.5 release notes also contains release notes
|
|
# for 9.0.0 to 9.0.4).
|
|
sorted_versions = sorted(
|
|
eligible_versions,
|
|
key=lambda x: list(map(int, x.split("."))), reverse=True
|
|
)
|
|
|
|
for v in sorted_versions:
|
|
if v in releases:
|
|
continue # if we already know the release date, skip it
|
|
|
|
relnotes = endoflife.fetch_url(RELNOTES_URL_TEMPLATE.format(version=v))
|
|
for (version, date_str) in re.findall(PATTERN, relnotes, re.MULTILINE):
|
|
# convert x.y to x.y.0
|
|
version = f"{version}.0" if len(version.split(".")) == 2 else version
|
|
date = convert_date(date_str)
|
|
releases[version] = date
|
|
print(f"{version}: {date}")
|
|
|
|
endoflife.write_releases(PRODUCT, dict(
|
|
# sort by version then date (asc)
|
|
sorted(releases.items(), key=lambda x: (x[0], x[1]))
|
|
))
|
|
print("::endgroup::")
|