61 lines
2.8 KiB
Bash
Executable File
61 lines
2.8 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
|
|
|
|
# Сравнение по содержимому, включая файлы, присутствующие только с одной стороны.
|
|
# .stand — маркер стенда, который кладёт dev-materialize.sh; в сравнении не участвует.
|
|
if diff -rq --exclude='.stand' "$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 "Для локальной разработки перематериализуй стенд:" >&2
|
|
echo " TOOLS/scripts/dev-materialize.sh ${STAND}" >&2
|
|
echo "Различия:" >&2
|
|
diff -rq --exclude='.stand' "$GEN_GO_DIR" "$PROV_GO_DIR" >&2 || true
|
|
exit 1
|