AI Development Patterns Validation #67
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: AI Development Patterns Validation | |
| on: | |
| push: | |
| branches: [ main ] | |
| pull_request: | |
| branches: [ main ] | |
| schedule: | |
| # Run weekly to catch external link issues | |
| - cron: '0 6 * * 1' | |
| jobs: | |
| pattern-compliance: | |
| runs-on: ubuntu-latest | |
| name: Pattern Specification Compliance | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| python3 -m pip install --upgrade pip | |
| python3 -m pip install -r tests/requirements.txt | |
| - name: Run pattern compliance tests | |
| run: | | |
| cd tests | |
| python3 -m pytest test_pattern_compliance.py -v --tb=short | |
| - name: Upload compliance test results | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: pattern-compliance-results | |
| path: tests/test-results/ | |
| readme-accuracy: | |
| runs-on: ubuntu-latest | |
| name: README Accuracy & Consistency | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| python3 -m pip install --upgrade pip | |
| python3 -m pip install -r tests/requirements.txt | |
| - name: Update pattern count badge | |
| run: | | |
| python3 scripts/update-pattern-count.py | |
| - name: Check for pattern count changes | |
| run: | | |
| if git diff --quiet README.md index.html; then | |
| echo "✓ Pattern count badges are up to date" | |
| else | |
| echo "⚠️ Pattern count badges were updated" | |
| git diff README.md index.html | |
| # Fail the job if pattern count is wrong to remind developers to commit the change | |
| echo "::error::Pattern count badges were out of date. Please run 'python3 scripts/update-pattern-count.py' and commit the changes." | |
| exit 1 | |
| fi | |
| - name: Run README accuracy tests | |
| run: | | |
| cd tests | |
| python3 -m pytest test_readme_accuracy.py -v --tb=short | |
| - name: Upload accuracy test results | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: readme-accuracy-results | |
| path: tests/test-results/ | |
| link-validation: | |
| runs-on: ubuntu-latest | |
| name: Hyperlink Integrity | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| python3 -m pip install --upgrade pip | |
| python3 -m pip install -r tests/requirements.txt | |
| - name: Run link validation tests (fast) | |
| run: | | |
| cd tests | |
| python3 -m pytest test_links.py -v --tb=short -m "not slow" | |
| - name: Run external link tests (slow) | |
| run: | | |
| cd tests | |
| python3 -m pytest test_links.py -v --tb=short -m "slow" | |
| continue-on-error: true # External links may be temporarily unavailable | |
| - name: Upload link validation results | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: link-validation-results | |
| path: tests/test-results/ | |
| example-validation: | |
| runs-on: ubuntu-latest | |
| name: Example Code Validation | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install bash for script validation | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y bash | |
| - name: Install dependencies | |
| run: | | |
| python3 -m pip install --upgrade pip | |
| python3 -m pip install -r tests/requirements.txt | |
| - name: Run example validation tests | |
| run: | | |
| cd tests | |
| python3 -m pytest test_examples.py -v --tb=short | |
| - name: Upload example validation results | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: example-validation-results | |
| path: tests/test-results/ | |
| dependency-validation: | |
| runs-on: ubuntu-latest | |
| name: Pattern Dependencies | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| python3 -m pip install --upgrade pip | |
| python3 -m pip install -r tests/requirements.txt | |
| - name: Run dependency validation tests | |
| run: | | |
| cd tests | |
| python3 -m pytest test_dependencies.py -v --tb=short | |
| - name: Upload dependency validation results | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: dependency-validation-results | |
| path: tests/test-results/ | |
| diagram-validation: | |
| runs-on: ubuntu-latest | |
| name: Diagram Accuracy | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| python3 -m pip install --upgrade pip | |
| python3 -m pip install -r tests/requirements.txt | |
| - name: Run diagram validation tests | |
| run: | | |
| cd tests | |
| python3 -m pytest test_diagram.py -v --tb=short | |
| - name: Upload diagram validation results | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: diagram-validation-results | |
| path: tests/test-results/ | |
| yaml-readme-sync: | |
| runs-on: ubuntu-latest | |
| name: YAML-README Sync | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| python3 -m pip install --upgrade pip | |
| python3 -m pip install -r tests/requirements.txt | |
| - name: Run YAML-README sync tests | |
| run: | | |
| cd tests | |
| python3 -m pytest test_yaml_readme_sync.py -v --tb=short | |
| - name: Upload sync test results | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: yaml-readme-sync-results | |
| path: tests/test-results/ | |
| comprehensive-validation: | |
| runs-on: ubuntu-latest | |
| name: Full Test Suite | |
| needs: [pattern-compliance, readme-accuracy, link-validation, example-validation, dependency-validation, diagram-validation, yaml-readme-sync] | |
| if: always() | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install bash for script validation | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y bash | |
| - name: Install dependencies | |
| run: | | |
| python3 -m pip install --upgrade pip | |
| python3 -m pip install -r tests/requirements.txt | |
| - name: Run complete test suite | |
| id: tests | |
| continue-on-error: true | |
| run: | | |
| cd tests | |
| python3 -m pytest -v --tb=short \ | |
| --html=report.html --self-contained-html \ | |
| --cov=utils --cov-report=html \ | |
| --json-report --json-report-file=.report.json | |
| - name: Generate Claude Code fix prompt | |
| if: steps.tests.outcome == 'failure' | |
| run: | | |
| echo "## Claude Code Fix Instructions" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "Paste the prompt below into Claude Code to fix these failures:" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo '````' >> $GITHUB_STEP_SUMMARY | |
| python3 scripts/generate-audit-prompt.py tests/.report.json >> $GITHUB_STEP_SUMMARY 2>/dev/null || true | |
| echo '````' >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "Or run locally: \`/xaudit\`" >> $GITHUB_STEP_SUMMARY | |
| - name: Fail if tests failed | |
| if: steps.tests.outcome == 'failure' | |
| run: exit 1 | |
| - name: Upload comprehensive test report | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: comprehensive-test-report | |
| path: | | |
| tests/report.html | |
| tests/htmlcov/ | |
| tests/test-results/ | |
| tests/.report.json | |
| quality-gates: | |
| runs-on: ubuntu-latest | |
| name: Quality Gate Enforcement | |
| needs: [comprehensive-validation] | |
| if: github.event_name == 'pull_request' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| python3 -m pip install --upgrade pip | |
| python3 -m pip install -r tests/requirements.txt | |
| - name: Run critical tests only (quality gates) | |
| run: | | |
| cd tests | |
| # Run only critical tests that should block merges | |
| python3 -m pytest test_pattern_compliance.py::TestPatternSpecCompliance::test_all_expected_patterns_exist -v | |
| python3 -m pytest test_pattern_compliance.py::TestPatternSpecCompliance::test_pattern_header_structure -v | |
| python3 -m pytest test_readme_accuracy.py::TestReadmeAccuracy::test_pattern_reference_table_matches_implementations -v | |
| python3 -m pytest test_links.py::TestHyperlinkIntegrity::test_internal_anchor_links_valid -v | |
| python3 -m pytest test_dependencies.py::TestPatternDependencies::test_no_circular_dependencies -v | |
| - name: Check critical test results | |
| run: | | |
| echo "Quality gates passed - PR can be merged" | |
| # Notification job for failed builds | |
| notify-failure: | |
| runs-on: ubuntu-latest | |
| name: Notify on Failure | |
| permissions: | |
| issues: write | |
| needs: [pattern-compliance, readme-accuracy, link-validation, example-validation, dependency-validation, diagram-validation, yaml-readme-sync] | |
| if: failure() && github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| steps: | |
| - name: Create Issue on Failure (skip if duplicate) | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { data: existing } = await github.rest.issues.listForRepo({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| labels: 'pattern-validation', | |
| state: 'open' | |
| }); | |
| if (existing.length > 0) { | |
| const issue = existing[0]; | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: issue.number, | |
| body: `Still failing on commit ${context.sha}.\n\n[View failed run](${context.payload.repository.html_url}/actions/runs/${context.runId})` | |
| }); | |
| core.info(`Skipped duplicate — added comment to #${issue.number}`); | |
| return; | |
| } | |
| const title = `Pattern Validation Failed - ${new Date().toISOString().split('T')[0]}`; | |
| const body = `## Pattern Validation Failure | |
| The automated pattern validation failed on the main branch. | |
| **Build**: ${context.runId} | |
| **Commit**: ${context.sha} | |
| **Workflow**: ${context.workflow} | |
| Please review the failed checks and fix any issues with: | |
| - Pattern specification compliance | |
| - README accuracy and consistency | |
| - Hyperlink integrity | |
| - Example code validation | |
| - Pattern dependencies | |
| - Diagram accuracy | |
| [View failed workflow run](${context.payload.repository.html_url}/actions/runs/${context.runId}) | |
| `; | |
| github.rest.issues.create({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| title: title, | |
| body: body, | |
| labels: ['bug', 'automation', 'pattern-validation'] | |
| }); | |
| # Auto-close validation issues when all checks pass | |
| close-resolved-issues: | |
| runs-on: ubuntu-latest | |
| name: Close Resolved Issues | |
| permissions: | |
| issues: write | |
| needs: [pattern-compliance, readme-accuracy, link-validation, example-validation, dependency-validation, diagram-validation, yaml-readme-sync] | |
| if: success() && github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| steps: | |
| - name: Close pattern-validation issues | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { data: issues } = await github.rest.issues.listForRepo({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| labels: 'pattern-validation', | |
| state: 'open' | |
| }); | |
| for (const issue of issues) { | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: issue.number, | |
| body: `All pattern validation checks passed on commit ${context.sha}. Closing automatically.\n\n[View passing run](${context.payload.repository.html_url}/actions/runs/${context.runId})` | |
| }); | |
| await github.rest.issues.update({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: issue.number, | |
| state: 'closed', | |
| state_reason: 'completed' | |
| }); | |
| } |