129 lines
3.9 KiB
Bash
Executable file
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"
|