Copy releases from products frontmatter (#465)

Copy releases, without their properties, from product data (frontmatter) to release data.

This script is not intended to be declared in the frontmatter: it is for internal use only.
It executes before all other scripts, and helps the following scripts to work with releases.
This commit is contained in:
Marc Wrobel
2025-07-12 12:01:54 +02:00
parent 9f5131469c
commit 42c1189781
3 changed files with 23 additions and 5 deletions

View File

@@ -0,0 +1,12 @@
from common import releasedata
"""Copy releases, without their properties, from product data (frontmatter) to release data.
This script is not intended to be declared in the frontmatter: it is for internal use only.
It executes before all other scripts, and helps the following scripts to work with releases.
"""
frontmatter, _ = releasedata.parse_argv(ignore_auto_config=True)
with releasedata.ProductData(frontmatter.name) as product_data:
for frontmatter_release in frontmatter.get_releases():
product_data.get_release(frontmatter_release.get("releaseCycle"))

View File

@@ -193,7 +193,7 @@ class ProductData:
def config_from_argv() -> endoflife.AutoConfig: def config_from_argv() -> endoflife.AutoConfig:
return parse_argv()[1] return parse_argv()[1]
def parse_argv() -> tuple[endoflife.ProductFrontmatter, endoflife.AutoConfig]: def parse_argv(ignore_auto_config: bool = False) -> tuple[endoflife.ProductFrontmatter, endoflife.AutoConfig]:
parser = argparse.ArgumentParser(description=sys.argv[0]) parser = argparse.ArgumentParser(description=sys.argv[0])
parser.add_argument('-p', '--product', required=True, help='path to the product') parser.add_argument('-p', '--product', required=True, help='path to the product')
parser.add_argument('-m', '--method', required=True, help='method to filter by') parser.add_argument('-m', '--method', required=True, help='method to filter by')
@@ -205,4 +205,5 @@ def parse_argv() -> tuple[endoflife.ProductFrontmatter, endoflife.AutoConfig]:
logging.basicConfig(format="%(message)s", level=(logging.DEBUG if args.verbose else logging.INFO)) logging.basicConfig(format="%(message)s", level=(logging.DEBUG if args.verbose else logging.INFO))
product = endoflife.ProductFrontmatter(Path(args.product)) product = endoflife.ProductFrontmatter(Path(args.product))
return product, product.auto_config(args.method, args.url) auto_config = None if ignore_auto_config else product.auto_config(args.method, args.url)
return product, auto_config

View File

@@ -105,13 +105,18 @@ def run_scripts(summary: GitHubStepSummary, products: list[ProductFrontmatter])
exec_summary = ScriptExecutionSummary() exec_summary = ScriptExecutionSummary()
for product in products: for product in products:
if not product.has_auto_configs(): configs = product.auto_configs()
continue
if not configs:
continue # skip products without auto configs
# Add default configs
configs = [AutoConfig(product.name, {"_copy_product_releases": ""})] + configs
with GitHubGroup(product.name): with GitHubGroup(product.name):
try: try:
__delete_data(product) __delete_data(product)
for config in product.auto_configs(): for config in configs:
success = __run_script(product, config, exec_summary) success = __run_script(product, config, exec_summary)
if not success: if not success:
__revert_data(product) __revert_data(product)