社区交流群改为2群 #16
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| jobs: | |
| validate: | |
| name: Validate agent files | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Count agents | |
| run: | | |
| TOTAL=$(find . -path './.github' -prune -o -path './scripts' -prune -o -path './examples' -prune -o -path './integrations' -prune -o -name '*.md' -print | grep -c '/') | |
| echo "Total agent files: $TOTAL" | |
| - name: Check frontmatter format | |
| run: | | |
| ERRORS=0 | |
| while IFS= read -r file; do | |
| # Skip non-agent files | |
| case "$file" in | |
| ./README*|./CONTRIBUTING*|./UPSTREAM*|./AGENT-LIST*|./CATALOG*|./CODE_OF_CONDUCT*|./.github/*|./scripts/*|./examples/*|./integrations/*|./docs/*|./strategy/*) continue ;; | |
| esac | |
| # Check frontmatter exists | |
| if ! head -1 "$file" | grep -q '^---'; then | |
| echo "::error file=$file::Missing frontmatter (no opening ---)" | |
| ERRORS=$((ERRORS + 1)) | |
| continue | |
| fi | |
| # Check required fields | |
| FRONTMATTER=$(sed -n '/^---$/,/^---$/p' "$file" | head -20) | |
| for field in name description; do | |
| if ! echo "$FRONTMATTER" | grep -q "^${field}:"; then | |
| echo "::warning file=$file::Missing recommended field: $field" | |
| fi | |
| done | |
| done < <(find . -path './.github' -prune -o -path './scripts' -prune -o -path './examples' -prune -o -path './integrations' -prune -o -path './node_modules' -prune -o -name '*.md' -print | grep '/') | |
| if [ $ERRORS -gt 0 ]; then | |
| echo "::error::$ERRORS file(s) have frontmatter errors" | |
| exit 1 | |
| fi | |
| echo "All agent files validated successfully" | |
| - name: Check for broken internal links | |
| run: | | |
| ERRORS=0 | |
| # Check README references to agent files | |
| while read -r link; do | |
| if [ ! -f "$link" ]; then | |
| echo "::error file=README.md::Broken link: $link" | |
| ERRORS=$((ERRORS + 1)) | |
| fi | |
| done < <(grep -oP '\[.*?\]\(((?!http)[^)]+\.md)\)' README.md | grep -oP '\(([^)]+)\)' | tr -d '()') | |
| exit $ERRORS |