diff --git a/.github/pravila.md b/.github/pravila.md index dbf3685..1804655 100644 --- a/.github/pravila.md +++ b/.github/pravila.md @@ -60,6 +60,33 @@ ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout= git tag vX.Y.Z && git push origin vX.Y.Z ``` +## ⛔ ТЕРМИНАЛЬНЫЙ БУФЕР — НИКОГДА НЕ ЧИТАТЬ СТАРЫЙ + +**АБСОЛЮТНОЕ ПРАВИЛО:** +- get_terminal_output из старых сессий — МУСОР. Там старые прогоны. +- Всегда запускать новую команду через SSH и читать её вывод напрямую. +- НИКОГДА не читать буфер терминала из предыдущей сессии как актуальные данные. +- Актуальный результат — только из команды, которая была запущена СЕЙЧАС. + +## ⛔ ДОКУМЕНТАЦИЯ ТЕСТ-ПРОГОНОВ — В РЕАЛЬНОМ ВРЕМЕНИ + +**Правила:** +1. Перед запуском `run_all.sh` — создать файл `test-results/YYYY-MM-DD_HH-MM.log` и записать в него метку времени и что запускается. +2. Запускать `run_all.sh 2>&1 | tee ~/terra/fission/test-results/YYYY-MM-DD_HH-MM.log` — вывод пишется сразу в файл и отображается в терминале. +3. После завершения — rsync лога локально. Лог остаётся как документация. +4. Папка `test-results/` в репозитории — `.gitignore` не добавлять, логи коммитить. + +**Формат запуска:** +```bash +LOG="test-results/$(date +%Y-%m-%d_%H-%M).log" +ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no naeel@5.172.178.213 \ + "bash ~/terra/fission/scripts/run_all.sh 2>&1 | tee ~/terra/fission/${LOG}" +rsync -az -e "ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no" \ + naeel@5.172.178.213:~/terra/fission/test-results/ ~/fission/test-results/ +``` + +**Никогда не разбираться с результатами по памяти / буферу / чату. Только лог.** + ## Поведение агента - Не трогать рабочий код без явного указания diff --git a/scripts/run_all.sh b/scripts/run_all.sh new file mode 100755 index 0000000..8ded045 --- /dev/null +++ b/scripts/run_all.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash +# run_all.sh — запускает все тест-скрипты по очереди, выводит итог. +# Каждый скрипт независим и имеет собственный cleanup. +# При падении одного скрипта остальные продолжают выполняться. +# +# Запуск: bash run_all.sh +# Запуск одного: bash run_all.sh test_auth.sh +set -uo pipefail + +ROOT_DIR=$(cd "$(dirname "$0")" && pwd) + +# Авто-логирование: если stdout — терминал, пишем одновременно в файл +LOG_DIR="${ROOT_DIR}/../test-results" +mkdir -p "$LOG_DIR" +LOG_FILE="${LOG_DIR}/$(date +%Y-%m-%d_%H-%M-%S).log" +# Перезапуск с tee только если ещё не логируем (нет переменной _LOGGING) +if [ -z "${_LOGGING:-}" ]; then + export _LOGGING=1 + exec bash "$0" "$@" 2>&1 | tee "$LOG_FILE" + exit $? +fi +echo "LOG: $LOG_FILE" + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +TOTAL_PASS=0 +TOTAL_FAIL=0 +FAILED_SCRIPTS=() + +run_script() { + local script="$1" + local name + name=$(basename "$script") + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo " ЗАПУСК: $name" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + + local exit_code=0 + bash "$script" || exit_code=$? + + if [ "$exit_code" -eq 0 ]; then + echo -e "${GREEN} ✓ $name — PASSED${NC}" + TOTAL_PASS=$((TOTAL_PASS+1)) + else + echo -e "${RED} ✗ $name — FAILED (exit $exit_code)${NC}" + TOTAL_FAIL=$((TOTAL_FAIL+1)) + FAILED_SCRIPTS+=("$name") + fi +} + +# Список скриптов в порядке выполнения +# (быстрые сначала, invoke/stress — последними) +SCRIPTS=( + "${ROOT_DIR}/test_auth.sh" + "${ROOT_DIR}/test_functions_crud.sh" + "${ROOT_DIR}/test_ttl.sh" + "${ROOT_DIR}/test_isolation.sh" + "${ROOT_DIR}/test_update.sh" + "${ROOT_DIR}/test_invoke.sh" + "${ROOT_DIR}/test_linters.sh" + "${ROOT_DIR}/test_stress.sh" +) + +# Если передан аргумент — запускаем только его +if [ "$#" -ge 1 ]; then + SCRIPTS=("${ROOT_DIR}/$1") +fi + +# Предварительная очистка тест-namespace-ов от прошлых прогонов. +# Запускается только если cleanup_test_namespaces.sh умеет wildcard. +PRE_CLEANUP="${ROOT_DIR}/pre_cleanup.sh" +if [ -x "$PRE_CLEANUP" ]; then + echo "" + echo ">>> Предварительная очистка тест-namespace-ов..." + KUBECTL_DIRECT=1 bash "$PRE_CLEANUP" 2>/dev/null || true +fi + +echo "" +echo "╔══════════════════════════════════════╗" +echo "║ fission-console — полный тест-сьют ║" +echo "╚══════════════════════════════════════╝" + +START_TIME=$(date +%s) + +for script in "${SCRIPTS[@]}"; do + if [ ! -f "$script" ]; then + echo -e "${YELLOW} SKIP: $script не найден${NC}" + continue + fi + run_script "$script" +done + +END_TIME=$(date +%s) +ELAPSED=$((END_TIME - START_TIME)) + +echo "" +echo "╔══════════════════════════════════════╗" +printf "║ Скриптов: PASS=%-3d FAIL=%-3d %3ds ║\n" "$TOTAL_PASS" "$TOTAL_FAIL" "$ELAPSED" +echo "╚══════════════════════════════════════╝" + +if [ "${#FAILED_SCRIPTS[@]}" -gt 0 ]; then + echo "" + echo "Упавшие скрипты:" + for s in "${FAILED_SCRIPTS[@]}"; do + echo -e " ${RED}✗ $s${NC}" + done +fi + +[ "$TOTAL_FAIL" -eq 0 ]