Files
davidson-ci/.gitea/scoped_workflows/davidson-ci.yml
T
pauljd 8183d6fd5d
pauljd/davidson-ci: Davidson CI / quality (push) Successful in 15s
pauljd/davidson-ci: Davidson CI / ai-review (push) Successful in 49s
Exclude injected CI source from AI review
2026-09-08 20:30:49 +01:00

177 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: v1.0.0
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: v1.0.0
path: .davidson-ci
- name: Prepare OpenCode config
run: |
mkdir -p .opencode
cp -r .davidson-ci/.opencode/* .opencode/
- name: Remove injected CI source
run: |
rm -rf .davidson-ci
- 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