diff --git a/latest.py b/latest.py index 52b8b7ba..eba8af86 100644 --- a/latest.py +++ b/latest.py @@ -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.') diff --git a/releases/akeneo-pim.json b/releases/akeneo-pim.json index 425b122b..8238696e 100644 --- a/releases/akeneo-pim.json +++ b/releases/akeneo-pim.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.0.50": { "name": "7.0.50", diff --git a/releases/alibaba-dragonwell.json b/releases/alibaba-dragonwell.json index 022ebaa7..225fec41 100644 --- a/releases/alibaba-dragonwell.json +++ b/releases/alibaba-dragonwell.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.17.18": { "name": "8.17.18", diff --git a/releases/almalinux.json b/releases/almalinux.json index 58aa67b3..cfb8615d 100644 --- a/releases/almalinux.json +++ b/releases/almalinux.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "9.3": { "name": "9.3", diff --git a/releases/alpinelinux.json b/releases/alpinelinux.json index 33d3f780..5c1de1cd 100644 --- a/releases/alpinelinux.json +++ b/releases/alpinelinux.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.19.1": { "name": "3.19.1", diff --git a/releases/amazon-cdk.json b/releases/amazon-cdk.json index f885a130..78ca9eb5 100644 --- a/releases/amazon-cdk.json +++ b/releases/amazon-cdk.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.127.0": { "name": "2.127.0", diff --git a/releases/amazon-corretto.json b/releases/amazon-corretto.json index dfdebd7a..6f40713a 100644 --- a/releases/amazon-corretto.json +++ b/releases/amazon-corretto.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "21.0.2.14.1": { "name": "21.0.2.14.1", diff --git a/releases/amazon-linux.json b/releases/amazon-linux.json index de73c455..669573b4 100644 --- a/releases/amazon-linux.json +++ b/releases/amazon-linux.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2023.3.20240131.0": { "name": "2023.3.20240131.0", diff --git a/releases/amazon-neptune.json b/releases/amazon-neptune.json index 7b7f3af4..b30bfa67 100644 --- a/releases/amazon-neptune.json +++ b/releases/amazon-neptune.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.3.0.0": { "name": "1.3.0.0", diff --git a/releases/amazon-rds-mysql.json b/releases/amazon-rds-mysql.json index 9a3d2015..5b5270a1 100644 --- a/releases/amazon-rds-mysql.json +++ b/releases/amazon-rds-mysql.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.0.35": { "name": "8.0.35", diff --git a/releases/amazon-rds-postgresql.json b/releases/amazon-rds-postgresql.json index 529e425c..5facef89 100644 --- a/releases/amazon-rds-postgresql.json +++ b/releases/amazon-rds-postgresql.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "16.1": { "name": "16.1", diff --git a/releases/angular.json b/releases/angular.json index 6f1f1a5c..c2ce5edc 100644 --- a/releases/angular.json +++ b/releases/angular.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "17.1.3": { "name": "17.1.3", diff --git a/releases/angularjs.json b/releases/angularjs.json index 714bb51f..e2e7b846 100644 --- a/releases/angularjs.json +++ b/releases/angularjs.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.8.3": { "name": "1.8.3", diff --git a/releases/ansible-core.json b/releases/ansible-core.json index 64d7b8d8..3cc5764c 100644 --- a/releases/ansible-core.json +++ b/releases/ansible-core.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.16.3": { "name": "2.16.3", diff --git a/releases/ansible.json b/releases/ansible.json index 51a8f7af..0890da9d 100644 --- a/releases/ansible.json +++ b/releases/ansible.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "9.2.0": { "name": "9.2.0", diff --git a/releases/antixlinux.json b/releases/antixlinux.json index 523a9281..c10168b1 100644 --- a/releases/antixlinux.json +++ b/releases/antixlinux.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.5": { "name": "8.5", diff --git a/releases/apache-activemq.json b/releases/apache-activemq.json index 36b14250..9dd6b063 100644 --- a/releases/apache-activemq.json +++ b/releases/apache-activemq.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.0.1": { "name": "6.0.1", diff --git a/releases/apache-airflow.json b/releases/apache-airflow.json index a98f6e7d..ccd9d103 100644 --- a/releases/apache-airflow.json +++ b/releases/apache-airflow.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.8.1": { "name": "2.8.1", diff --git a/releases/apache-camel.json b/releases/apache-camel.json index 19c46012..28f3cf4e 100644 --- a/releases/apache-camel.json +++ b/releases/apache-camel.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.0.4": { "name": "4.0.4", diff --git a/releases/apache-cassandra.json b/releases/apache-cassandra.json index 1651b1da..613c7a11 100644 --- a/releases/apache-cassandra.json +++ b/releases/apache-cassandra.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.0.12": { "name": "4.0.12", diff --git a/releases/apache-groovy.json b/releases/apache-groovy.json index 6523c6f5..69880f6f 100644 --- a/releases/apache-groovy.json +++ b/releases/apache-groovy.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.0.18": { "name": "4.0.18", diff --git a/releases/apache-hadoop.json b/releases/apache-hadoop.json index 4f5827ae..138ff2e7 100644 --- a/releases/apache-hadoop.json +++ b/releases/apache-hadoop.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.3.6": { "name": "3.3.6", diff --git a/releases/apache-hop.json b/releases/apache-hop.json index 02a01543..519e78f5 100644 --- a/releases/apache-hop.json +++ b/releases/apache-hop.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.7.0": { "name": "2.7.0", diff --git a/releases/apache-http-server.json b/releases/apache-http-server.json index b65812de..3828fb84 100644 --- a/releases/apache-http-server.json +++ b/releases/apache-http-server.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.4.58": { "name": "2.4.58", diff --git a/releases/apache-kafka.json b/releases/apache-kafka.json index 780c6267..46300a9b 100644 --- a/releases/apache-kafka.json +++ b/releases/apache-kafka.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.5.2": { "name": "3.5.2", diff --git a/releases/apache-maven.json b/releases/apache-maven.json index 4d73a7aa..0419f98e 100644 --- a/releases/apache-maven.json +++ b/releases/apache-maven.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.9.6": { "name": "3.9.6", diff --git a/releases/apache-spark.json b/releases/apache-spark.json index 62784f0f..0dbf27c8 100644 --- a/releases/apache-spark.json +++ b/releases/apache-spark.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.3.4": { "name": "3.3.4", diff --git a/releases/apache-struts.json b/releases/apache-struts.json index 1e05ca1b..26ff59a1 100644 --- a/releases/apache-struts.json +++ b/releases/apache-struts.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.3.0.2": { "name": "6.3.0.2", diff --git a/releases/api-platform.json b/releases/api-platform.json index ded78544..be5b4535 100644 --- a/releases/api-platform.json +++ b/releases/api-platform.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.2.13": { "name": "3.2.13", diff --git a/releases/arangodb.json b/releases/arangodb.json index 71f69bb9..3169be34 100644 --- a/releases/arangodb.json +++ b/releases/arangodb.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.11.7.1": { "name": "3.11.7.1", diff --git a/releases/argocd.json b/releases/argocd.json index 2eb32400..ebb743c9 100644 --- a/releases/argocd.json +++ b/releases/argocd.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.10.0": { "name": "2.10.0", diff --git a/releases/aws-lambda.json b/releases/aws-lambda.json index 0bd44087..556f36b3 100644 --- a/releases/aws-lambda.json +++ b/releases/aws-lambda.json @@ -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": {} } \ No newline at end of file diff --git a/releases/bazel.json b/releases/bazel.json index 89781b0a..ddf0580a 100644 --- a/releases/bazel.json +++ b/releases/bazel.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.0.2": { "name": "7.0.2", diff --git a/releases/beats.json b/releases/beats.json index fe6c8e38..ee22a9c2 100644 --- a/releases/beats.json +++ b/releases/beats.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.12.1": { "name": "8.12.1", diff --git a/releases/bellsoft-liberica.json b/releases/bellsoft-liberica.json index b41a6f08..b093b534 100644 --- a/releases/bellsoft-liberica.json +++ b/releases/bellsoft-liberica.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "21.0.2+15": { "name": "21.0.2+15", diff --git a/releases/blender.json b/releases/blender.json index d4c3fbb8..bea07f7b 100644 --- a/releases/blender.json +++ b/releases/blender.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.6.8": { "name": "3.6.8", diff --git a/releases/bootstrap.json b/releases/bootstrap.json index 20a002ae..4c28cdf1 100644 --- a/releases/bootstrap.json +++ b/releases/bootstrap.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.3.2": { "name": "5.3.2", diff --git a/releases/cakephp.json b/releases/cakephp.json index 52448ecd..62453ba6 100644 --- a/releases/cakephp.json +++ b/releases/cakephp.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.0.5": { "name": "5.0.5", diff --git a/releases/cert-manager.json b/releases/cert-manager.json index 6e2dbc54..7718386e 100644 --- a/releases/cert-manager.json +++ b/releases/cert-manager.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.14.2": { "name": "1.14.2", diff --git a/releases/cfengine.json b/releases/cfengine.json index e7fc0f11..cbcca9c1 100644 --- a/releases/cfengine.json +++ b/releases/cfengine.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.21.4": { "name": "3.21.4", diff --git a/releases/clamav.json b/releases/clamav.json index 474c4a97..4cb8abe0 100644 --- a/releases/clamav.json +++ b/releases/clamav.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.3.0": { "name": "1.3.0", diff --git a/releases/coldfusion.json b/releases/coldfusion.json index ac29f729..a081b015 100644 --- a/releases/coldfusion.json +++ b/releases/coldfusion.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2023.0.6.330617": { "name": "2023.0.6.330617", diff --git a/releases/composer.json b/releases/composer.json index 507a0ba2..27a1ef47 100644 --- a/releases/composer.json +++ b/releases/composer.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.7.1": { "name": "2.7.1", diff --git a/releases/confluence.json b/releases/confluence.json index 53e14242..651542c9 100644 --- a/releases/confluence.json +++ b/releases/confluence.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.8.0": { "name": "8.8.0", diff --git a/releases/consul.json b/releases/consul.json index 3c2ea99e..2b26a9e2 100644 --- a/releases/consul.json +++ b/releases/consul.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.17.2": { "name": "1.17.2", diff --git a/releases/contao.json b/releases/contao.json index 5801abbe..a9ab54fb 100644 --- a/releases/contao.json +++ b/releases/contao.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.2.8": { "name": "5.2.8", diff --git a/releases/cos.json b/releases/cos.json index eed5f759..d959a0b3 100644 --- a/releases/cos.json +++ b/releases/cos.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "cos-97-16919-450-7": { "name": "cos-97-16919-450-7", diff --git a/releases/couchbase-server.json b/releases/couchbase-server.json index 9a533825..51744333 100644 --- a/releases/couchbase-server.json +++ b/releases/couchbase-server.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.2.4": { "name": "7.2.4", diff --git a/releases/craft-cms.json b/releases/craft-cms.json index 9389728b..1ff3ad1f 100644 --- a/releases/craft-cms.json +++ b/releases/craft-cms.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.7.2.1": { "name": "4.7.2.1", diff --git a/releases/dbt-core.json b/releases/dbt-core.json index c6c030c1..26fff94a 100644 --- a/releases/dbt-core.json +++ b/releases/dbt-core.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.7.7": { "name": "1.7.7", diff --git a/releases/debian.json b/releases/debian.json index 363775d5..2d0393d8 100644 --- a/releases/debian.json +++ b/releases/debian.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "12.5": { "name": "12.5", diff --git a/releases/dependencytrack.json b/releases/dependencytrack.json index f9f1c008..e2894d4e 100644 --- a/releases/dependencytrack.json +++ b/releases/dependencytrack.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.10.1": { "name": "4.10.1", diff --git a/releases/devuan.json b/releases/devuan.json index 64e4db1f..9a3eafba 100644 --- a/releases/devuan.json +++ b/releases/devuan.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.0.0": { "name": "5.0.0", diff --git a/releases/django.json b/releases/django.json index 4d8d1950..9015070b 100644 --- a/releases/django.json +++ b/releases/django.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.0.2": { "name": "5.0.2", diff --git a/releases/docker-engine.json b/releases/docker-engine.json index 248e3bfc..7426422f 100644 --- a/releases/docker-engine.json +++ b/releases/docker-engine.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "25.0.3": { "name": "25.0.3", diff --git a/releases/dotnet.json b/releases/dotnet.json index 88eefcad..9e987d66 100644 --- a/releases/dotnet.json +++ b/releases/dotnet.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.0.1": { "name": "8.0.1", diff --git a/releases/drupal.json b/releases/drupal.json index 64fc1d3c..78fbf824 100644 --- a/releases/drupal.json +++ b/releases/drupal.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "10.2.3": { "name": "10.2.3", diff --git a/releases/drush.json b/releases/drush.json index 4ab376df..738ba39c 100644 --- a/releases/drush.json +++ b/releases/drush.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "12.4.3": { "name": "12.4.3", diff --git a/releases/eclipse-jetty.json b/releases/eclipse-jetty.json index 494e4a4c..78583825 100644 --- a/releases/eclipse-jetty.json +++ b/releases/eclipse-jetty.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "12.0.6": { "name": "12.0.6", diff --git a/releases/eclipse-temurin.json b/releases/eclipse-temurin.json index 7154cb8b..982d6aed 100644 --- a/releases/eclipse-temurin.json +++ b/releases/eclipse-temurin.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "11.0.22+7.1": { "name": "11.0.22+7.1", diff --git a/releases/eks.json b/releases/eks.json index 2a264f39..329542fd 100644 --- a/releases/eks.json +++ b/releases/eks.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.29-eks-1": { "name": "1.29-eks-1", diff --git a/releases/elasticsearch.json b/releases/elasticsearch.json index 4dca7b36..ee0d8b33 100644 --- a/releases/elasticsearch.json +++ b/releases/elasticsearch.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.12.1": { "name": "8.12.1", diff --git a/releases/electron.json b/releases/electron.json index 998a4541..a90b541c 100644 --- a/releases/electron.json +++ b/releases/electron.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "28.2.2": { "name": "28.2.2", diff --git a/releases/elixir.json b/releases/elixir.json index b2713153..cb782f6a 100644 --- a/releases/elixir.json +++ b/releases/elixir.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.16.1": { "name": "1.16.1", diff --git a/releases/emberjs.json b/releases/emberjs.json index 7bff59b5..5be95edd 100644 --- a/releases/emberjs.json +++ b/releases/emberjs.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.6.0": { "name": "5.6.0", diff --git a/releases/envoy.json b/releases/envoy.json index 597a2571..22528721 100644 --- a/releases/envoy.json +++ b/releases/envoy.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.29.1": { "name": "1.29.1", diff --git a/releases/erlang.json b/releases/erlang.json index bba6f09d..100d8eeb 100644 --- a/releases/erlang.json +++ b/releases/erlang.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "26.2.2": { "name": "26.2.2", diff --git a/releases/etcd.json b/releases/etcd.json index a0d4b2f0..a3e59bf2 100644 --- a/releases/etcd.json +++ b/releases/etcd.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.5.12": { "name": "3.5.12", diff --git a/releases/eurolinux.json b/releases/eurolinux.json index 02f2aa7b..c3355b68 100644 --- a/releases/eurolinux.json +++ b/releases/eurolinux.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "9.3": { "name": "9.3", diff --git a/releases/exim.json b/releases/exim.json index 9dd9cf35..54ad037f 100644 --- a/releases/exim.json +++ b/releases/exim.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.97.1": { "name": "4.97.1", diff --git a/releases/fedora.json b/releases/fedora.json index 0f111750..6668047a 100644 --- a/releases/fedora.json +++ b/releases/fedora.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "39": { "name": "39", diff --git a/releases/ffmpeg.json b/releases/ffmpeg.json index b50c1771..145b1c2c 100644 --- a/releases/ffmpeg.json +++ b/releases/ffmpeg.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.1.1": { "name": "6.1.1", diff --git a/releases/firefox.json b/releases/firefox.json index d8f530e8..ba708e3e 100644 --- a/releases/firefox.json +++ b/releases/firefox.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "122.0.1": { "name": "122.0.1", diff --git a/releases/flux.json b/releases/flux.json index 787af167..6be733e1 100644 --- a/releases/flux.json +++ b/releases/flux.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.2.3": { "name": "2.2.3", diff --git a/releases/gerrit.json b/releases/gerrit.json index 0efa4dab..04558692 100644 --- a/releases/gerrit.json +++ b/releases/gerrit.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.9.1": { "name": "3.9.1", diff --git a/releases/gitlab.json b/releases/gitlab.json index abc94cb5..cc909b66 100644 --- a/releases/gitlab.json +++ b/releases/gitlab.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "16.8.2": { "name": "16.8.2", diff --git a/releases/gke-rapid.json b/releases/gke-rapid.json index e18e99a4..3e9cc326 100644 --- a/releases/gke-rapid.json +++ b/releases/gke-rapid.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.29.1-gke.1425000": { "name": "1.29.1-gke.1425000", diff --git a/releases/gke-regular.json b/releases/gke-regular.json index 007c3c46..77191c87 100644 --- a/releases/gke-regular.json +++ b/releases/gke-regular.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.29.0-gke.1381000": { "name": "1.29.0-gke.1381000", diff --git a/releases/gke-stable.json b/releases/gke-stable.json index 057a614e..f15ed571 100644 --- a/releases/gke-stable.json +++ b/releases/gke-stable.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.28.3-gke.1118000": { "name": "1.28.3-gke.1118000", diff --git a/releases/gke.json b/releases/gke.json index e847c375..a9883291 100644 --- a/releases/gke.json +++ b/releases/gke.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.29.1-gke.1425000": { "name": "1.29.1-gke.1425000", diff --git a/releases/go.json b/releases/go.json index ef713468..9479698f 100644 --- a/releases/go.json +++ b/releases/go.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.22.0": { "name": "1.22.0", diff --git a/releases/godot.json b/releases/godot.json index b0eb6f8c..bc36610e 100644 --- a/releases/godot.json +++ b/releases/godot.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.2.1": { "name": "4.2.1", diff --git a/releases/graalvm.json b/releases/graalvm.json index 36a45eb9..1ba56498 100644 --- a/releases/graalvm.json +++ b/releases/graalvm.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "jdk-21.0.2": { "name": "jdk-21.0.2", diff --git a/releases/gradle.json b/releases/gradle.json index 667de676..74f5d941 100644 --- a/releases/gradle.json +++ b/releases/gradle.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.6.4": { "name": "7.6.4", diff --git a/releases/grafana.json b/releases/grafana.json index 59e3580b..8bab3f8e 100644 --- a/releases/grafana.json +++ b/releases/grafana.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "10.3.1": { "name": "10.3.1", diff --git a/releases/grails.json b/releases/grails.json index 0b3e6e1b..b355e053 100644 --- a/releases/grails.json +++ b/releases/grails.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.1.2": { "name": "6.1.2", diff --git a/releases/graylog.json b/releases/graylog.json index d3955593..ad717821 100644 --- a/releases/graylog.json +++ b/releases/graylog.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.2.4": { "name": "5.2.4", diff --git a/releases/gstreamer.json b/releases/gstreamer.json index 9183c575..6bb602c7 100644 --- a/releases/gstreamer.json +++ b/releases/gstreamer.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.22.9": { "name": "1.22.9", diff --git a/releases/haproxy.json b/releases/haproxy.json index 0ce4a62a..9130b4ab 100644 --- a/releases/haproxy.json +++ b/releases/haproxy.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.9.4": { "name": "2.9.4", diff --git a/releases/hashicorp-vault.json b/releases/hashicorp-vault.json index b18dd3be..d831fa9b 100644 --- a/releases/hashicorp-vault.json +++ b/releases/hashicorp-vault.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.14.9": { "name": "1.14.9", diff --git a/releases/hbase.json b/releases/hbase.json index 513e6421..1e2fc0eb 100644 --- a/releases/hbase.json +++ b/releases/hbase.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.5.7": { "name": "2.5.7", diff --git a/releases/ibm-aix.json b/releases/ibm-aix.json index dfb1be9c..32ea2f6b 100644 --- a/releases/ibm-aix.json +++ b/releases/ibm-aix.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.3.2": { "name": "7.3.2", diff --git a/releases/ibm-semeru.json b/releases/ibm-semeru.json index 674da3f4..980e1928 100644 --- a/releases/ibm-semeru.json +++ b/releases/ibm-semeru.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "17.0.10+7": { "name": "17.0.10+7", diff --git a/releases/ionic.json b/releases/ionic.json index 0e0a218b..53d9fd9d 100644 --- a/releases/ionic.json +++ b/releases/ionic.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.7.1": { "name": "7.7.1", diff --git a/releases/ios.json b/releases/ios.json index 017198ce..cd50b1e8 100644 --- a/releases/ios.json +++ b/releases/ios.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "17.3.1": { "name": "17.3.1", diff --git a/releases/ipados.json b/releases/ipados.json index 9a8bac8d..5aa010a9 100644 --- a/releases/ipados.json +++ b/releases/ipados.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "17.3.1": { "name": "17.3.1", diff --git a/releases/istio.json b/releases/istio.json index acea19a2..02ceb1f4 100644 --- a/releases/istio.json +++ b/releases/istio.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.20.3": { "name": "1.20.3", diff --git a/releases/jekyll.json b/releases/jekyll.json index 790dbb53..a14312a0 100644 --- a/releases/jekyll.json +++ b/releases/jekyll.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.9.4": { "name": "3.9.4", diff --git a/releases/jenkins.json b/releases/jenkins.json index ff197be4..60750a42 100644 --- a/releases/jenkins.json +++ b/releases/jenkins.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.444": { "name": "2.444", diff --git a/releases/jhipster.json b/releases/jhipster.json index 32a91f85..33d2cbea 100644 --- a/releases/jhipster.json +++ b/releases/jhipster.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.1.0": { "name": "8.1.0", diff --git a/releases/jira.json b/releases/jira.json index c6425d90..7236e2ea 100644 --- a/releases/jira.json +++ b/releases/jira.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "9.12.3": { "name": "9.12.3", diff --git a/releases/joomla.json b/releases/joomla.json index 35a0c007..6364db0b 100644 --- a/releases/joomla.json +++ b/releases/joomla.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.4.2": { "name": "4.4.2", diff --git a/releases/jquery.json b/releases/jquery.json index 29f25e7e..0ebcd27b 100644 --- a/releases/jquery.json +++ b/releases/jquery.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.7.1": { "name": "3.7.1", diff --git a/releases/jreleaser.json b/releases/jreleaser.json index 765ef91f..28e72892 100644 --- a/releases/jreleaser.json +++ b/releases/jreleaser.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.10.0": { "name": "1.10.0", diff --git a/releases/kdeplasma.json b/releases/kdeplasma.json index c1f64f5e..3692d854 100644 --- a/releases/kdeplasma.json +++ b/releases/kdeplasma.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.27.10": { "name": "5.27.10", diff --git a/releases/keda.json b/releases/keda.json index a88c3b52..6ab7895f 100644 --- a/releases/keda.json +++ b/releases/keda.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.13.0": { "name": "2.13.0", diff --git a/releases/keycloak.json b/releases/keycloak.json index 3e278dde..4efe4982 100644 --- a/releases/keycloak.json +++ b/releases/keycloak.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "23.0.6": { "name": "23.0.6", diff --git a/releases/kibana.json b/releases/kibana.json index 0065d143..b18c9216 100644 --- a/releases/kibana.json +++ b/releases/kibana.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.12.1": { "name": "8.12.1", diff --git a/releases/kirby.json b/releases/kirby.json index fc0391a1..c2653804 100644 --- a/releases/kirby.json +++ b/releases/kirby.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.1.0": { "name": "4.1.0", diff --git a/releases/kong-gateway.json b/releases/kong-gateway.json index e0aef832..39514600 100644 --- a/releases/kong-gateway.json +++ b/releases/kong-gateway.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.6.0": { "name": "3.6.0", diff --git a/releases/kotlin.json b/releases/kotlin.json index e19189a3..884dc44d 100644 --- a/releases/kotlin.json +++ b/releases/kotlin.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.9.22": { "name": "1.9.22", diff --git a/releases/kubernetes.json b/releases/kubernetes.json index 3fbccef6..26d20053 100644 --- a/releases/kubernetes.json +++ b/releases/kubernetes.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.29.1": { "name": "1.29.1", diff --git a/releases/laravel.json b/releases/laravel.json index c8a74e3f..479107a5 100644 --- a/releases/laravel.json +++ b/releases/laravel.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "10.43.0": { "name": "10.43.0", diff --git a/releases/linuxkernel.json b/releases/linuxkernel.json index f207867f..dfe02cc7 100644 --- a/releases/linuxkernel.json +++ b/releases/linuxkernel.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.7.4": { "name": "6.7.4", diff --git a/releases/log4j.json b/releases/log4j.json index c5948182..fb107e4e 100644 --- a/releases/log4j.json +++ b/releases/log4j.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.22.1": { "name": "2.22.1", diff --git a/releases/logstash.json b/releases/logstash.json index 49aa820e..ca7a79ab 100644 --- a/releases/logstash.json +++ b/releases/logstash.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.12.1": { "name": "8.12.1", diff --git a/releases/looker.json b/releases/looker.json index 4ae0d7ca..29c7a5dc 100644 --- a/releases/looker.json +++ b/releases/looker.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "24.0": { "name": "24.0", diff --git a/releases/macos.json b/releases/macos.json index 1b0e151c..ddeabd79 100644 --- a/releases/macos.json +++ b/releases/macos.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "14.3.1": { "name": "14.3.1", diff --git a/releases/mageia.json b/releases/mageia.json index f2a04e9d..c00cf2ad 100644 --- a/releases/mageia.json +++ b/releases/mageia.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "9": { "name": "9", diff --git a/releases/magento.json b/releases/magento.json index ff919fd0..7788d90d 100644 --- a/releases/magento.json +++ b/releases/magento.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.4.6": { "name": "2.4.6", diff --git a/releases/mariadb.json b/releases/mariadb.json index 39c8a6e9..44177d0c 100644 --- a/releases/mariadb.json +++ b/releases/mariadb.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "11.1.4": { "name": "11.1.4", diff --git a/releases/mastodon.json b/releases/mastodon.json index ec67f074..43beb9e6 100644 --- a/releases/mastodon.json +++ b/releases/mastodon.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.2.5": { "name": "4.2.5", diff --git a/releases/mattermost.json b/releases/mattermost.json index ce4995a4..b7618d74 100644 --- a/releases/mattermost.json +++ b/releases/mattermost.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "9.5.0": { "name": "9.5.0", diff --git a/releases/mediawiki.json b/releases/mediawiki.json index 9f477ec7..5cd048b1 100644 --- a/releases/mediawiki.json +++ b/releases/mediawiki.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.41.0": { "name": "1.41.0", diff --git a/releases/meilisearch.json b/releases/meilisearch.json index 1e924fcf..62473d10 100644 --- a/releases/meilisearch.json +++ b/releases/meilisearch.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.6.1": { "name": "1.6.1", diff --git a/releases/memcached.json b/releases/memcached.json index 4be511fa..0d2b7829 100644 --- a/releases/memcached.json +++ b/releases/memcached.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.6.23": { "name": "1.6.23", diff --git a/releases/micronaut.json b/releases/micronaut.json index abd44c9d..d19f6e8f 100644 --- a/releases/micronaut.json +++ b/releases/micronaut.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.3.5": { "name": "4.3.5", diff --git a/releases/microsoft-build-of-openjdk.json b/releases/microsoft-build-of-openjdk.json index fb9eb420..0dad4305 100644 --- a/releases/microsoft-build-of-openjdk.json +++ b/releases/microsoft-build-of-openjdk.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "21.0.2": { "name": "21.0.2", diff --git a/releases/mongodb.json b/releases/mongodb.json index ba1720a1..ac2e50d5 100644 --- a/releases/mongodb.json +++ b/releases/mongodb.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.0.13": { "name": "6.0.13", diff --git a/releases/moodle.json b/releases/moodle.json index 7a741602..ccdbf2aa 100644 --- a/releases/moodle.json +++ b/releases/moodle.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.3.3": { "name": "4.3.3", diff --git a/releases/mxlinux.json b/releases/mxlinux.json index 1113e59e..4fd1ff6c 100644 --- a/releases/mxlinux.json +++ b/releases/mxlinux.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "23.2": { "name": "23.2", diff --git a/releases/mysql.json b/releases/mysql.json index 7ef17335..a173dcf6 100644 --- a/releases/mysql.json +++ b/releases/mysql.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.3.0": { "name": "8.3.0", diff --git a/releases/neo4j.json b/releases/neo4j.json index 5049c57f..d1d6947d 100644 --- a/releases/neo4j.json +++ b/releases/neo4j.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.4.30": { "name": "4.4.30", diff --git a/releases/nextcloud.json b/releases/nextcloud.json index 6362b7fc..ea9e411b 100644 --- a/releases/nextcloud.json +++ b/releases/nextcloud.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "28.0.2": { "name": "28.0.2", diff --git a/releases/nextjs.json b/releases/nextjs.json index ed554c8c..38231716 100644 --- a/releases/nextjs.json +++ b/releases/nextjs.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "14.1.0": { "name": "14.1.0", diff --git a/releases/nexus.json b/releases/nexus.json index 782eebc8..ff7b605c 100644 --- a/releases/nexus.json +++ b/releases/nexus.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.65.0-02": { "name": "3.65.0-02", diff --git a/releases/nginx.json b/releases/nginx.json index 8055047a..c0e8092d 100644 --- a/releases/nginx.json +++ b/releases/nginx.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.25.3": { "name": "1.25.3", diff --git a/releases/nix.json b/releases/nix.json index 1fb1eae4..3844e569 100644 --- a/releases/nix.json +++ b/releases/nix.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.20.1": { "name": "2.20.1", diff --git a/releases/nodejs.json b/releases/nodejs.json index 784e235c..488dfce5 100644 --- a/releases/nodejs.json +++ b/releases/nodejs.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "21.6.1": { "name": "21.6.1", diff --git a/releases/nomad.json b/releases/nomad.json index 5cb7d33e..fb1e407e 100644 --- a/releases/nomad.json +++ b/releases/nomad.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.7.4": { "name": "1.7.4", diff --git a/releases/numpy.json b/releases/numpy.json index d81422a1..7804a5c8 100644 --- a/releases/numpy.json +++ b/releases/numpy.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.26.4": { "name": "1.26.4", diff --git a/releases/nutanix-aos.json b/releases/nutanix-aos.json index abe78d4f..cad2fe07 100644 --- a/releases/nutanix-aos.json +++ b/releases/nutanix-aos.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.7.1.5": { "name": "6.7.1.5", diff --git a/releases/nutanix-files.json b/releases/nutanix-files.json index df81ea0a..5f572cc2 100644 --- a/releases/nutanix-files.json +++ b/releases/nutanix-files.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.4.0.1": { "name": "4.4.0.1", diff --git a/releases/nutanix-prism.json b/releases/nutanix-prism.json index d3f14193..bb29aabe 100644 --- a/releases/nutanix-prism.json +++ b/releases/nutanix-prism.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "pc.2022.6.0.10": { "name": "pc.2022.6.0.10", diff --git a/releases/nuxt.json b/releases/nuxt.json index b5692849..9879a711 100644 --- a/releases/nuxt.json +++ b/releases/nuxt.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.10.1": { "name": "3.10.1", diff --git a/releases/opensearch.json b/releases/opensearch.json index 358751b6..53f50940 100644 --- a/releases/opensearch.json +++ b/releases/opensearch.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.3.14": { "name": "1.3.14", diff --git a/releases/openssl.json b/releases/openssl.json index 504e3e0e..f83983ec 100644 --- a/releases/openssl.json +++ b/releases/openssl.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.2.1": { "name": "3.2.1", diff --git a/releases/openwrt.json b/releases/openwrt.json index e27be794..08f07937 100644 --- a/releases/openwrt.json +++ b/releases/openwrt.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "22.03.6": { "name": "22.03.6", diff --git a/releases/openzfs.json b/releases/openzfs.json index ff5addcf..af0dbd64 100644 --- a/releases/openzfs.json +++ b/releases/openzfs.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.2.2": { "name": "2.2.2", diff --git a/releases/opnsense.json b/releases/opnsense.json index 4d204c7d..414b7901 100644 --- a/releases/opnsense.json +++ b/releases/opnsense.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "24.1.1": { "name": "24.1.1", diff --git a/releases/oracle-jdk.json b/releases/oracle-jdk.json index 66b6d0f8..bea3e2e8 100644 --- a/releases/oracle-jdk.json +++ b/releases/oracle-jdk.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8u401": { "name": "8u401", diff --git a/releases/oracle-linux.json b/releases/oracle-linux.json index ffc2065b..73f03db7 100644 --- a/releases/oracle-linux.json +++ b/releases/oracle-linux.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "9.3": { "name": "9.3", diff --git a/releases/ovirt.json b/releases/ovirt.json index 7e807ef6..9cd4d29f 100644 --- a/releases/ovirt.json +++ b/releases/ovirt.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.5.3.10": { "name": "4.5.3.10", diff --git a/releases/pan-cortex-xdr.json b/releases/pan-cortex-xdr.json index 011c3ae2..9580d41a 100644 --- a/releases/pan-cortex-xdr.json +++ b/releases/pan-cortex-xdr.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.2": { "name": "8.2", diff --git a/releases/pan-gp.json b/releases/pan-gp.json index 9e864799..8af51969 100644 --- a/releases/pan-gp.json +++ b/releases/pan-gp.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.2": { "name": "6.2", diff --git a/releases/pan-os.json b/releases/pan-os.json index 75474cff..18093bca 100644 --- a/releases/pan-os.json +++ b/releases/pan-os.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "11.1": { "name": "11.1", diff --git a/releases/perl.json b/releases/perl.json index b0fcc90a..0f0bfaf3 100644 --- a/releases/perl.json +++ b/releases/perl.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.38.2": { "name": "5.38.2", diff --git a/releases/php.json b/releases/php.json index 4908f186..c4084b76 100644 --- a/releases/php.json +++ b/releases/php.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.3.2": { "name": "8.3.2", diff --git a/releases/phpbb.json b/releases/phpbb.json index 3e3c5098..03690b46 100644 --- a/releases/phpbb.json +++ b/releases/phpbb.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.3.11": { "name": "3.3.11", diff --git a/releases/phpmyadmin.json b/releases/phpmyadmin.json index cb3997ab..8b9b285a 100644 --- a/releases/phpmyadmin.json +++ b/releases/phpmyadmin.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.2.1": { "name": "5.2.1", diff --git a/releases/plesk.json b/releases/plesk.json index e3e43487..4301724a 100644 --- a/releases/plesk.json +++ b/releases/plesk.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "18.0.58.2": { "name": "18.0.58.2", diff --git a/releases/postfix.json b/releases/postfix.json index 99d70c32..40ca5fcd 100644 --- a/releases/postfix.json +++ b/releases/postfix.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.8.5": { "name": "3.8.5", diff --git a/releases/postgresql.json b/releases/postgresql.json index 00e56b38..10591239 100644 --- a/releases/postgresql.json +++ b/releases/postgresql.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "16.2": { "name": "16.2", diff --git a/releases/powershell.json b/releases/powershell.json index 78206cf0..475c8308 100644 --- a/releases/powershell.json +++ b/releases/powershell.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.4.1": { "name": "7.4.1", diff --git a/releases/prometheus.json b/releases/prometheus.json index f417cbcc..0930e732 100644 --- a/releases/prometheus.json +++ b/releases/prometheus.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.45.3": { "name": "2.45.3", diff --git a/releases/protractor.json b/releases/protractor.json index e2b5742e..fd79ef32 100644 --- a/releases/protractor.json +++ b/releases/protractor.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.0.0": { "name": "7.0.0", diff --git a/releases/proxmox-ve.json b/releases/proxmox-ve.json index e8405221..7b245fb7 100644 --- a/releases/proxmox-ve.json +++ b/releases/proxmox-ve.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.1": { "name": "8.1", diff --git a/releases/puppet.json b/releases/puppet.json index c840ef5e..9bf6ead4 100644 --- a/releases/puppet.json +++ b/releases/puppet.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.4.0": { "name": "8.4.0", diff --git a/releases/python.json b/releases/python.json index 0557258f..555f3f5c 100644 --- a/releases/python.json +++ b/releases/python.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.12.2": { "name": "3.12.2", diff --git a/releases/qt.json b/releases/qt.json index 66d48870..319d84c1 100644 --- a/releases/qt.json +++ b/releases/qt.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.6.1": { "name": "6.6.1", diff --git a/releases/quarkus.json b/releases/quarkus.json index 7e473a3d..8f903897 100644 --- a/releases/quarkus.json +++ b/releases/quarkus.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.7.2": { "name": "3.7.2", diff --git a/releases/quasar.json b/releases/quasar.json index 5ac04238..d1304782 100644 --- a/releases/quasar.json +++ b/releases/quasar.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.14.3": { "name": "2.14.3", diff --git a/releases/rabbitmq.json b/releases/rabbitmq.json index ed3ea173..1fb3d5e6 100644 --- a/releases/rabbitmq.json +++ b/releases/rabbitmq.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.12.12": { "name": "3.12.12", diff --git a/releases/rancher.json b/releases/rancher.json index 8c57ce3f..d2d0d5b5 100644 --- a/releases/rancher.json +++ b/releases/rancher.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.6.14": { "name": "2.6.14", diff --git a/releases/react.json b/releases/react.json index 37329e82..a54ab6fa 100644 --- a/releases/react.json +++ b/releases/react.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "18.2.0": { "name": "18.2.0", diff --git a/releases/red-hat-openshift.json b/releases/red-hat-openshift.json index c3fb51a1..cd9d5fb7 100644 --- a/releases/red-hat-openshift.json +++ b/releases/red-hat-openshift.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.11.58": { "name": "4.11.58", diff --git a/releases/redhat-satellite.json b/releases/redhat-satellite.json index 84fc04c2..5ca4ae26 100644 --- a/releases/redhat-satellite.json +++ b/releases/redhat-satellite.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.14.1": { "name": "6.14.1", diff --git a/releases/redhat.json b/releases/redhat.json index 918cebac..73d3e1f9 100644 --- a/releases/redhat.json +++ b/releases/redhat.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.9": { "name": "8.9", diff --git a/releases/redis.json b/releases/redis.json index 0b4bfe17..0a35a538 100644 --- a/releases/redis.json +++ b/releases/redis.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.2.4": { "name": "7.2.4", diff --git a/releases/redmine.json b/releases/redmine.json index 3ca6586b..46b44ed1 100644 --- a/releases/redmine.json +++ b/releases/redmine.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.1.1": { "name": "5.1.1", diff --git a/releases/rocket-chat.json b/releases/rocket-chat.json index f853bc47..45374966 100644 --- a/releases/rocket-chat.json +++ b/releases/rocket-chat.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.6.0": { "name": "6.6.0", diff --git a/releases/rockylinux.json b/releases/rockylinux.json index 99d913a8..08cb6383 100644 --- a/releases/rockylinux.json +++ b/releases/rockylinux.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.9": { "name": "8.9", diff --git a/releases/ros.json b/releases/ros.json index a8dc2c29..f2d5b3bf 100644 --- a/releases/ros.json +++ b/releases/ros.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "noetic": { "name": "noetic", diff --git a/releases/roundcube.json b/releases/roundcube.json index 85b382a3..d166f976 100644 --- a/releases/roundcube.json +++ b/releases/roundcube.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.6.6": { "name": "1.6.6", diff --git a/releases/ruby-on-rails.json b/releases/ruby-on-rails.json index d635c712..d5878ecb 100644 --- a/releases/ruby-on-rails.json +++ b/releases/ruby-on-rails.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.1.3": { "name": "7.1.3", diff --git a/releases/ruby.json b/releases/ruby.json index ea7f3454..1ba6466b 100644 --- a/releases/ruby.json +++ b/releases/ruby.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.2.3": { "name": "3.2.3", diff --git a/releases/rust.json b/releases/rust.json index be684915..32ffd9eb 100644 --- a/releases/rust.json +++ b/releases/rust.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.76.0": { "name": "1.76.0", diff --git a/releases/salt.json b/releases/salt.json index abaffca0..44e91d5a 100644 --- a/releases/salt.json +++ b/releases/salt.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3006.6": { "name": "3006.6", diff --git a/releases/sapmachine.json b/releases/sapmachine.json index 76c74157..fb41f8fd 100644 --- a/releases/sapmachine.json +++ b/releases/sapmachine.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "21.0.2": { "name": "21.0.2", diff --git a/releases/scala.json b/releases/scala.json index 966fe883..f309594c 100644 --- a/releases/scala.json +++ b/releases/scala.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.13.12": { "name": "2.13.12", diff --git a/releases/silverstripe.json b/releases/silverstripe.json index 2e53730c..7f4ec1a5 100644 --- a/releases/silverstripe.json +++ b/releases/silverstripe.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.1.6": { "name": "5.1.6", diff --git a/releases/slackware.json b/releases/slackware.json index 4a1c2256..d963458d 100644 --- a/releases/slackware.json +++ b/releases/slackware.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "15.0": { "name": "15.0", diff --git a/releases/sles.json b/releases/sles.json index ea932eb8..898dc5c9 100644 --- a/releases/sles.json +++ b/releases/sles.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "15.5": { "name": "15.5", diff --git a/releases/solr.json b/releases/solr.json index 6dd3e5a4..dba1be65 100644 --- a/releases/solr.json +++ b/releases/solr.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.11.3": { "name": "8.11.3", diff --git a/releases/sonarqube.json b/releases/sonarqube.json index 758fa113..11feed14 100644 --- a/releases/sonarqube.json +++ b/releases/sonarqube.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "9.9.4": { "name": "9.9.4", diff --git a/releases/splunk.json b/releases/splunk.json index a307e234..7355ef05 100644 --- a/releases/splunk.json +++ b/releases/splunk.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "9.2.0.1": { "name": "9.2.0.1", diff --git a/releases/spring-boot.json b/releases/spring-boot.json index c2796e87..2c329a21 100644 --- a/releases/spring-boot.json +++ b/releases/spring-boot.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.2.2": { "name": "3.2.2", diff --git a/releases/spring-framework.json b/releases/spring-framework.json index 0d8f8104..b94a0640 100644 --- a/releases/spring-framework.json +++ b/releases/spring-framework.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.1.3": { "name": "6.1.3", diff --git a/releases/sqlite.json b/releases/sqlite.json index c741fa38..530efe8f 100644 --- a/releases/sqlite.json +++ b/releases/sqlite.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.45.1": { "name": "3.45.1", diff --git a/releases/squid.json b/releases/squid.json index 51333ae8..a15e68ed 100644 --- a/releases/squid.json +++ b/releases/squid.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.5": { "name": "6.5", diff --git a/releases/symfony.json b/releases/symfony.json index 66e5848e..0b1a6502 100644 --- a/releases/symfony.json +++ b/releases/symfony.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.0.3": { "name": "7.0.3", diff --git a/releases/tails.json b/releases/tails.json index 532a8679..248f4964 100644 --- a/releases/tails.json +++ b/releases/tails.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "5.8": { "name": "5.8", diff --git a/releases/tarantool.json b/releases/tarantool.json index 138bc9b1..84e4d136 100644 --- a/releases/tarantool.json +++ b/releases/tarantool.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.0.1": { "name": "3.0.1", diff --git a/releases/telegraf.json b/releases/telegraf.json index bc5f8bd4..b73c0b62 100644 --- a/releases/telegraf.json +++ b/releases/telegraf.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.29.4": { "name": "1.29.4", diff --git a/releases/terraform.json b/releases/terraform.json index fad1753f..62015848 100644 --- a/releases/terraform.json +++ b/releases/terraform.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "1.7.3": { "name": "1.7.3", diff --git a/releases/tomcat.json b/releases/tomcat.json index 8c350b06..bde6213d 100644 --- a/releases/tomcat.json +++ b/releases/tomcat.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "9.0.85": { "name": "9.0.85", diff --git a/releases/traefik.json b/releases/traefik.json index 0b563b7b..92f4094d 100644 --- a/releases/traefik.json +++ b/releases/traefik.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.10.7": { "name": "2.10.7", diff --git a/releases/twig.json b/releases/twig.json index ed424b30..81214130 100644 --- a/releases/twig.json +++ b/releases/twig.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2.16.0": { "name": "2.16.0", diff --git a/releases/typo3.json b/releases/typo3.json index 21c5026f..160c25d2 100644 --- a/releases/typo3.json +++ b/releases/typo3.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "13.0.0": { "name": "13.0.0", diff --git a/releases/ubuntu.json b/releases/ubuntu.json index d2905065..5a42a946 100644 --- a/releases/ubuntu.json +++ b/releases/ubuntu.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "23.10": { "name": "23.10", diff --git a/releases/umbraco.json b/releases/umbraco.json index 6976d117..98b009b0 100644 --- a/releases/umbraco.json +++ b/releases/umbraco.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.18.13": { "name": "8.18.13", diff --git a/releases/unity.json b/releases/unity.json index a6ff367a..95f47128 100644 --- a/releases/unity.json +++ b/releases/unity.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "2021.3.35f1": { "name": "2021.3.35f1", diff --git a/releases/unrealircd.json b/releases/unrealircd.json index 1ecfafe0..e4f2b7fa 100644 --- a/releases/unrealircd.json +++ b/releases/unrealircd.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.1.4": { "name": "6.1.4", diff --git a/releases/varnish.json b/releases/varnish.json index 4f7758b0..6e739e17 100644 --- a/releases/varnish.json +++ b/releases/varnish.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "7.4.2": { "name": "7.4.2", diff --git a/releases/veeam-backup-and-replication.json b/releases/veeam-backup-and-replication.json index 0d800764..e8e1a43b 100644 --- a/releases/veeam-backup-and-replication.json +++ b/releases/veeam-backup-and-replication.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "12.1.1.56": { "name": "12.1.1.56", diff --git a/releases/visualstudio.json b/releases/visualstudio.json index ad588b45..86d6a800 100644 --- a/releases/visualstudio.json +++ b/releases/visualstudio.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "17.8.6": { "name": "17.8.6", diff --git a/releases/vue.json b/releases/vue.json index bd6dc391..7542954f 100644 --- a/releases/vue.json +++ b/releases/vue.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.4.18": { "name": "3.4.18", diff --git a/releases/vuetify.json b/releases/vuetify.json index 3d5759be..f479f94e 100644 --- a/releases/vuetify.json +++ b/releases/vuetify.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.5.3": { "name": "3.5.3", diff --git a/releases/wagtail.json b/releases/wagtail.json index 82826a0b..fbd4f8a1 100644 --- a/releases/wagtail.json +++ b/releases/wagtail.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.0": { "name": "6.0", diff --git a/releases/watchos.json b/releases/watchos.json index f279af8c..d049f981 100644 --- a/releases/watchos.json +++ b/releases/watchos.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "10.3.1": { "name": "10.3.1", diff --git a/releases/weechat.json b/releases/weechat.json index d96bd137..8766cf9c 100644 --- a/releases/weechat.json +++ b/releases/weechat.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.2.1": { "name": "4.2.1", diff --git a/releases/wordpress.json b/releases/wordpress.json index cd390616..e56e0ed0 100644 --- a/releases/wordpress.json +++ b/releases/wordpress.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.4.3": { "name": "6.4.3", diff --git a/releases/xcp-ng.json b/releases/xcp-ng.json index 18825659..5779e1fe 100644 --- a/releases/xcp-ng.json +++ b/releases/xcp-ng.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "8.2.1": { "name": "8.2.1", diff --git a/releases/yarn.json b/releases/yarn.json index ae58bf79..c511d79d 100644 --- a/releases/yarn.json +++ b/releases/yarn.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.8.0": { "name": "3.8.0", diff --git a/releases/yocto.json b/releases/yocto.json index d3f6f698..81971462 100644 --- a/releases/yocto.json +++ b/releases/yocto.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "4.0.16": { "name": "4.0.16", diff --git a/releases/zabbix.json b/releases/zabbix.json index 3f4a2545..1480663e 100644 --- a/releases/zabbix.json +++ b/releases/zabbix.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "6.4.11": { "name": "6.4.11", diff --git a/releases/zookeeper.json b/releases/zookeeper.json index 7c5aa61a..669d6552 100644 --- a/releases/zookeeper.json +++ b/releases/zookeeper.json @@ -1,4 +1,5 @@ { + "releases": {}, "versions": { "3.7.2": { "name": "3.7.2", diff --git a/src/aws-lambda.py b/src/aws-lambda.py index d06001e8..a9dc7dca 100644 --- a/src/aws-lambda.py +++ b/src/aws-lambda.py @@ -1,16 +1,7 @@ - from bs4 import BeautifulSoup from common import dates, endoflife, http, releasedata -"""Fetches AWS lambda runtimes from https://docs.aws.amazon.com. - -This script does not retrieve release dates, as they are only available in release announcements. -Instead, it uses the release dates from the endoflife.date product file, or alternatively the -date the release was first detected (or the current date if none is found). - -If one day release dates are available in the AWS documentation, it would be better to make use -them though. Note that this would also be unnecessary if it was possible to disable release/latest -release dates updates in the latest.py script.""" +"""Fetches AWS lambda runtimes with their support / EOL dates from https://docs.aws.amazon.com.""" with releasedata.ProductData("aws-lambda") as product_data: product_frontmatter = endoflife.ProductFrontmatter(product_data.name) @@ -18,17 +9,31 @@ with releasedata.ProductData("aws-lambda") as product_data: soup = BeautifulSoup(response.text, features="html5lib") for table in soup.find_all("table"): - headers = [th.get_text().strip().lower() for th in table.find("thead").find_all("tr")[1].find_all("th")] - if "identifier" not in headers: - continue + table_name = table.find("thead").find_all("tr")[0].find("th").get_text().strip().lower() + if table_name != "supported runtimes" and table_name != "deprecated runtimes": + message = f"unexpected table '{table_name}'" + raise ValueError(message) + headers = [th.get_text().strip().lower() for th in table.find("thead").find_all("tr")[1].find_all("th")] + if "identifier" not in headers or "deprecation date" not in headers or "block function update" not in headers: + message = f"table '{table_name}' does not contain the expected headers" + raise ValueError(message) + + is_supported_table = table_name == "supported runtimes" identifier_index = headers.index("identifier") + deprecation_date_index = headers.index("deprecation date") + block_function_update_index = headers.index("block function update") + for row in table.find("tbody").find_all("tr"): cells = row.find_all("td") identifier = cells[identifier_index].get_text().strip() + deprecation_date_str = cells[deprecation_date_index].get_text().strip() + deprecation_date = dates.parse_date(deprecation_date_str) if deprecation_date_str else None + block_function_update_str = cells[block_function_update_index].get_text().strip() + block_function_update = dates.parse_date(block_function_update_str) if block_function_update_str else None - date = product_frontmatter.get_release_date(identifier) # use the product releaseDate if available - if date is None: - date = dates.today() # else use today's date - - product_data.declare_version(identifier, date) + release = product_data.get_release(identifier) + # if no date is available, use True for supported runtimes and False for deprecated ones + release.set_support(deprecation_date if deprecation_date else is_supported_table) + # if no date is available, use False for supported runtimes and True for deprecated ones + release.set_eol(block_function_update if block_function_update else not is_supported_table) diff --git a/src/common/endoflife.py b/src/common/endoflife.py index 0df7dcd1..8fab08bb 100644 --- a/src/common/endoflife.py +++ b/src/common/endoflife.py @@ -86,8 +86,14 @@ class ProductFrontmatter: return configs + def get_releases(self) -> list[dict]: + return self.data.get("releases", []) + + def get_release_names(self) -> list[str]: + return [release["releaseCycle"] for release in self.get_releases()] + def get_release_date(self, release_cycle: str) -> datetime | None: - for release in self.data["releases"]: + for release in self.get_releases(): if release["releaseCycle"] == release_cycle: return release["releaseDate"] return None diff --git a/src/common/releasedata.py b/src/common/releasedata.py index 7b6e17f0..3df359a7 100644 --- a/src/common/releasedata.py +++ b/src/common/releasedata.py @@ -16,6 +16,38 @@ class ProductUpdateError(Exception): """Custom exceptions raised when unexpected errors occur during product updates.""" +class ProductRelease: + def __init__(self, product: str, data: dict = None) -> None: + self.product = product + self.data = data if data else {} + + @staticmethod + def of(product: str, name: str) -> "ProductRelease": + return ProductRelease(product, { "name": name }) + + def name(self) -> str: + return self.data["name"] + + def set_support(self, new_value: datetime | bool) -> None: + self.set_field("support", new_value) + + def set_eol(self, new_value: datetime | bool) -> None: + self.set_field("eol", new_value) + + def set_field(self, field: str, new_value: any) -> None: + new_value = new_value.strftime("%Y-%m-%d") if isinstance(new_value, datetime) else new_value + old_value = self.data.get(field, None) + if old_value != new_value: + self.data[field] = new_value + if old_value: + logging.info(f"updated '{field}' in {self} from {old_value} to {new_value}") + else: + logging.info(f"set '{field}' in {self} to {new_value}") + + def __repr__(self) -> str: + return f"{self.product}#{self.name()}" + + class ProductVersion: def __init__(self, product: str, data: dict) -> None: self.product = product @@ -45,6 +77,7 @@ class ProductData: def __init__(self, name: str) -> None: self.name: str = name self.versions_path: Path = VERSIONS_PATH / f"{name}.json" + self.releases = {} self.versions: dict[str, ProductVersion] = {} def __enter__(self) -> "ProductData": @@ -67,13 +100,21 @@ class ProductData: raise ProductUpdateError(message) from exc_value logging.info("updating %s data",self.versions_path) - # sort by date then version (desc) + ordered_releases = sorted(self.releases.values(), key=lambda v: v.name(), reverse=True) ordered_versions = sorted(self.versions.values(), key=lambda v: (v.date(), v.name()), reverse=True) with self.versions_path.open("w") as f: f.write(json.dumps({ + "releases": {release.name(): release.data for release in ordered_releases}, "versions": {version.name(): version.data for version in ordered_versions}, }, indent=2)) + def get_release(self, release: str) -> ProductRelease: + if release not in self.releases: + logging.info(f"adding release {release} to {self}") + self.releases[release] = ProductRelease.of(self.name, release) + + return self.releases[release] + def get_version(self, version: str) -> ProductVersion: return self.versions[version] if version in self.versions else None diff --git a/update.py b/update.py index 2599e389..dc2c1759 100644 --- a/update.py +++ b/update.py @@ -33,7 +33,7 @@ class ScriptExecutionSummary: def print_summary(self, summary: GitHubStepSummary, min_duration: float = 3) -> None: summary.println("## Script execution summary\n") - summary.println(f"\nExecutions below {min_duration} seconds are hidden except in case of failure.\n") + summary.println(f"Executions below {min_duration} seconds are hidden except in case of failure.\n") summary.println("### By products\n") summary.println("| Name | Duration | Scripts | Succeeded |") summary.println("|------|----------|---------|-----------|")