Files
tf_provider/TOOLS/scripts/check_schema_names.sh
T
Repinoid 56ebab38f7 feat(tools): страж имён атрибутов схемы + вызов в 03 (fail-fast до заливки)
Инцидент 2026-09-30 показал: невалидное имя атрибута (s3-inst) проходило генерацию,
сборку и заливку, а ломалось только у пользователя (Terraform отвергает схему целиком).

- TOOLS/scripts/check_schema_names.sh: проверяет все tfsdk:"..." в сгенерированном Go
  на [a-z0-9_]; exit 1 при нарушении, с подсказкой про helpers.ToSnake.
- 03_build_and_upload_provider.sh: вызов стража после 02 (до сборки и заливки).
- ARCHITECTURE.md: страж добавлен в список enforced-скриптов.
- HISTORY: пункт 'не закрыто' заменён на 'закрыто' с проверками.

Проверено: dev/test/prod -> OK; искусственный пример (tfsdk:"s3-inst") -> exit 1.
2026-09-30 21:55:07 +03:00

47 lines
1.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
# check_schema_names.sh — защита от невалидных имён атрибутов Terraform-схемы.
#
# Terraform допускает в именах атрибутов только [a-z0-9_]. Нарушение приводит к тому,
# что провайдер НЕ может отдать схему целиком ("Invalid Attribute/Block Name") и падают
# plan/apply/validate у всех пользователей.
# Инцидент 2026-09-30: коды API `s3-inst` / `s3-ref-root` в тестовом сервисе 1_dummy.
#
# Проверяет все `tfsdk:"..."` в сгенерированном Go.
#
# Usage:
# ./TOOLS/scripts/check_schema_names.sh generated/dev/go
# ./TOOLS/scripts/check_schema_names.sh provider/internal/resources_gen
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="${ROOT_DIR:-$(cd "${SCRIPT_DIR}/../.." && pwd)}"
TARGET="${1:-}"
if [[ -z "$TARGET" ]]; then
echo "Usage: $0 <dir-with-generated-go>" >&2
exit 2
fi
[[ "$TARGET" = /* ]] || TARGET="${ROOT_DIR}/${TARGET}"
if [[ ! -d "$TARGET" ]]; then
echo "Error: directory not found: $TARGET" >&2
exit 2
fi
bad="$(grep -rho 'tfsdk:"[^"]*"' "$TARGET" --include='*.go' \
| sed 's/^tfsdk:"//; s/"$//' \
| grep -vE '^[a-z0-9_]+$' \
| sort -u || true)"
if [[ -n "$bad" ]]; then
echo "INVALID TERRAFORM ATTRIBUTE NAMES (only [a-z0-9_] allowed):" >&2
echo "$bad" | sed 's/^/ /' >&2
echo "" >&2
echo "Terraform отвергает схему провайдера ЦЕЛИКОМ — пользователи не смогут сделать plan/apply." >&2
echo "Нормализуйте имена в генераторе: TOOLS/resource-generator/internal/helpers/helpers.go (ToSnake/sanitizeAttrName)." >&2
exit 1
fi
echo "OK: all tfsdk attribute names valid in ${TARGET}"