163 lines
4.5 KiB
Bash
163 lines
4.5 KiB
Bash
#!/bin/bash
|
|
# Smoke Test Script for Runtime Role Matrix
|
|
# Supports both stdout and JSON output modes
|
|
|
|
set -e
|
|
|
|
OUTPUT_MODE="stdout"
|
|
OUTPUT_FILE=""
|
|
CHECKED_BY="reviewer"
|
|
|
|
usage() {
|
|
echo "Usage: $0 [OPTIONS]"
|
|
echo "Options:"
|
|
echo " --json Output results in JSON format"
|
|
echo " --output FILE Write output to file (default: stdout)"
|
|
echo " --checked-by Name of reviewer (default: reviewer)"
|
|
echo " -h, --help Show this help message"
|
|
echo ""
|
|
echo "Exit codes:"
|
|
echo " 0 - All checks passed"
|
|
echo " 1 - One or more checks failed"
|
|
echo " 2 - Invalid arguments"
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--json)
|
|
OUTPUT_MODE="json"
|
|
shift
|
|
;;
|
|
--output)
|
|
OUTPUT_FILE="$2"
|
|
shift 2
|
|
;;
|
|
--checked-by)
|
|
CHECKED_BY="$2"
|
|
shift 2
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1" >&2
|
|
usage
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
PROJECT_ROOT=$(cd "$(dirname "$0")/.." && pwd)
|
|
CHECKED_AT=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
|
|
# Initialize results
|
|
declare -a CHECK_ITEMS
|
|
PASS_COUNT=0
|
|
FAIL_COUNT=0
|
|
|
|
run_check() {
|
|
local name="$1"
|
|
local command="$2"
|
|
local result
|
|
|
|
if eval "$command" > /dev/null 2>&1; then
|
|
result="PASS"
|
|
((PASS_COUNT++))
|
|
else
|
|
result="FAIL"
|
|
((FAIL_COUNT++))
|
|
fi
|
|
|
|
CHECK_ITEMS+=("{\"name\":\"$name\",\"status\":\"$result\",\"command\":\"$command\"}")
|
|
}
|
|
|
|
# 1. Build verification
|
|
run_check "Maven Build" "cd '$PROJECT_ROOT' && mvn compile -q"
|
|
|
|
# 2. Unit tests
|
|
run_check "Unit Tests" "cd '$PROJECT_ROOT' && mvn test -q"
|
|
|
|
# 3. Code format compliance (Checkstyle)
|
|
if [ -f "$PROJECT_ROOT/pom.xml" ]; then
|
|
run_check "Code Format Compliance" "cd '$PROJECT_ROOT' && mvn checkstyle:check -q 2>/dev/null || [ ! -f target/checkstyle-result.xml ]"
|
|
else
|
|
CHECK_ITEMS+=("{\"name\":\"Code Format Compliance\",\"status\":\"SKIP\",\"reason\":\"No pom.xml found\"}")
|
|
fi
|
|
|
|
# 4. JavaDoc existence
|
|
if [ -f "$PROJECT_ROOT/pom.xml" ]; then
|
|
run_check "JavaDoc Existence" "cd '$PROJECT_ROOT' && mvn javadoc:javadoc -q 2>/dev/null || [ -d target/site/apidocs ]"
|
|
else
|
|
CHECK_ITEMS+=("{\"name\":\"JavaDoc Existence\",\"status\":\"SKIP\",\"reason\":\"No pom.xml found\"}")
|
|
fi
|
|
|
|
# 5. Package verification
|
|
run_check "Package Verification" "cd '$PROJECT_ROOT' && mvn package -DskipTests -q"
|
|
|
|
# 6. Dependency check
|
|
run_check "Dependency Check" "cd '$PROJECT_ROOT' && mvn dependency:tree -q"
|
|
|
|
# 7. SpotBugs/Static analysis (if configured)
|
|
if grep -q "spotbugs-maven-plugin" "$PROJECT_ROOT/pom.xml" 2>/dev/null; then
|
|
run_check "Static Analysis" "cd '$PROJECT_ROOT' && mvn spotbugs:check -q"
|
|
else
|
|
CHECK_ITEMS+=("{\"name\":\"Static Analysis\",\"status\":\"SKIP\",\"reason\":\"spotbugs-maven-plugin not configured\"}")
|
|
fi
|
|
|
|
# 8. Integration test (if exists)
|
|
if [ -d "$PROJECT_ROOT/src/test/java" ]; then
|
|
run_check "Integration Tests" "cd '$PROJECT_ROOT' && mvn verify -q"
|
|
else
|
|
CHECK_ITEMS+=("{\"name\":\"Integration Tests\",\"status\":\"SKIP\",\"reason\":\"No integration tests found\"}")
|
|
fi
|
|
|
|
# Output results
|
|
if [ "$OUTPUT_MODE" = "json" ]; then
|
|
TOTAL=$((PASS_COUNT + FAIL_COUNT))
|
|
JSON_OUTPUT=$(cat <<EOF
|
|
{
|
|
"checkedAt": "$CHECKED_AT",
|
|
"checkedBy": "$CHECKED_BY",
|
|
"summary": {
|
|
"total": $TOTAL,
|
|
"passed": $PASS_COUNT,
|
|
"failed": $FAIL_COUNT
|
|
},
|
|
"items": [
|
|
$(IFS=,; echo "${CHECK_ITEMS[*]}")
|
|
]
|
|
}
|
|
EOF
|
|
)
|
|
|
|
if [ -n "$OUTPUT_FILE" ]; then
|
|
echo "$JSON_OUTPUT" > "$OUTPUT_FILE"
|
|
else
|
|
echo "$JSON_OUTPUT"
|
|
fi
|
|
else
|
|
echo "=========================================="
|
|
echo " Smoke Test Results"
|
|
echo "=========================================="
|
|
echo "Checked At: $CHECKED_AT"
|
|
echo "Checked By: $CHECKED_BY"
|
|
echo "------------------------------------------"
|
|
echo "Total: $((PASS_COUNT + FAIL_COUNT)) | Passed: $PASS_COUNT | Failed: $FAIL_COUNT"
|
|
echo "------------------------------------------"
|
|
for item in "${CHECK_ITEMS[@]}"; do
|
|
name=$(echo "$item" | grep -o '"name":"[^"]*"' | cut -d'"' -f4)
|
|
status=$(echo "$item" | grep -o '"status":"[^"]*"' | cut -d'"' -f4)
|
|
if [ "$status" = "PASS" ]; then
|
|
echo " [PASS] $name"
|
|
elif [ "$status" = "FAIL" ]; then
|
|
echo " [FAIL] $name"
|
|
else
|
|
echo " [SKIP] $name"
|
|
fi
|
|
done
|
|
echo "=========================================="
|
|
fi
|
|
|
|
# Exit with appropriate code
|
|
exit $((FAIL_COUNT > 0 ? 1 : 0))
|