103 lines
2.6 KiB
Bash
Executable File
103 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ci-local.sh
|
|
# Local equivalent of CI checks for self-hosted runner validation.
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
|
|
RUN_CONTRACTS=0
|
|
RUN_BACKEND=0
|
|
RUN_ANDROID=0
|
|
RUN_IOS=0
|
|
SKIP_INSTALL=0
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
Usage: ./scripts/ci-local.sh [options]
|
|
|
|
Options:
|
|
--contracts Run process/SDD/TDD gate scripts.
|
|
--backend Run lint + shared/android unit tests.
|
|
--android Run Android emulator UI tests.
|
|
--ios Run iOS simulator UI tests.
|
|
--all Run contracts + backend + android + ios.
|
|
--skip-install Skip setup bootstrap check.
|
|
--help Show this help.
|
|
|
|
If no test scope flags are provided, defaults to: --contracts --backend
|
|
EOF
|
|
}
|
|
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--contracts) RUN_CONTRACTS=1 ;;
|
|
--backend) RUN_BACKEND=1 ;;
|
|
--android) RUN_ANDROID=1 ;;
|
|
--ios) RUN_IOS=1 ;;
|
|
--all)
|
|
RUN_CONTRACTS=1
|
|
RUN_BACKEND=1
|
|
RUN_ANDROID=1
|
|
RUN_IOS=1
|
|
;;
|
|
--skip-install) SKIP_INSTALL=1 ;;
|
|
--help|-h) usage; exit 0 ;;
|
|
*)
|
|
echo "[ci-local] Unknown option: $arg"
|
|
usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ $RUN_CONTRACTS -eq 0 && $RUN_BACKEND -eq 0 && $RUN_ANDROID -eq 0 && $RUN_IOS -eq 0 ]]; then
|
|
RUN_CONTRACTS=1
|
|
RUN_BACKEND=1
|
|
fi
|
|
|
|
if [[ $SKIP_INSTALL -eq 0 ]]; then
|
|
"$SCRIPT_DIR/setup-dev-environment.sh" --verify
|
|
fi
|
|
|
|
TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
|
|
LOG_DIR="$PROJECT_ROOT/build/local-ci"
|
|
LOG_FILE="$LOG_DIR/local-ci-$TIMESTAMP.log"
|
|
mkdir -p "$LOG_DIR"
|
|
|
|
run_step() {
|
|
local step_name="$1"
|
|
shift
|
|
echo ""
|
|
echo "================================================"
|
|
echo "[ci-local] $step_name"
|
|
echo "================================================"
|
|
"$@" 2>&1 | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
echo "[ci-local] Writing log to $LOG_FILE"
|
|
echo "[ci-local] Starting local CI run at $(date -u '+%Y-%m-%dT%H:%M:%SZ')" | tee -a "$LOG_FILE"
|
|
|
|
if [[ $RUN_CONTRACTS -eq 1 ]]; then
|
|
run_step "check-process" "$SCRIPT_DIR/check-process.sh" origin/main
|
|
run_step "validate-sdd" "$SCRIPT_DIR/validate-sdd.sh" origin/main
|
|
run_step "validate-tdd" env FORCE_AUDIT_GATES=1 "$SCRIPT_DIR/validate-tdd.sh" origin/main
|
|
fi
|
|
|
|
if [[ $RUN_BACKEND -eq 1 ]]; then
|
|
run_step "ktlint+unit-tests" ./gradlew ktlintCheck shared:jvmTest androidApp:testDebugUnitTest
|
|
fi
|
|
|
|
if [[ $RUN_ANDROID -eq 1 ]]; then
|
|
run_step "android-ui-tests" "$SCRIPT_DIR/run-emulator-tests.sh" android
|
|
fi
|
|
|
|
if [[ $RUN_IOS -eq 1 ]]; then
|
|
run_step "ios-ui-tests" "$SCRIPT_DIR/run-emulator-tests.sh" ios
|
|
fi
|
|
|
|
echo ""
|
|
echo "[ci-local] PASS"
|
|
echo "[ci-local] Log: $LOG_FILE"
|