[couchbase-server] Refactor script (#220)
Make the script more readable, mostly by: - using the endoflife.Product class, - a little bit of renaming and documentation.
This commit is contained in:
@@ -3,54 +3,42 @@ from bs4 import BeautifulSoup
|
||||
from common import http
|
||||
from common import dates
|
||||
from common import endoflife
|
||||
from datetime import datetime
|
||||
|
||||
"""Fetch versions with their dates from docs.couchbase.com.
|
||||
"""Fetches versions from release notes of each minor version on docs.couchbase.com.
|
||||
|
||||
Versions are fetched from the release notes of each minor version. Date is not
|
||||
accurate (only month and year are provided) but it's already better than the
|
||||
previous implementation which use dates of the images on Docker Hub. Because
|
||||
of that lack of precision, all dates are set to the 15th of the month.
|
||||
|
||||
Notes:
|
||||
- documentation for oldest versions is not available anymore on
|
||||
docs.couchbase.com, so this script is using the Wayback Machine to fetch them.
|
||||
- dates are not available for some versions, those had to be set manually.
|
||||
Dates are not available for all versions, so they must be set manually in some cases.
|
||||
Moreover dates are not accurate (only month and year are provided), so they are set to the last day of the month.
|
||||
"""
|
||||
|
||||
PRODUCT = "couchbase-server"
|
||||
REGEX = r"^Release (?P<version>\d+\.\d+(\.\d+)?) \((?P<date>.+)\)$"
|
||||
URLS = "https://docs.couchbase.com/server"
|
||||
FIXED_VERSIONS = {
|
||||
"6.0.0": "2018-10-31", # https://www.couchbase.com/blog/announcing-couchbase-6-0/
|
||||
"6.0.1": "2019-02-15", # https://web.archive.org/web/20190307191211/https://docs.couchbase.com/server/6.0/release-notes/relnotes.html
|
||||
"6.6.0": "2020-08-12", # https://www.couchbase.com/blog/whats-new-and-improved-in-couchbase-server-6-6/
|
||||
"7.2.0": "2023-06-01", # https://www.couchbase.com/blog/couchbase-capella-spring-release-72/
|
||||
VERSION_AND_DATE_PATTERN = re.compile(r"^Release (?P<version>\d+\.\d+(\.\d+)?) \((?P<date>.+)\)$")
|
||||
MANUAL_VERSIONS = {
|
||||
"6.0.0": datetime(2018, 10, 31), # https://www.couchbase.com/blog/announcing-couchbase-6-0/
|
||||
"6.0.1": datetime(2019, 2, 15), # https://web.archive.org/web/20190307191211/https://docs.couchbase.com/server/6.0/release-notes/relnotes.html
|
||||
"6.6.0": datetime(2020, 8, 12), # https://www.couchbase.com/blog/whats-new-and-improved-in-couchbase-server-6-6/
|
||||
"7.2.0": datetime(2023, 6, 1), # https://www.couchbase.com/blog/couchbase-capella-spring-release-72/
|
||||
}
|
||||
|
||||
print(f"::group::{PRODUCT}")
|
||||
versions = {}
|
||||
|
||||
response = http.fetch_url(f"{URLS}/current/install/install-intro.html")
|
||||
soup = BeautifulSoup(response.text, features="html5lib")
|
||||
|
||||
minor_versions = [options.attrs["value"] for options in soup.find(class_="version_list").find_all("option")]
|
||||
|
||||
# there is no date available for x.y.0
|
||||
for minor in minor_versions:
|
||||
versions[minor + '.0'] = 'N/A'
|
||||
product = endoflife.Product("couchbase-server")
|
||||
print(f"::group::{product.name}")
|
||||
main = http.fetch_url(f"{URLS}/current/install/install-intro.html")
|
||||
main_soup = BeautifulSoup(main.text, features="html5lib")
|
||||
|
||||
minor_versions = [options.attrs["value"] for options in main_soup.find(class_="version_list").find_all("option")]
|
||||
minor_version_urls = [f"{URLS}/{minor}/release-notes/relnotes.html" for minor in minor_versions]
|
||||
for response in http.fetch_urls(minor_version_urls):
|
||||
soup = BeautifulSoup(response.text, features="html5lib")
|
||||
for title in soup.find_all("h2"):
|
||||
versionAndDate = title.get_text().strip()
|
||||
m = re.match(REGEX, versionAndDate)
|
||||
if m:
|
||||
version = f"{m['version']}.0" if len(m['version'].split('.')) == 2 else m['version']
|
||||
date = dates.parse_month_year_date(m['date']).strftime("%Y-%m-%d")
|
||||
versions[version] = date
|
||||
print(f"{version}: {date}")
|
||||
|
||||
versions = versions | FIXED_VERSIONS
|
||||
endoflife.write_releases(PRODUCT, versions)
|
||||
for minor_version in http.fetch_urls(minor_version_urls):
|
||||
minor_version_soup = BeautifulSoup(minor_version.text, features="html5lib")
|
||||
|
||||
for title in minor_version_soup.find_all("h2"):
|
||||
match = VERSION_AND_DATE_PATTERN.match(title.get_text().strip())
|
||||
if match:
|
||||
version = match["version"]
|
||||
version = f"{version}.0" if len(version.split(".")) == 2 else version
|
||||
date = dates.parse_month_year_date(match['date'])
|
||||
product.declare_version(version, date)
|
||||
|
||||
product.declare_versions(MANUAL_VERSIONS)
|
||||
product.write()
|
||||
print("::endgroup::")
|
||||
|
||||
Reference in New Issue
Block a user