#!/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 < "$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))