Files
tf_provider/TOOLS/scripts/check_generated_drift.sh
T

59 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# check_generated_drift.sh — детект дрейфа сгенерированного Go-кода.
#
# Сравнивает ПО СОДЕРЖИМОМУ каталог свежей генерации стенда с рабочей копией
# провайдера, из которой возможна прямая сборка:
#
# generated/<stand>/go/ <-> provider/internal/resources_gen/
#
# Каноническая сборка идёт через 03_build_and_upload_provider.sh (временная
# копия со свежесгенерированным кодом). Этот скрипт — детектор: он не даёт
# provider/internal/resources_gen незаметно протухнуть (каталог в .gitignore,
# поэтому в git status дрейф не виден).
#
# Использование:
# ./TOOLS/scripts/check_generated_drift.sh dev # dev | test | prod
#
# Выход: 0 — дрейфа нет; 1 — дрейф есть; 2 — ошибка аргументов.
STAND="${1:-}"
if [[ -z "$STAND" ]]; then
echo "Usage: $0 <stand> # dev | test | prod" >&2
exit 2
fi
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="${ROOT_DIR:-$(cd "${SCRIPT_DIR}/../.." && pwd)}"
GEN_GO_DIR="${ROOT_DIR}/generated/${STAND}/go"
PROV_GO_DIR="${ROOT_DIR}/provider/internal/resources_gen"
if [[ ! -d "$GEN_GO_DIR" ]]; then
echo "ERROR: no generated go for stand '${STAND}': $GEN_GO_DIR" >&2
echo " Run: TOOLS/scripts/02_generate_resources_and_docs_v2.sh --profile TOOLS/config/${STAND}" >&2
exit 2
fi
if [[ ! -d "$PROV_GO_DIR" ]]; then
echo "DRIFT: provider resources_gen dir missing: $PROV_GO_DIR" >&2
exit 1
fi
# Сравнение по содержимому, включая файлы, присутствующие только с одной стороны.
if diff -rq "$GEN_GO_DIR" "$PROV_GO_DIR" >/dev/null; then
echo "OK: no drift for stand '${STAND}' (generated go == provider copy)."
exit 0
fi
echo "DRIFT DETECTED for stand '${STAND}':" >&2
echo " source: $GEN_GO_DIR" >&2
echo " target: $PROV_GO_DIR" >&2
echo "" >&2
echo "Сгенерированный код стенда расходится с рабочей копией провайдера." >&2
echo "Сборка должна идти через 03_build_and_upload_provider.sh (temp-копия);" >&2
echo "provider/internal/resources_gen надо привести в соответствие с generated." >&2
echo "Различия:" >&2
diff -rq "$GEN_GO_DIR" "$PROV_GO_DIR" >&2 || true
exit 1