From 17fec6b01572acaa6635f87168b03632b2362253 Mon Sep 17 00:00:00 2001 From: Ben Vincent Date: Sat, 2 May 2026 01:29:15 +1000 Subject: [PATCH] fix: support builds[].version metadata structure in update-gh Packages use version/release fields nested inside builds[] entries rather than at the top level of metadata.yaml. --- tools/update-gh | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/tools/update-gh b/tools/update-gh index 2509d01..b74aee9 100755 --- a/tools/update-gh +++ b/tools/update-gh @@ -293,7 +293,11 @@ def update_package_metadata(package_dir: Path, new_version: str, dry_run: bool = with open(metadata_file, 'r') as f: metadata = yaml.safe_load(f) - old_version = metadata.get('version', 'unknown') + builds = metadata.get('builds', []) + if builds and isinstance(builds, list) and builds[0].get('version') is not None: + old_version = str(builds[0].get('version', 'unknown')) + else: + old_version = metadata.get('version', 'unknown') logger.info(f"Updating {metadata.get('name', 'unknown')} from {old_version} to {new_version}") if dry_run: @@ -301,8 +305,15 @@ def update_package_metadata(package_dir: Path, new_version: str, dry_run: bool = return True # Update version in metadata and reset release to 1 - metadata['version'] = new_version - metadata['release'] = 1 + # Support both top-level version and builds[].version + builds = metadata.get('builds', []) + if builds and isinstance(builds, list) and builds[0].get('version') is not None: + for build in builds: + build['version'] = new_version + build['release'] = 1 + else: + metadata['version'] = new_version + metadata['release'] = 1 # Write updated metadata with open(metadata_file, 'w') as f: @@ -340,7 +351,6 @@ def check_package_updates(package_dir: Path, dry_run: bool = False) -> bool: metadata = yaml.safe_load(f) package_name = metadata.get('name', package_dir.name) - current_version = metadata.get('version') github_repo = metadata.get('github') claude_ai = metadata.get('claude_ai', False) @@ -348,6 +358,13 @@ def check_package_updates(package_dir: Path, dry_run: bool = False) -> bool: logger.debug(f"Package {package_name} has no GitHub repo or claude_ai configured") return True + # Support both top-level version and builds[].version + builds = metadata.get('builds', []) + if builds and isinstance(builds, list) and builds[0].get('version'): + current_version = str(builds[0].get('version')) + else: + current_version = metadata.get('version') + if not current_version: logger.warning(f"Package {package_name} has no version in metadata") return False