[eks] Refactor script (#224)

Make the script more readable, mostly by:

- changing slightly the logic,
- using the Product and AutoConfig classes,
- removing the use of functions when unnecessary,
- a little bit of renaming and documentation.

Disabled web.archive.org has also been re-enabled because HTTP retry mechanism has been improved and should handle timeouts a lot better.
This commit is contained in:
Marc Wrobel
2023-12-10 19:26:10 +01:00
committed by GitHub
parent d36e4b9c46
commit c27c64a754
3 changed files with 81 additions and 31 deletions

View File

@@ -1,45 +1,40 @@
import re
from bs4 import BeautifulSoup
from common import http
from common import dates
from common import endoflife
# Now that AWS no longer publishes docs on GitHub,
# we use the Web Archive to still get the older versions
# Keep older pages at top of the list
"""Fetches EKS versions from AWS docs.
Now that AWS no longer publishes docs on GitHub, we use the Web Archive to still get the older versions."""
URLS = [
# 1.19.eks.1
# Disabled, too much timed out.
# "https://web.archive.org/web/20221007150452/https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html",
"https://web.archive.org/web/20221007150452/https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html",
# + 1.20
# Disabled, too much timed out.
# "https://web.archive.org/web/20230521061347/https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html",
"https://web.archive.org/web/20230521061347/https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html",
# + latest
"https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html",
]
product = endoflife.Product("eks")
print(f"::group::{product.name}")
def parse_platforms_pages():
all_versions = {}
print("::group::eks")
for url in URLS:
response = http.fetch_url(url)
soup = BeautifulSoup(response.text, features="html5lib")
for tr in soup.select("#main-col-body")[0].findAll("tr"):
td = tr.find("td")
if td and re.match(endoflife.DEFAULT_VERSION_REGEX, td.text.strip()):
data = tr.findAll("td")
date = data[-1].text.strip()
if len(date) > 0:
d = dates.parse_date(date).strftime("%Y-%m-%d")
k8s_version = ".".join(data[0].text.strip().split(".")[:-1])
eks_version = data[1].text.strip().replace(".", "-")
version = f"{k8s_version}-{eks_version}"
all_versions[version] = d
print(f"{version}: {d}")
print("::endgroup::")
return all_versions
for version_list in http.fetch_urls(URLS):
version_list_soup = BeautifulSoup(version_list.text, features="html5lib")
for tr in version_list_soup.select("#main-col-body")[0].findAll("tr"):
cells = tr.findAll("td")
if not cells:
continue
k8s_version = cells[0].text.strip()
eks_version = cells[1].text.strip()
date_str = cells[-1].text.strip()
versions = parse_platforms_pages()
endoflife.write_releases('eks', versions)
k8s_version_match = endoflife.DEFAULT_VERSION_PATTERN.match(k8s_version)
if k8s_version_match:
date = dates.parse_date(date_str)
# K8S patch version is not kept to match versions on https://github.com/aws/eks-distro/tags.
version = f"{k8s_version_match.group('major')}.{k8s_version_match.group('minor')}-{eks_version.replace('.', '-')}"
product.declare_version(version, date)
product.write()
print("::endgroup::")