86 lines
2.7 KiB
Python
86 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
import argparse
|
|
import json
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
from update_readme import configure_utf8_output, find_repo_root, load_metadata, update_readme
|
|
|
|
|
|
ABOUT_DESCRIPTION_RE = re.compile(r'"description"\s*:\s*"([^"]*)"')
|
|
|
|
|
|
def update_package_description(base_dir: str, metadata: dict, dry_run: bool) -> bool:
|
|
package_path = os.path.join(base_dir, "package.json")
|
|
with open(package_path, "r", encoding="utf-8") as file:
|
|
content = file.read()
|
|
|
|
new_description = (
|
|
f"{metadata['total_skills_label']} agentic skills for Claude Code, Gemini CLI, "
|
|
"Cursor, Antigravity & more. Installer CLI."
|
|
)
|
|
updated_content = ABOUT_DESCRIPTION_RE.sub(
|
|
f'"description": "{new_description}"', content, count=1
|
|
)
|
|
|
|
if updated_content == content:
|
|
return False
|
|
|
|
if dry_run:
|
|
print(f"[dry-run] Would update package description in {package_path}")
|
|
return True
|
|
|
|
with open(package_path, "w", encoding="utf-8", newline="\n") as file:
|
|
file.write(updated_content)
|
|
print(f"✅ Updated package description in {package_path}")
|
|
return True
|
|
|
|
|
|
def print_manual_github_about(metadata: dict) -> None:
|
|
description = (
|
|
f"{metadata['total_skills_label']} curated SKILL.md files for Claude Code, "
|
|
"Cursor, Gemini CLI, Codex, Copilot, and Antigravity."
|
|
)
|
|
print("\nManual GitHub repo settings update:")
|
|
print(f"- About description: {description}")
|
|
print("- Suggested topics: claude-code, cursor, gemini-cli, codex-cli, github-copilot, antigravity")
|
|
|
|
|
|
def parse_args() -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(
|
|
description="Synchronize repository metadata across README and package.json."
|
|
)
|
|
parser.add_argument("--dry-run", action="store_true", help="Preview updates without writing files.")
|
|
parser.add_argument(
|
|
"--refresh-volatile",
|
|
action="store_true",
|
|
help="Refresh live star count and updated_at when syncing README metadata.",
|
|
)
|
|
return parser.parse_args()
|
|
|
|
|
|
def main() -> int:
|
|
args = parse_args()
|
|
base_dir = find_repo_root(os.path.dirname(__file__))
|
|
metadata = load_metadata(base_dir, refresh_volatile=args.refresh_volatile)
|
|
|
|
print("Repository metadata")
|
|
print(json.dumps(metadata, indent=2))
|
|
|
|
readme_metadata = update_readme(
|
|
dry_run=args.dry_run, refresh_volatile=args.refresh_volatile
|
|
)
|
|
package_updated = update_package_description(base_dir, metadata, args.dry_run)
|
|
print_manual_github_about(readme_metadata)
|
|
|
|
if args.dry_run and not package_updated:
|
|
print("\n[dry-run] No package.json description changes required.")
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
configure_utf8_output()
|
|
sys.exit(main())
|