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'
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
+45 -14
View File
@@ -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