#!/usr/bin/env python3 """ Generate README.md with ArgoCD application status badges. Scans k8s/ directory structure to find all applications and generates badges for them. """ import os import sys from pathlib import Path from typing import Dict, List def scan_k8s_directory(k8s_path: str) -> Dict[str, List[str]]: """ Scan k8s/ directory and return applications grouped by category. Args: k8s_path: Path to k8s directory Returns: Dictionary with categories as keys and lists of app names as values """ apps_by_category = { 'core': [], 'apps': [], 'games': [] } k8s_dir = Path(k8s_path) for category in apps_by_category.keys(): category_path = k8s_dir / category if category_path.exists() and category_path.is_dir(): # Get all subdirectories (each subdirectory is an app) apps = [ d.name for d in category_path.iterdir() if d.is_dir() and not d.name.startswith('.') ] apps_by_category[category] = sorted(apps) return apps_by_category def generate_badge_line(app_name: str) -> str: """ Generate markdown line with badge for an application. Args: app_name: Name of the application Returns: Markdown formatted string with badge """ badge_url = f"https://ag.hexor.cy/api/badge?name={app_name}&revision=true" app_url = f"https://ag.hexor.cy/applications/argocd/{app_name}" return f"| **{app_name}** | []({app_url}) |" def generate_readme_content(apps_by_category: Dict[str, List[str]]) -> str: """ Generate README.md content with all applications. Args: apps_by_category: Dictionary with apps grouped by category Returns: Complete README.md content """ lines = [ "# homelab", "", "ArgoCD homelab project", "", "## ArgoCD Applications Status", "", "
| ", "", "### Core Applications", "", "| Application | Status |", "| :--- | :---: |" ] # Add core applications for app in apps_by_category.get('core', []): lines.append(generate_badge_line(app)) lines.extend([ "", "### Games", "", "| Application | Status |", "| :--- | :---: |" ]) # Add games for app in apps_by_category.get('games', []): lines.append(generate_badge_line(app)) lines.extend([ " | ", "", "", "### Applications", "", "| Application | Status |", "| :--- | :---: |" ]) # Add applications for app in apps_by_category.get('apps', []): lines.append(generate_badge_line(app)) lines.extend([ "", " | ", "