proto-socket/agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_full_test.sh
toki a8d61bbe9f test(test-matrix): 야간 성능/안정성 full 후보 분리
변경 기반 라우팅에서 full 기간성 후보와 낮 시간 quick 후보를 분리해 성능/안정성의 20:00 이후 야간 실행 계약을 명확히 했다.
2026-06-10 10:19:30 +09:00

129 lines
3.9 KiB
Bash
Executable file

#!/usr/bin/env bash
set -uo pipefail
# ------ -------------------------- ------------ ---------- ------
# run_full_test.sh
# full functional periodic 실행 entrypoint
#
# run_test_by_change.sh --route full --dry-run 분류 결과를 확인하고,
# recommended 상태의 full functional 후보를 run_matrix.sh --all로 실행한다.
# nightly-pending 후보는 별도 기록만 하고 실행하지 않는다.
# ------ -------------------------- ------------ ---------- ------
usage() {
cat <<'USAGE'
Usage: run_full_test.sh [--dry-run] [--skip-network]
full functional periodic test runner.
분류 결과를 확인하고 실행 또는 dry-run을 출력한다.
Options:
--dry-run 분류 결과만 출력하고 실제 테스트 실행하지 않음
--skip-network 크로스테스트/웹 테스트 건너뛰고 unit/proto만 실행
-h, --help 이 도움말 출력
USAGE
}
dry_run=0
skip_network=0
while [ "$#" -gt 0 ]; do
case "$1" in
--dry-run) dry_run=1 ;;
--skip-network) skip_network=1 ;;
-h|--help) usage; exit 0 ;;
*)
printf 'Error: unknown option "%s"\n' "$1" >&2
usage >&2
exit 2
;;
esac
shift
done
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
repo_root="$(cd "$script_dir/../../../../.." && pwd)"
classifier="$script_dir/run_test_by_change.sh"
matrix="$script_dir/run_matrix.sh"
# 1. classifier 실행
printf '## Classifier\n\n'
classify_output="$(bash "$classifier" --route full --dry-run 2>&1)"
classify_exit=$?
printf '%s\n' "$classify_output"
if [ "$classify_exit" -ne 0 ]; then
printf '\n**ERROR** classifier 실패 (exit %d)\n' "$classify_exit" >&2
exit "$classify_exit"
fi
# recommended 상태의 full functional 후보 확인
has_recommended=0
if printf '%s\n' "$classify_output" | grep -q '| recommended | functional-full '; then
has_recommended=1
fi
# nightly-pending 항목 리포트 (미실행, PASS 아님)
report_nightly_pending() {
local rows
rows="$(printf '%s\n' "$classify_output" | grep '| nightly-pending |' || true)"
[ -z "$rows" ] && return
printf '\n### Nightly pending (미실행, PASS 아님)\n\n'
printf '다음 항목은 실행하지 않았으며 PASS 근거가 아닙니다. 20:00 이후 별도 실행 후보:\n\n'
while IFS= read -r row; do
[ -z "$row" ] && continue
local kind
kind="$(printf '%s\n' "$row" | awk -F'|' '{s=$3; gsub(/^ +| +$/, "", s); print s; exit}')"
local cmd
case "$kind" in
performance-full)
cmd="bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full"
;;
stability-full)
cmd="bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --full --profile sustained,parallel,payload"
;;
*)
cmd="manual follow-up required"
;;
esac
printf -- '- %s: `%s`\n' "$kind" "$cmd"
done <<< "$rows"
}
if [ "$dry_run" -eq 1 ]; then
echo "### Dry-run 완료"
if [ "$has_recommended" -eq 1 ]; then
echo "full functional recommended — 실제 실행하려면 --dry-run 옵션을 제거하라."
else
echo "full functional 미권장 — 실행하지 않음."
fi
report_nightly_pending
exit 0
fi
# 2. recommended 상태 확인 — functional-full 추천 없으면 matrix 실행skip
if [ "$has_recommended" -ne 1 ]; then
printf '\n**SKIPPED** full functional 미권장 — classifier가 functional-full을 추천하지 않아 matrix를 실행하지 않음.\n\n'
exit 0
fi
# 3. matrix 실행
if [ "$skip_network" -eq 1 ]; then
printf '\n## Matrix (unit + proto only)\n\n'
bash "$matrix" --unit --proto
else
printf '\n## Matrix (full)\n\n'
bash "$matrix" --all
fi
matrix_exit=$?
printf '\n## 결과\n\n'
if [ "$matrix_exit" -eq 0 ]; then
printf 'full functional periodic: **PASS**\n'
else
printf 'full functional periodic: **FAIL** (exit %d)\n' "$matrix_exit"
fi
report_nightly_pending
exit "$matrix_exit"