134 lines
4.2 KiB
YAML
134 lines
4.2 KiB
YAML
name: Skills Registry CI
|
||
|
||
permissions:
|
||
contents: write
|
||
|
||
on:
|
||
push:
|
||
branches: ["main"]
|
||
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: ℹ️ Report generated drift (PRs only)
|
||
if: github.event_name == 'pull_request'
|
||
run: |
|
||
if git diff --quiet; then
|
||
echo "No generated drift detected after validation/build."
|
||
exit 0
|
||
fi
|
||
|
||
echo "::notice::Generated registry/readme drift detected on this PR."
|
||
echo "This is informational only on pull requests because main auto-syncs generated artifacts after merge."
|
||
echo "Files changed by generators:"
|
||
git diff --name-only
|
||
{
|
||
echo "## Generated Drift"
|
||
echo
|
||
echo "This PR changes source files that regenerate shared registry artifacts."
|
||
echo "The drift is allowed on pull requests and will be auto-synced on \`main\` after merge."
|
||
echo
|
||
echo "Changed generated files:"
|
||
git diff --name-only | sed 's/^/- `/; s/$/`/'
|
||
} >> "$GITHUB_STEP_SUMMARY"
|
||
|
||
- name: 🚨 Check for Uncommitted Drift
|
||
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||
run: |
|
||
if ! git diff --quiet; then
|
||
echo "❌ Detected uncommitted changes produced by registry/readme/catalog scripts."
|
||
echo
|
||
echo "Main must be self-healing after the auto-sync step."
|
||
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
|