[update-product-data] Print unmatch release as YAML (#481)

So that it can be directly copy-pasted to endoflife.date sources.
This commit is contained in:
Marc Wrobel
2025-08-02 12:10:19 +02:00
committed by GitHub
parent e7dcacdcb8
commit b2f4028314

View File

@@ -7,7 +7,7 @@ from pathlib import Path
import frontmatter import frontmatter
from packaging.version import InvalidVersion, Version from packaging.version import InvalidVersion, Version
from ruamel.yaml import YAML from ruamel.yaml import YAML, StringIO
from ruamel.yaml.representer import RoundTripRepresenter from ruamel.yaml.representer import RoundTripRepresenter
from ruamel.yaml.resolver import Resolver from ruamel.yaml.resolver import Resolver
@@ -153,13 +153,7 @@ class Product:
self.updated = self.updated or release.updated self.updated = self.updated or release.updated
if not release_matched: if not release_matched:
# get the first available date in the release data self.unmatched_releases[name] = release_data
date_str = (release_data.get("extendedSupport", None)
or release_data.get("eol", None)
or release_data.get("support", None)
or release_data.get("releaseDate", None))
self.unmatched_releases[name] = datetime.date.fromisoformat(str(date_str)) if isinstance(date_str, str) else None
def process_version(self, version_data: dict) -> None: def process_version(self, version_data: dict) -> None:
name = version_data["name"] name = version_data["name"]
@@ -211,7 +205,7 @@ def update_product(name: str, product_dir: Path, releases_dir: Path, output: Git
# List all unmatched versions released in the last 30 days # List all unmatched versions released in the last 30 days
today = datetime.datetime.now(tz=datetime.timezone.utc).date() today = datetime.datetime.now(tz=datetime.timezone.utc).date()
__raise_alert_for_unmatched_versions(name, output, product, today, 30) __raise_alert_for_unmatched_versions(name, output, product, today, 30)
__raise_alert_for_unmatched_releases(name, output, product, today, 30) __raise_alert_for_unmatched_releases(name, output, product)
def __raise_alert_for_unmatched_versions(name: str, output: GitHubOutput, product: Product, today: datetime.date, def __raise_alert_for_unmatched_versions(name: str, output: GitHubOutput, product: Product, today: datetime.date,
@@ -225,15 +219,30 @@ def __raise_alert_for_unmatched_versions(name: str, output: GitHubOutput, produc
output.println(f"{name}:{version} ({date})") output.println(f"{name}:{version} ({date})")
def __raise_alert_for_unmatched_releases(name: str, output: GitHubOutput, product: Product, today: datetime.date, def __print_unmatched_releases_as_yaml(product: Product) -> None:
suppress_alert_threshold_days: int) -> None: releases = []
for release, data in product.unmatched_releases.items():
release_data = {"releaseCycle": release}
release_data.update(data)
releases.append(release_data)
yaml = YAML()
yaml.width = 4096 # prevent line-wrap
yaml.indent(sequence=4)
yaml_output = StringIO()
yaml.dump(releases, yaml_output)
logging.debug(f"{product.name}:\n{yaml_output.getvalue()}")
def __raise_alert_for_unmatched_releases(name: str, output: GitHubOutput, product: Product) -> None:
if len(product.unmatched_releases) == 0: if len(product.unmatched_releases) == 0:
return return
for release, date in product.unmatched_releases.items(): for release in product.unmatched_releases.items():
if (not date) or ((today - date).days < suppress_alert_threshold_days): logging.warning(f"{name}:{release} not included")
logging.warning(f"{name}:{release} not included") output.println(f"{name}:{release}")
output.println(f"{name}:{release}")
__print_unmatched_releases_as_yaml(product)
if __name__ == "__main__": if __name__ == "__main__":