Expose an explicit sync:github-about workflow that updates the remote GitHub About description, homepage, and topics from the repository metadata source of truth. Add regression coverage for the generated gh commands and document the new maintainer path in the changelog and walkthrough.
157 lines
7.3 KiB
Python
157 lines
7.3 KiB
Python
import importlib.util
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[3]
|
|
TOOLS_SCRIPTS_DIR = REPO_ROOT / "tools" / "scripts"
|
|
if str(TOOLS_SCRIPTS_DIR) not in sys.path:
|
|
sys.path.insert(0, str(TOOLS_SCRIPTS_DIR))
|
|
|
|
|
|
def load_module(relative_path: str, module_name: str):
|
|
module_path = REPO_ROOT / relative_path
|
|
spec = importlib.util.spec_from_file_location(module_name, module_path)
|
|
module = importlib.util.module_from_spec(spec)
|
|
assert spec.loader is not None
|
|
sys.modules[module_name] = module
|
|
spec.loader.exec_module(module)
|
|
return module
|
|
|
|
|
|
sync_repo_metadata = load_module(
|
|
"tools/scripts/sync_repo_metadata.py",
|
|
"sync_repo_metadata_test",
|
|
)
|
|
|
|
|
|
class SyncRepoMetadataTests(unittest.TestCase):
|
|
def test_sync_curated_docs_updates_counts_and_versions(self):
|
|
metadata = {
|
|
"version": "8.4.0",
|
|
"total_skills": 1304,
|
|
"total_skills_label": "1,304+",
|
|
}
|
|
|
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
root = Path(temp_dir)
|
|
(root / "README.md").write_text(
|
|
"""# 🌌 Antigravity Awesome Skills: 1,304+ Agentic Skills for Claude Code, Gemini CLI, Cursor, Copilot & More
|
|
|
|
> **Installable GitHub library of 1,273+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and other AI coding assistants.**
|
|
|
|
**Current release: V8.3.0.** Trusted by 25k+ GitHub stargazers, this repository combines official and community skill collections with bundles, workflows, installation paths, and docs that help you go from first install to daily use quickly.
|
|
|
|
- **Broad coverage with real utility**: 1,273+ skills across development, testing, security, infrastructure, product, and marketing.
|
|
|
|
**Antigravity Awesome Skills** (Release 8.3.0) is a large, installable skill library for AI coding assistants. It includes onboarding docs, bundles, workflows, generated catalogs, and a CLI installer so you can move from discovery to actual usage without manually stitching together dozens of repos.
|
|
|
|
If you want a faster answer than "browse all 1,273+ skills", start with a tool-specific guide:
|
|
""",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "docs" / "users").mkdir(parents=True)
|
|
(root / "docs" / "maintainers").mkdir(parents=True)
|
|
(root / "docs" / "integrations" / "jetski-gemini-loader").mkdir(parents=True)
|
|
|
|
(root / "docs" / "users" / "getting-started.md").write_text(
|
|
"# Getting Started with Antigravity Awesome Skills (V8.3.0)\n",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "docs" / "users" / "claude-code-skills.md").write_text(
|
|
"- It includes 1,273+ skills instead of a narrow single-domain starter pack.\n",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "docs" / "users" / "gemini-cli-skills.md").write_text(
|
|
"- It helps new users get started with bundles and workflows rather than forcing a cold start from 1,273+ files.\n",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "docs" / "users" / "usage.md").write_text(
|
|
"✅ **Downloaded 1,254+ skill files**\n- You installed a toolbox with 1,254+ tools\nDon't try to use all 1,254+ skills at once.\nNo. Even though you have 1,254+ skills installed locally\n",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "docs" / "users" / "visual-guide.md").write_text(
|
|
"1,254+ skills live here\n1,254+ total\n1,254+ SKILLS\n",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "docs" / "users" / "bundles.md").write_text(
|
|
'### 🚀 The "Essentials" Pack\n### 🌐 The "Web Wizard" Pack\n_Last updated: March 2026 | Total Skills: 1,254+ | Total Bundles: 99_\n',
|
|
encoding="utf-8",
|
|
)
|
|
(root / "docs" / "users" / "kiro-integration.md").write_text(
|
|
"- **Domain expertise** across 1,254+ specialized areas\n",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "docs" / "maintainers" / "repo-growth-seo.md").write_text(
|
|
"> Installable GitHub library of 1,273+ agentic skills\n- use a clean preview image that says `1,273+ Agentic Skills`;\n",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "docs" / "maintainers" / "skills-update-guide.md").write_text(
|
|
"- All 1,254+ skills from the skills directory\n",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "docs" / "integrations" / "jetski-cortex.md").write_text(
|
|
"1.200+ skill\nCon oltre 1.200 skill, questo approccio\n",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "docs" / "integrations" / "jetski-gemini-loader" / "README.md").write_text(
|
|
"This pattern avoids context overflow when you have 1,200+ skills installed.\n",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
updated_files = sync_repo_metadata.sync_curated_docs(str(root), metadata, dry_run=False)
|
|
|
|
self.assertGreaterEqual(updated_files, 10)
|
|
self.assertIn("1,304+ agentic skills", (root / "README.md").read_text(encoding="utf-8"))
|
|
self.assertIn("V8.4.0", (root / "docs" / "users" / "getting-started.md").read_text(encoding="utf-8"))
|
|
self.assertIn("1,304+ files", (root / "docs" / "users" / "gemini-cli-skills.md").read_text(encoding="utf-8"))
|
|
self.assertIn("1,304+ specialized areas", (root / "docs" / "users" / "kiro-integration.md").read_text(encoding="utf-8"))
|
|
self.assertIn("Total Bundles: 2", (root / "docs" / "users" / "bundles.md").read_text(encoding="utf-8"))
|
|
self.assertIn("1.304+ skill", (root / "docs" / "integrations" / "jetski-cortex.md").read_text(encoding="utf-8"))
|
|
|
|
def test_build_about_description_uses_live_skill_count(self):
|
|
description = sync_repo_metadata.build_about_description(
|
|
{
|
|
"total_skills_label": "1,304+",
|
|
}
|
|
)
|
|
self.assertIn("1,304+ agentic skills", description)
|
|
self.assertIn("installer CLI", description)
|
|
|
|
def test_sync_github_about_builds_expected_commands(self):
|
|
calls = []
|
|
|
|
def fake_runner(args, dry_run=False):
|
|
calls.append((args, dry_run))
|
|
|
|
sync_repo_metadata.sync_github_about(
|
|
{
|
|
"repo": "sickn33/antigravity-awesome-skills",
|
|
"total_skills_label": "1,304+",
|
|
},
|
|
dry_run=True,
|
|
runner=fake_runner,
|
|
)
|
|
|
|
self.assertEqual(len(calls), 2)
|
|
repo_edit_args, repo_edit_dry_run = calls[0]
|
|
topics_args, topics_dry_run = calls[1]
|
|
|
|
self.assertTrue(repo_edit_dry_run)
|
|
self.assertTrue(topics_dry_run)
|
|
self.assertEqual(repo_edit_args[:4], ["gh", "repo", "edit", "sickn33/antigravity-awesome-skills"])
|
|
self.assertIn("--description", repo_edit_args)
|
|
self.assertIn("--homepage", repo_edit_args)
|
|
self.assertIn("https://sickn33.github.io/antigravity-awesome-skills/", repo_edit_args)
|
|
|
|
self.assertEqual(topics_args[:4], ["gh", "api", "repos/sickn33/antigravity-awesome-skills/topics", "--method"])
|
|
self.assertIn("PUT", topics_args)
|
|
self.assertIn("names[]=claude-code", topics_args)
|
|
self.assertIn("names[]=skill-library", topics_args)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|