name: Skills Registry CI permissions: contents: write on: push: branches: ["main", "feat/*"] pull_request: branches: ["main"] workflow_dispatch: jobs: validate-and-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.10" - name: Install dependencies run: | pip install pyyaml - name: Set up Node uses: actions/setup-node@v4 with: node-version: "lts/*" - name: Install npm dependencies run: npm ci - name: Verify directory structure run: | test -d skills/ test -d apps/web-app/ test -d tools/scripts/ test -d tools/lib/ test -f README.md test -f CONTRIBUTING.md - name: 🔍 Validate Skills (Soft Mode) run: | npm run validate - name: 🔗 Validate References run: | npm run validate:references - name: 🏗️ Generate Index run: | npm run index - name: 📝 Update README run: | npm run readme - name: Audit npm dependencies run: npm audit --audit-level=high continue-on-error: true - name: Run tests env: ENABLE_NETWORK_TESTS: "1" run: npm run test - name: 📦 Build catalog run: npm run catalog - name: Set up GitHub credentials (for auto-sync) if: github.event_name == 'push' && github.ref == 'refs/heads/main' run: | git config user.name 'github-actions[bot]' git config user.email 'github-actions[bot]@users.noreply.github.com' git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git - name: Auto-commit registry drift (main only) if: github.event_name == 'push' && github.ref == 'refs/heads/main' run: | # If no changes, exit successfully git diff --quiet && exit 0 # Pull with rebase to integrate remote changes git pull origin main --rebase || true git add README.md skills_index.json data/skills_index.json data/catalog.json data/bundles.json data/aliases.json CATALOG.md || true # If nothing to commit, exit successfully git diff --cached --quiet && exit 0 git commit -m "chore: sync generated registry files [ci skip]" git push origin HEAD - name: 🚨 Check for Uncommitted Drift run: | if ! git diff --quiet; then echo "❌ Detected uncommitted changes produced by registry/readme/catalog scripts." echo echo "To fix locally, run the FULL Validation Chain, then commit and push:" echo " npm run chain" echo " npm run catalog" echo " git add README.md skills_index.json data/skills_index.json data/catalog.json data/bundles.json data/aliases.json CATALOG.md" echo " git commit -m \"chore: sync generated registry files\"" echo " git push" exit 1 fi