feat: automatically update claude-ai version #88

Merged
unkinben merged 1 commits from benvin/claude-ai-versioncheck into master 2026-04-25 15:39:39 +10:00
2 changed files with 46 additions and 14 deletions
+1
View File
@@ -9,6 +9,7 @@ builds:
release: '1' release: '1'
repository: [almalinux/el9] repository: [almalinux/el9]
version: 2.1.120 version: 2.1.120
claude_ai: true
description: Claude Code - Anthropic's agentic AI coding tool description: Claude Code - Anthropic's agentic AI coding tool
homepage: https://claude.ai/code homepage: https://claude.ai/code
license: Proprietary license: Proprietary
+45 -14
View File
@@ -154,6 +154,33 @@ def load_env_vars(env_file: Path) -> Dict[str, str]:
return env_vars 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]: def get_github_latest_release(repo: str) -> Optional[Dict]:
""" """
Get the latest release from GitHub API. 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) package_name = metadata.get('name', package_dir.name)
current_version = metadata.get('version') current_version = metadata.get('version')
github_repo = metadata.get('github') github_repo = metadata.get('github')
claude_ai = metadata.get('claude_ai', False)
if not github_repo: if not github_repo and not claude_ai:
logger.debug(f"Package {package_name} has no GitHub repo configured") logger.debug(f"Package {package_name} has no GitHub repo or claude_ai configured")
return True return True
if not current_version: if not current_version:
logger.warning(f"Package {package_name} has no version in metadata") logger.warning(f"Package {package_name} has no version in metadata")
return False return False
logger.info(f"Checking {package_name} (current: {current_version}) from {github_repo}") if claude_ai:
logger.info(f"Checking {package_name} (current: {current_version}) from downloads.claude.ai")
# Get latest release from GitHub latest_version = get_claude_ai_latest_version()
latest_release = get_github_latest_release(github_repo) if not latest_version:
if not latest_release: return False
return False else:
logger.info(f"Checking {package_name} (current: {current_version}) from {github_repo}")
latest_version = normalize_version(latest_release.get('tag_name', '')) latest_release = get_github_latest_release(github_repo)
if not latest_version: if not latest_release:
logger.warning(f"Could not determine latest version for {package_name}") return False
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 # Compare versions
if compare_versions(current_version, latest_version): 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: with open(metadata_file, 'r') as f:
metadata = yaml.safe_load(f) metadata = yaml.safe_load(f)
if metadata.get('github'): if metadata.get('github') or metadata.get('claude_ai'):
github_packages.append(package_dir) github_packages.append(package_dir)
except Exception: except Exception:
continue continue