Reviewer 역할 검증 보고서 smoke (role-reviewer-live-v2-001)

This commit is contained in:
forge-bot 2026-07-14 08:04:13 +00:00
parent 72a2b44640
commit 9e869fba2a

163
scripts/smoke-test.sh Normal file
View file

@ -0,0 +1,163 @@
#!/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))