Support release-level data (#297)

Support retrieving and updating generic release-level data, such as support and eol dates. The JSON format has been changed accordingly to add a new top-level `releases` key.

The `aws-lambda.py` script has been updated to make use of this new feature.
This commit is contained in:
Marc Wrobel
2024-02-11 16:57:59 +01:00
committed by GitHub
parent a0ba2d687e
commit b6f14c8d61
231 changed files with 500 additions and 152 deletions

View File

@@ -29,7 +29,18 @@ class ReleaseCycle:
self.matched = False
self.updated = False
def update_with(self, version: str, date: datetime.date) -> None:
def update_with(self, release: dict) -> None:
for key, value in release.items():
if isinstance(value, str) and re.fullmatch(r'^\d{4}-\d{2}-\d{2}$', value):
value = datetime.date.fromisoformat(value)
old_value = self.data.get(key, None)
if old_value != value:
logging.info(f"{self} {key} updated from {old_value} to {value}")
self.data[key] = value
self.updated = True
def update_with_version(self, version: str, date: datetime.date) -> None:
logging.debug(f"will try to update {self} with {version} ({date})")
self.matched = True
self.__update_release_date(version, date)
@@ -120,6 +131,7 @@ class Product:
self.releases = [ReleaseCycle(self, release) for release in self.data["releases"]]
self.updated = False
self.unmatched_releases = []
self.unmatched_versions = {}
# Placeholder function for mass-upgrading the structure of the product files.
@@ -133,6 +145,19 @@ class Product:
if release.matched and latest not in self.release_data["versions"]:
logging.info(f"latest version {latest} for {release} not found in {self.release_data_path}")
def process_release(self, release_data: dict) -> None:
name = release_data.pop("name") # name must not appear in updates
release_matched = False
for release in self.releases:
if release.name == name:
release_matched = True
release.update_with(release_data)
self.updated = self.updated or release.updated
if not release_matched:
self.unmatched_releases.append(name)
def process_version(self, version_data: dict) -> None:
name = version_data["name"]
date = datetime.date.fromisoformat(version_data["date"])
@@ -141,7 +166,7 @@ class Product:
for release in self.releases:
if release.includes(name):
version_matched = True
release.update_with(name, date)
release.update_with_version(name, date)
self.updated = self.updated or release.updated
if not version_matched:
@@ -166,7 +191,9 @@ def update_product(name: str, product_dir: Path, releases_dir: Path, output: Git
product.upgrade_structure()
if product.release_data:
for version_data in product.release_data["versions"].values():
for release_data in product.release_data.get("releases", {}).values():
product.process_release(release_data)
for version_data in product.release_data.get("versions", {}).values():
product.process_version(version_data)
product.check_latest()
@@ -183,6 +210,11 @@ def update_product(name: str, product_dir: Path, releases_dir: Path, output: Git
logging.warning(f"{name}:{version} ({date}) not included")
output.println(f"{name}:{version} ({date})")
if len(product.unmatched_releases) != 0:
for release in product.unmatched_releases:
logging.warning(f"{name}:{release} not included")
output.println(f"{name}:{release}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Update product releases.')

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"7.0.50": {
"name": "7.0.50",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"8.17.18": {
"name": "8.17.18",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"9.3": {
"name": "9.3",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.19.1": {
"name": "3.19.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2.127.0": {
"name": "2.127.0",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"21.0.2.14.1": {
"name": "21.0.2.14.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2023.3.20240131.0": {
"name": "2023.3.20240131.0",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.3.0.0": {
"name": "1.3.0.0",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"8.0.35": {
"name": "8.0.35",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"16.1": {
"name": "16.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"17.1.3": {
"name": "17.1.3",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.8.3": {
"name": "1.8.3",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2.16.3": {
"name": "2.16.3",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"9.2.0": {
"name": "9.2.0",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"8.5": {
"name": "8.5",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"6.0.1": {
"name": "6.0.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2.8.1": {
"name": "2.8.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"4.0.4": {
"name": "4.0.4",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"4.0.12": {
"name": "4.0.12",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"4.0.18": {
"name": "4.0.18",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.3.6": {
"name": "3.3.6",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2.7.0": {
"name": "2.7.0",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2.4.58": {
"name": "2.4.58",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.5.2": {
"name": "3.5.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.9.6": {
"name": "3.9.6",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.3.4": {
"name": "3.3.4",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"6.3.0.2": {
"name": "6.3.0.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.2.13": {
"name": "3.2.13",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.11.7.1": {
"name": "3.11.7.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2.10.0": {
"name": "2.10.0",

View File

@@ -1,156 +1,195 @@
{
"versions": {
"python3.12": {
"name": "python3.12",
"date": "2023-12-14"
},
"java21": {
"name": "java21",
"date": "2023-11-17"
},
"nodejs20.x": {
"name": "nodejs20.x",
"date": "2023-11-15"
},
"provided.al2023": {
"name": "provided.al2023",
"date": "2023-11-10"
},
"python3.11": {
"name": "python3.11",
"date": "2023-07-27"
},
"releases": {
"ruby3.2": {
"name": "ruby3.2",
"date": "2023-06-07"
},
"java17": {
"name": "java17",
"date": "2023-04-27"
},
"python3.10": {
"name": "python3.10",
"date": "2023-04-18"
},
"nodejs18.x": {
"name": "nodejs18.x",
"date": "2022-11-18"
},
"dotnet7": {
"name": "dotnet7",
"date": "2022-11-15"
},
"nodejs16.x": {
"name": "nodejs16.x",
"date": "2022-05-12"
},
"dotnet6": {
"name": "dotnet6",
"date": "2022-02-24"
},
"python3.9": {
"name": "python3.9",
"date": "2021-08-16"
},
"nodejs14.x": {
"name": "nodejs14.x",
"date": "2021-02-03"
},
"dotnet5.0": {
"name": "dotnet5.0",
"date": "2020-12-02"
},
"provided.al2": {
"name": "provided.al2",
"date": "2020-08-12"
},
"java8.al2": {
"name": "java8.al2",
"date": "2020-08-12"
},
"dotnetcore3.1": {
"name": "dotnetcore3.1",
"date": "2020-03-31"
"support": true,
"eol": false
},
"ruby2.7": {
"name": "ruby2.7",
"date": "2020-02-19"
},
"python3.8": {
"name": "python3.8",
"date": "2019-11-18"
},
"nodejs12.x": {
"name": "nodejs12.x",
"date": "2019-11-18"
},
"java11": {
"name": "java11",
"date": "2019-11-18"
},
"nodejs10.x": {
"name": "nodejs10.x",
"date": "2019-05-15"
"support": "2023-12-07",
"eol": "2024-02-08"
},
"ruby2.5": {
"name": "ruby2.5",
"date": "2018-11-29"
"support": "2021-07-30",
"eol": "2022-03-31"
},
"provided": {
"name": "provided",
"date": "2018-11-29"
"python3.9": {
"name": "python3.9",
"support": true,
"eol": false
},
"python3.8": {
"name": "python3.8",
"support": "2024-10-14",
"eol": "2025-01-07"
},
"python3.7": {
"name": "python3.7",
"date": "2018-11-19"
},
"dotnetcore2.1": {
"name": "dotnetcore2.1",
"date": "2018-07-09"
},
"nodejs8.10": {
"name": "nodejs8.10",
"date": "2018-04-02"
},
"go1.x": {
"name": "go1.x",
"date": "2018-01-15"
},
"dotnetcore2.0": {
"name": "dotnetcore2.0",
"date": "2018-01-15"
},
"nodejs4.3-edge": {
"name": "nodejs4.3-edge",
"date": "2017-07-17"
"support": "2023-12-04",
"eol": "2024-02-08"
},
"python3.6": {
"name": "python3.6",
"date": "2017-04-18"
"support": "2022-07-18",
"eol": "2022-08-29"
},
"nodejs6.10": {
"name": "nodejs6.10",
"date": "2017-03-22"
"python3.12": {
"name": "python3.12",
"support": true,
"eol": false
},
"dotnetcore1.0": {
"name": "dotnetcore1.0",
"date": "2016-12-01"
"python3.11": {
"name": "python3.11",
"support": true,
"eol": false
},
"nodejs4.3": {
"name": "nodejs4.3",
"date": "2016-04-07"
"python3.10": {
"name": "python3.10",
"support": true,
"eol": false
},
"python2.7": {
"name": "python2.7",
"date": "2015-10-08"
"support": "2021-07-15",
"eol": "2022-05-30"
},
"java8": {
"name": "java8",
"date": "2015-06-15"
"provided.al2023": {
"name": "provided.al2023",
"support": true,
"eol": false
},
"provided.al2": {
"name": "provided.al2",
"support": true,
"eol": false
},
"provided": {
"name": "provided",
"support": "2024-01-08",
"eol": "2024-03-12"
},
"nodejs8.10": {
"name": "nodejs8.10",
"support": "2020-03-06",
"eol": "2020-03-06"
},
"nodejs6.10": {
"name": "nodejs6.10",
"support": "2019-08-12",
"eol": true
},
"nodejs4.3-edge": {
"name": "nodejs4.3-edge",
"support": "2020-03-05",
"eol": "2019-04-30"
},
"nodejs4.3": {
"name": "nodejs4.3",
"support": "2020-03-05",
"eol": "2020-03-05"
},
"nodejs20.x": {
"name": "nodejs20.x",
"support": true,
"eol": false
},
"nodejs18.x": {
"name": "nodejs18.x",
"support": true,
"eol": false
},
"nodejs16.x": {
"name": "nodejs16.x",
"support": "2024-06-12",
"eol": "2024-08-15"
},
"nodejs14.x": {
"name": "nodejs14.x",
"support": "2023-12-04",
"eol": "2024-02-08"
},
"nodejs12.x": {
"name": "nodejs12.x",
"support": "2023-03-31",
"eol": "2023-04-30"
},
"nodejs10.x": {
"name": "nodejs10.x",
"support": "2021-07-30",
"eol": "2022-02-14"
},
"nodejs": {
"name": "nodejs",
"date": "2014-11-13"
"support": false,
"eol": "2016-10-31"
},
"java8.al2": {
"name": "java8.al2",
"support": true,
"eol": false
},
"java8": {
"name": "java8",
"support": "2024-01-08",
"eol": "2024-03-12"
},
"java21": {
"name": "java21",
"support": true,
"eol": false
},
"java17": {
"name": "java17",
"support": true,
"eol": false
},
"java11": {
"name": "java11",
"support": true,
"eol": false
},
"go1.x": {
"name": "go1.x",
"support": "2024-01-08",
"eol": "2024-03-12"
},
"dotnetcore3.1": {
"name": "dotnetcore3.1",
"support": "2023-04-03",
"eol": "2023-05-03"
},
"dotnetcore2.1": {
"name": "dotnetcore2.1",
"support": "2022-01-05",
"eol": "2022-04-13"
},
"dotnetcore2.0": {
"name": "dotnetcore2.0",
"support": "2019-05-30",
"eol": "2019-05-30"
},
"dotnetcore1.0": {
"name": "dotnetcore1.0",
"support": "2019-06-27",
"eol": "2019-07-30"
},
"dotnet7": {
"name": "dotnet7",
"support": "2024-05-14",
"eol": false
},
"dotnet6": {
"name": "dotnet6",
"support": "2024-11-12",
"eol": "2025-02-11"
},
"dotnet5.0": {
"name": "dotnet5.0",
"support": "2022-05-10",
"eol": true
}
}
},
"versions": {}
}

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"7.0.2": {
"name": "7.0.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"8.12.1": {
"name": "8.12.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"21.0.2+15": {
"name": "21.0.2+15",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.6.8": {
"name": "3.6.8",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"5.3.2": {
"name": "5.3.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"5.0.5": {
"name": "5.0.5",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.14.2": {
"name": "1.14.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.21.4": {
"name": "3.21.4",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.3.0": {
"name": "1.3.0",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2023.0.6.330617": {
"name": "2023.0.6.330617",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2.7.1": {
"name": "2.7.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"8.8.0": {
"name": "8.8.0",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.17.2": {
"name": "1.17.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"5.2.8": {
"name": "5.2.8",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"cos-97-16919-450-7": {
"name": "cos-97-16919-450-7",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"7.2.4": {
"name": "7.2.4",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"4.7.2.1": {
"name": "4.7.2.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.7.7": {
"name": "1.7.7",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"12.5": {
"name": "12.5",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"4.10.1": {
"name": "4.10.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"5.0.0": {
"name": "5.0.0",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"5.0.2": {
"name": "5.0.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"25.0.3": {
"name": "25.0.3",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"8.0.1": {
"name": "8.0.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"10.2.3": {
"name": "10.2.3",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"12.4.3": {
"name": "12.4.3",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"12.0.6": {
"name": "12.0.6",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"11.0.22+7.1": {
"name": "11.0.22+7.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.29-eks-1": {
"name": "1.29-eks-1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"8.12.1": {
"name": "8.12.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"28.2.2": {
"name": "28.2.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.16.1": {
"name": "1.16.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"5.6.0": {
"name": "5.6.0",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.29.1": {
"name": "1.29.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"26.2.2": {
"name": "26.2.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.5.12": {
"name": "3.5.12",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"9.3": {
"name": "9.3",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"4.97.1": {
"name": "4.97.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"39": {
"name": "39",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"6.1.1": {
"name": "6.1.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"122.0.1": {
"name": "122.0.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2.2.3": {
"name": "2.2.3",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.9.1": {
"name": "3.9.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"16.8.2": {
"name": "16.8.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.29.1-gke.1425000": {
"name": "1.29.1-gke.1425000",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.29.0-gke.1381000": {
"name": "1.29.0-gke.1381000",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.28.3-gke.1118000": {
"name": "1.28.3-gke.1118000",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.29.1-gke.1425000": {
"name": "1.29.1-gke.1425000",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.22.0": {
"name": "1.22.0",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"4.2.1": {
"name": "4.2.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"jdk-21.0.2": {
"name": "jdk-21.0.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"7.6.4": {
"name": "7.6.4",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"10.3.1": {
"name": "10.3.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"6.1.2": {
"name": "6.1.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"5.2.4": {
"name": "5.2.4",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.22.9": {
"name": "1.22.9",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2.9.4": {
"name": "2.9.4",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.14.9": {
"name": "1.14.9",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2.5.7": {
"name": "2.5.7",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"7.3.2": {
"name": "7.3.2",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"17.0.10+7": {
"name": "17.0.10+7",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"7.7.1": {
"name": "7.7.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"17.3.1": {
"name": "17.3.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"17.3.1": {
"name": "17.3.1",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"1.20.3": {
"name": "1.20.3",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"3.9.4": {
"name": "3.9.4",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"2.444": {
"name": "2.444",

View File

@@ -1,4 +1,5 @@
{
"releases": {},
"versions": {
"8.1.0": {
"name": "8.1.0",

Some files were not shown because too many files have changed in this diff Show More