name: Davidson CI on: push: permissions: contents: read jobs: quality: runs-on: davidson-ci steps: - name: Checkout project uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 - name: Checkout Davidson CI uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 with: repository: pauljd/davidson-ci ref: 6a234c80f4facb1fd5d529f58c30348109e3f53a path: .davidson-ci - name: Detect project id: detect run: .davidson-ci/modules/detect.sh - name: PHP id: php if: always() run: .davidson-ci/modules/php.sh - name: JavaScript / TypeScript id: javascript if: always() run: .davidson-ci/modules/javascript.sh - name: CSS id: css if: always() run: .davidson-ci/modules/css.sh - name: Security id: security if: always() run: .davidson-ci/modules/security.sh - name: Davidson CI Report if: always() run: .davidson-ci/scripts/report.sh - name: Final CI status if: always() run: | FAILED=0 check_status() { NAME="$1" STATUS="$2" case "$STATUS" in PASS|SKIP) echo "$NAME: $STATUS" ;; FAIL) echo "$NAME: FAIL" FAILED=1 ;; *) echo "$NAME: invalid or missing status ($STATUS)" FAILED=1 ;; esac } check_status "PHP" "${DAVIDSON_PHP_STATUS:-UNKNOWN}" check_status "JavaScript / TypeScript" "${DAVIDSON_JS_STATUS:-UNKNOWN}" check_status "CSS" "${DAVIDSON_CSS_STATUS:-UNKNOWN}" check_status "Security" "${DAVIDSON_SECURITY_STATUS:-UNKNOWN}" if [ "$FAILED" -ne 0 ]; then echo "Davidson CI failed" exit 1 fi echo "Davidson CI passed" ai-review: needs: quality if: always() runs-on: davidson-ai steps: - name: Checkout project uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 - name: Checkout Davidson CI uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 with: repository: pauljd/davidson-ci ref: 6a234c80f4facb1fd5d529f58c30348109e3f53a path: .davidson-ci - name: Prepare OpenCode config run: | mkdir -p .opencode cp -r .davidson-ci/.opencode/* .opencode/ - name: Davidson AI Review env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | set +e opencode run \ --agent davidson-review \ "Perform a complete Davidson CI review of this repository. Do not modify anything." \ > /tmp/davidson-ai-review.txt 2>&1 AI_EXIT=$? echo "## 🤖 AI Review" >> "$GITEA_STEP_SUMMARY" echo >> "$GITEA_STEP_SUMMARY" if [ "$AI_EXIT" -ne 0 ]; then echo "❌ **AI reviewer failed to execute**" >> "$GITEA_STEP_SUMMARY" echo >> "$GITEA_STEP_SUMMARY" echo "Open the \`ai-review\` job log for details." >> "$GITEA_STEP_SUMMARY" cat /tmp/davidson-ai-review.txt exit "$AI_EXIT" fi if grep -q "AI REVIEW PASSED - No significant issues found." \ /tmp/davidson-ai-review.txt then echo "✅ **PASS**" >> "$GITEA_STEP_SUMMARY" echo >> "$GITEA_STEP_SUMMARY" echo "No significant issues were identified by the AI reviewer." \ >> "$GITEA_STEP_SUMMARY" else echo "⚠️ **Review findings detected**" >> "$GITEA_STEP_SUMMARY" echo >> "$GITEA_STEP_SUMMARY" echo "| Severity | Location | Issue | Recommendation |" \ >> "$GITEA_STEP_SUMMARY" echo "|---|---|---|---|" >> "$GITEA_STEP_SUMMARY" grep -E '^(CRITICAL|HIGH|MEDIUM|LOW|INFO)[[:space:]]*\|' \ /tmp/davidson-ai-review.txt \ >> "$GITEA_STEP_SUMMARY" || true fi echo echo "=== Davidson AI Review ===" cat /tmp/davidson-ai-review.txt