validate-registry.yml 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. name: Validate Registry on PR
  2. on:
  3. pull_request:
  4. branches:
  5. - main
  6. - dev
  7. paths:
  8. - '.opencode/**'
  9. - 'registry.json'
  10. - 'scripts/validate-registry.sh'
  11. - 'scripts/auto-detect-components.sh'
  12. workflow_dispatch:
  13. permissions:
  14. contents: write
  15. pull-requests: write
  16. jobs:
  17. validate-and-update:
  18. runs-on: ubuntu-latest
  19. steps:
  20. - name: Checkout PR branch
  21. uses: actions/checkout@v4
  22. with:
  23. ref: ${{ github.head_ref }}
  24. fetch-depth: 0
  25. token: ${{ secrets.GITHUB_TOKEN }}
  26. - name: Install dependencies
  27. run: |
  28. sudo apt-get update
  29. sudo apt-get install -y jq
  30. - name: Make scripts executable
  31. run: |
  32. chmod +x scripts/validate-registry.sh
  33. chmod +x scripts/auto-detect-components.sh
  34. chmod +x scripts/register-component.sh
  35. - name: Auto-detect new components
  36. id: auto_detect
  37. run: |
  38. echo "## 🔍 Auto-Detection Results" >> $GITHUB_STEP_SUMMARY
  39. echo "" >> $GITHUB_STEP_SUMMARY
  40. # Run auto-detect in dry-run mode first to see what would be added
  41. if ./scripts/auto-detect-components.sh --dry-run > /tmp/detect-output.txt 2>&1; then
  42. cat /tmp/detect-output.txt >> $GITHUB_STEP_SUMMARY
  43. # Check if new components were found
  44. if grep -q "Found.*new component" /tmp/detect-output.txt; then
  45. echo "new_components=true" >> $GITHUB_OUTPUT
  46. echo "" >> $GITHUB_STEP_SUMMARY
  47. echo "⚠️ New components detected - will auto-add to registry" >> $GITHUB_STEP_SUMMARY
  48. else
  49. echo "new_components=false" >> $GITHUB_OUTPUT
  50. echo "✅ No new components found" >> $GITHUB_STEP_SUMMARY
  51. fi
  52. else
  53. echo "new_components=false" >> $GITHUB_OUTPUT
  54. echo "❌ Auto-detection failed" >> $GITHUB_STEP_SUMMARY
  55. fi
  56. - name: Add new components to registry
  57. if: steps.auto_detect.outputs.new_components == 'true'
  58. run: |
  59. echo "## 📝 Adding New Components" >> $GITHUB_STEP_SUMMARY
  60. echo "" >> $GITHUB_STEP_SUMMARY
  61. ./scripts/auto-detect-components.sh --auto-add | tee -a $GITHUB_STEP_SUMMARY
  62. - name: Validate registry
  63. id: validate
  64. run: |
  65. echo "## ✅ Registry Validation" >> $GITHUB_STEP_SUMMARY
  66. echo "" >> $GITHUB_STEP_SUMMARY
  67. if ./scripts/validate-registry.sh -v > /tmp/validation-output.txt 2>&1; then
  68. echo "validation=passed" >> $GITHUB_OUTPUT
  69. echo "✅ All registry paths are valid!" >> $GITHUB_STEP_SUMMARY
  70. echo "" >> $GITHUB_STEP_SUMMARY
  71. echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
  72. tail -20 /tmp/validation-output.txt >> $GITHUB_STEP_SUMMARY
  73. echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
  74. else
  75. echo "validation=failed" >> $GITHUB_OUTPUT
  76. echo "❌ Registry validation failed!" >> $GITHUB_STEP_SUMMARY
  77. echo "" >> $GITHUB_STEP_SUMMARY
  78. echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
  79. cat /tmp/validation-output.txt >> $GITHUB_STEP_SUMMARY
  80. echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
  81. exit 1
  82. fi
  83. - name: Commit registry updates
  84. if: steps.auto_detect.outputs.new_components == 'true'
  85. run: |
  86. git config --local user.email "github-actions[bot]@users.noreply.github.com"
  87. git config --local user.name "github-actions[bot]"
  88. if ! git diff --quiet registry.json; then
  89. git add registry.json
  90. git commit -m "chore: auto-update registry with new components [skip ci]"
  91. git push origin ${{ github.head_ref }}
  92. echo "## 🚀 Registry Updated" >> $GITHUB_STEP_SUMMARY
  93. echo "" >> $GITHUB_STEP_SUMMARY
  94. echo "Registry has been automatically updated with new components." >> $GITHUB_STEP_SUMMARY
  95. echo "Changes have been pushed to this PR branch." >> $GITHUB_STEP_SUMMARY
  96. fi
  97. - name: Post validation summary
  98. if: always()
  99. run: |
  100. echo "" >> $GITHUB_STEP_SUMMARY
  101. echo "---" >> $GITHUB_STEP_SUMMARY
  102. echo "" >> $GITHUB_STEP_SUMMARY
  103. if [ "${{ steps.validate.outputs.validation }}" = "passed" ]; then
  104. echo "### ✅ Validation Passed" >> $GITHUB_STEP_SUMMARY
  105. echo "" >> $GITHUB_STEP_SUMMARY
  106. echo "All registry paths are valid and point to existing files." >> $GITHUB_STEP_SUMMARY
  107. echo "This PR is ready for review!" >> $GITHUB_STEP_SUMMARY
  108. else
  109. echo "### ❌ Validation Failed" >> $GITHUB_STEP_SUMMARY
  110. echo "" >> $GITHUB_STEP_SUMMARY
  111. echo "Registry validation failed. Please fix the issues above." >> $GITHUB_STEP_SUMMARY
  112. echo "" >> $GITHUB_STEP_SUMMARY
  113. echo "**Common fixes:**" >> $GITHUB_STEP_SUMMARY
  114. echo "- Update paths in registry.json to match actual file locations" >> $GITHUB_STEP_SUMMARY
  115. echo "- Remove entries for deleted files" >> $GITHUB_STEP_SUMMARY
  116. echo "- Run \`./scripts/validate-registry.sh --fix\` locally for suggestions" >> $GITHUB_STEP_SUMMARY
  117. fi
  118. - name: Fail if validation failed
  119. if: steps.validate.outputs.validation == 'failed'
  120. run: |
  121. echo "❌ Registry validation failed - blocking PR merge"
  122. exit 1