109 lines
2.6 KiB
Bash
Executable File
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 |