zero-check-pipeline/validate/run-all.sh

109 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TARGET="${1:-.}"
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
RESULTS_FILE="$SCRIPT_DIR/results.json"
SUMMARY_FILE="$SCRIPT_DIR/SUMMARY.md"
checks=("secrets" "lint" "sast" "deps" "tests")
declare -A results
failed=0
skipped=0
passed=0
echo "╔══════════════════════════════════════╗"
echo "║ Zero-Check Validation Pipeline ║"
echo "╚══════════════════════════════════════╝"
echo ""
echo "Target: $TARGET"
echo "Time: $TIMESTAMP"
echo ""
for check in "${checks[@]}"; do
script="$SCRIPT_DIR/${check}.sh"
if [ ! -x "$script" ]; then
printf "${RED}${NC} %s — script not found or not executable\n" "$check"
results[$check]="error"
failed=$((failed + 1))
continue
fi
if "$script" "$TARGET"; then
results[$check]="passed"
passed=$((passed + 1))
else
exit_code=$?
if [ "$exit_code" -eq 2 ]; then
results[$check]="skipped"
skipped=$((skipped + 1))
else
results[$check]="failed"
failed=$((failed + 1))
fi
fi
echo ""
done
echo "════════════════════════════════════════"
if [ "$failed" -gt 0 ]; then
printf "${RED}RESULT: %d passed, %d failed, %d skipped${NC}\n" "$passed" "$failed" "$skipped"
overall="failed"
else
printf "${GREEN}RESULT: %d passed, %d failed, %d skipped${NC}\n" "$passed" "$failed" "$skipped"
overall="passed"
fi
cat > "$RESULTS_FILE" <<EOF
{
"timestamp": "$TIMESTAMP",
"target": "$TARGET",
"overall": "$overall",
"passed": $passed,
"failed": $failed,
"skipped": $skipped,
"checks": {
"secrets": "${results[secrets]}",
"lint": "${results[lint]}",
"sast": "${results[sast]}",
"deps": "${results[deps]}",
"tests": "${results[tests]}"
}
}
EOF
cat > "$SUMMARY_FILE" <<EOF
# Validation Summary
**Date:** $TIMESTAMP
**Target:** $TARGET
**Result:** $overall
| Check | Status |
|---------|--------|
| Secrets | ${results[secrets]} |
| Lint | ${results[lint]} |
| SAST | ${results[sast]} |
| Deps | ${results[deps]} |
| Tests | ${results[tests]} |
**Totals:** $passed passed, $failed failed, $skipped skipped
EOF
echo ""
echo "Artifacts written:"
echo " $RESULTS_FILE"
echo " $SUMMARY_FILE"
if [ "$failed" -gt 0 ]; then
exit 1
else
exit 0
fi