diff --git a/rpms/claude-code/metadata.yaml b/rpms/claude-code/metadata.yaml index 0c45319..9b6c6fe 100644 --- a/rpms/claude-code/metadata.yaml +++ b/rpms/claude-code/metadata.yaml @@ -9,6 +9,7 @@ builds: release: '1' repository: [almalinux/el9] version: 2.1.120 +claude_ai: true description: Claude Code - Anthropic's agentic AI coding tool homepage: https://claude.ai/code license: Proprietary diff --git a/tools/update-gh b/tools/update-gh index f37f169..2509d01 100755 --- a/tools/update-gh +++ b/tools/update-gh @@ -154,6 +154,33 @@ def load_env_vars(env_file: Path) -> Dict[str, str]: return env_vars +def get_claude_ai_latest_version() -> Optional[str]: + """ + Get the latest claude-code version from downloads.claude.ai. + + Returns: + Latest version string or None if not found + """ + logger = logging.getLogger(__name__) + + try: + url = "https://downloads.claude.ai/claude-code-releases/latest" + logger.debug(f"Checking claude-code latest version: {url}") + response = requests.get(url, timeout=30) + + if response.status_code == 200: + version = response.text.strip() + logger.debug(f"Latest claude-code version: {version}") + return version + else: + logger.warning(f"Unexpected response from claude.ai: {response.status_code}") + return None + + except requests.RequestException as e: + logger.error(f"Failed to check claude-code version: {e}") + return None + + def get_github_latest_release(repo: str) -> Optional[Dict]: """ Get the latest release from GitHub API. @@ -315,26 +342,30 @@ def check_package_updates(package_dir: Path, dry_run: bool = False) -> bool: 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) - if not github_repo: - logger.debug(f"Package {package_name} has no GitHub repo configured") + if not github_repo and not claude_ai: + logger.debug(f"Package {package_name} has no GitHub repo or claude_ai configured") return True if not current_version: logger.warning(f"Package {package_name} has no version in metadata") return False - logger.info(f"Checking {package_name} (current: {current_version}) from {github_repo}") - - # Get latest release from GitHub - latest_release = get_github_latest_release(github_repo) - if not latest_release: - return False - - latest_version = normalize_version(latest_release.get('tag_name', '')) - if not latest_version: - logger.warning(f"Could not determine latest version for {package_name}") - return False + if claude_ai: + logger.info(f"Checking {package_name} (current: {current_version}) from downloads.claude.ai") + latest_version = get_claude_ai_latest_version() + if not latest_version: + return False + else: + logger.info(f"Checking {package_name} (current: {current_version}) from {github_repo}") + latest_release = get_github_latest_release(github_repo) + if not latest_release: + return False + latest_version = normalize_version(latest_release.get('tag_name', '')) + if not latest_version: + logger.warning(f"Could not determine latest version for {package_name}") + return False # Compare versions if compare_versions(current_version, latest_version): @@ -373,7 +404,7 @@ def find_packages_with_github(rpms_dir: Path) -> List[Path]: with open(metadata_file, 'r') as f: metadata = yaml.safe_load(f) - if metadata.get('github'): + if metadata.get('github') or metadata.get('claude_ai'): github_packages.append(package_dir) except Exception: continue