Run Lighthouse against static frontends
pauljd/davidson-ci: Davidson CI / quality (push) Successful in 13s
pauljd/davidson-ci: Davidson CI / ai-review (push) Successful in 59s

This commit is contained in:
2026-09-12 16:31:06 +01:00
parent 5f8d50fb70
commit d8713ffb4c
+113 -5
View File
@@ -6,15 +6,123 @@ echo "================================"
echo " Davidson CI - Lighthouse"
echo "================================"
set_status() {
echo "DAVIDSON_LIGHTHOUSE_STATUS=$1" >> "${GITHUB_ENV:-/dev/null}"
}
cleanup() {
if [ -n "${SERVER_PID:-}" ]; then
echo "Stopping frontend server..."
kill "$SERVER_PID" 2>/dev/null || true
fi
}
trap cleanup EXIT
# Skip repositories that are not frontend-capable.
if [ "${DAVIDSON_LIGHTHOUSE_ELIGIBLE:-false}" != "true" ]; then
echo "No supported frontend detected."
echo "Lighthouse skipped."
echo "DAVIDSON_LIGHTHOUSE_STATUS=SKIP" >> "${GITHUB_ENV:-/dev/null}"
set_status "SKIP"
exit 0
fi
echo "Frontend detected: ${DAVIDSON_FRONTEND_TYPE:-unknown}"
echo "Lighthouse eligible."
FRONTEND_TYPE="${DAVIDSON_FRONTEND_TYPE:-unknown}"
echo "DAVIDSON_LIGHTHOUSE_STATUS=PASS" >> "${GITHUB_ENV:-/dev/null}"
echo "Frontend detected: $FRONTEND_TYPE"
# For v1, only run actual Lighthouse against static sites.
if [ "$FRONTEND_TYPE" != "static" ]; then
echo "Frontend type '$FRONTEND_TYPE' is not supported by the Lighthouse runner yet."
echo "Lighthouse skipped."
set_status "SKIP"
exit 0
fi
# Check required tools.
if ! command -v php >/dev/null 2>&1; then
echo "ERROR: PHP CLI is not installed on the Davidson CI runner."
set_status "FAIL"
exit 1
fi
if ! command -v lighthouse >/dev/null 2>&1; then
echo "ERROR: Lighthouse CLI is not installed on the Davidson CI runner."
set_status "FAIL"
exit 1
fi
if ! command -v curl >/dev/null 2>&1; then
echo "ERROR: curl is not installed on the Davidson CI runner."
set_status "FAIL"
exit 1
fi
REPORT_DIR=".davidson-reports"
RAW_REPORT="$REPORT_DIR/lighthouse-report.json"
mkdir -p "$REPORT_DIR"
HOST="127.0.0.1"
PORT="8080"
URL="http://$HOST:$PORT/"
echo "Starting static frontend..."
php -S "$HOST:$PORT" -t . > /tmp/davidson-lighthouse-server.log 2>&1 &
SERVER_PID=$!
echo "Waiting for frontend..."
READY=false
for attempt in {1..20}; do
if curl --fail --silent --output /dev/null "$URL"; then
READY=true
break
fi
sleep 1
done
if [ "$READY" != "true" ]; then
echo "ERROR: Frontend failed to start."
echo
echo "Server log:"
cat /tmp/davidson-lighthouse-server.log || true
set_status "FAIL"
exit 1
fi
echo "Frontend ready: $URL"
echo "Running Lighthouse..."
set +e
lighthouse "$URL" \
--output=json \
--output-path="$RAW_REPORT" \
--chrome-flags="--headless --no-sandbox --disable-gpu"
LIGHTHOUSE_EXIT=$?
set -e
if [ "$LIGHTHOUSE_EXIT" -ne 0 ]; then
echo "ERROR: Lighthouse failed with exit code $LIGHTHOUSE_EXIT."
set_status "FAIL"
exit "$LIGHTHOUSE_EXIT"
fi
if [ ! -s "$RAW_REPORT" ]; then
echo "ERROR: Lighthouse did not create a valid report."
set_status "FAIL"
exit 1
fi
echo
echo "Lighthouse completed successfully."
echo "Raw report: $RAW_REPORT"
set_status "PASS"