#!/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 " >&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}"