173 lines
5.1 KiB
YAML
173 lines
5.1 KiB
YAML
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
|
|
|
|
AI_STATUS=$(grep -v '^[[:space:]]*$' /tmp/davidson-ai-review.txt | tail -n 1)
|
|
|
|
case "$AI_STATUS" in
|
|
"DAVIDSON_AI_STATUS=PASS")
|
|
echo "✅ **PASS**" >> "$GITEA_STEP_SUMMARY"
|
|
echo >> "$GITEA_STEP_SUMMARY"
|
|
echo "No significant issues were identified by the AI reviewer." \
|
|
>> "$GITEA_STEP_SUMMARY"
|
|
;;
|
|
|
|
"DAVIDSON_AI_STATUS=FINDINGS")
|
|
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
|
|
;;
|
|
|
|
*)
|
|
echo "❌ **Invalid AI reviewer status**" >> "$GITEA_STEP_SUMMARY"
|
|
echo >> "$GITEA_STEP_SUMMARY"
|
|
echo "Expected final status line:" >> "$GITEA_STEP_SUMMARY"
|
|
echo "\`DAVIDSON_AI_STATUS=PASS\` or \`DAVIDSON_AI_STATUS=FINDINGS\`" \
|
|
>> "$GITEA_STEP_SUMMARY"
|
|
|
|
echo
|
|
echo "Invalid AI status: $AI_STATUS"
|
|
cat /tmp/davidson-ai-review.txt
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo
|
|
echo "=== Davidson AI Review ==="
|
|
cat /tmp/davidson-ai-review.txt
|