Files
pauljd 3e0b651607
pauljd/davidson-ci: Davidson CI / quality (push) Successful in 14s
Add detailed security status reporting
2026-09-08 17:28:06 +01:00

132 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
set -u
echo "============================"
echo " Davidson CI - Security"
echo "============================"
FAIL=0
set_env() {
echo "$1=$2" >> "${GITHUB_ENV:-/dev/null}"
}
# Default states
set_env "DAVIDSON_COMPOSER_AUDIT" "SKIP"
set_env "DAVIDSON_NPM_AUDIT" "SKIP"
set_env "DAVIDSON_SEMGREP" "SKIP"
set_env "DAVIDSON_TRIVY_VULN" "SKIP"
set_env "DAVIDSON_TRIVY_SECRET" "SKIP"
# -------------------------
# Composer audit
# -------------------------
echo
echo "→ Composer security audit"
if [ -f composer.lock ]; then
if composer audit; then
set_env "DAVIDSON_COMPOSER_AUDIT" "PASS"
else
set_env "DAVIDSON_COMPOSER_AUDIT" "FAIL"
FAIL=1
fi
else
echo "No composer.lock - skipping"
fi
# -------------------------
# npm audit
# -------------------------
echo
echo "→ npm security audit"
if [ -f package-lock.json ]; then
if npm audit --audit-level=high; then
set_env "DAVIDSON_NPM_AUDIT" "PASS"
else
set_env "DAVIDSON_NPM_AUDIT" "FAIL"
FAIL=1
fi
else
echo "No package-lock.json - skipping"
fi
# -------------------------
# Semgrep
# -------------------------
echo
echo "→ Semgrep"
if semgrep scan \
--config=p/security-audit \
--error \
--exclude=node_modules \
--exclude=vendor \
.
then
set_env "DAVIDSON_SEMGREP" "PASS"
else
set_env "DAVIDSON_SEMGREP" "FAIL"
FAIL=1
fi
# -------------------------
# Trivy vulnerabilities
# -------------------------
echo
echo "→ Trivy vulnerabilities"
if trivy fs \
--scanners vuln \
--severity HIGH,CRITICAL \
--exit-code 1 \
--no-progress \
.
then
set_env "DAVIDSON_TRIVY_VULN" "PASS"
else
set_env "DAVIDSON_TRIVY_VULN" "FAIL"
FAIL=1
fi
# -------------------------
# Trivy secrets
# -------------------------
echo
echo "→ Trivy secrets"
if trivy fs \
--scanners secret \
--exit-code 1 \
--no-progress \
.
then
set_env "DAVIDSON_TRIVY_SECRET" "PASS"
else
set_env "DAVIDSON_TRIVY_SECRET" "FAIL"
FAIL=1
fi
# -------------------------
# Overall result
# -------------------------
if [ "$FAIL" -eq 0 ]; then
set_env "DAVIDSON_SECURITY_STATUS" "PASS"
echo
echo "Security module completed successfully"
exit 0
else
set_env "DAVIDSON_SECURITY_STATUS" "FAIL"
echo
echo "Security module found issues"
exit 1
fi