Files
tf_provider/TOOLS/scripts/check_hardcoded_service_ids.sh
T
Repinoid c5a4499094 chore(tools): страж хардкодов покрыл provider/ + id сервиса в именованную константу
check_hardcoded_service_ids.sh:
- область расширена с TOOLS/ на TOOLS/ + provider/internal/ (кроме generated resources_gen/);
- второй паттерн: литеральный ref-service id в ResolveRefSvcParamValue/DisplayName(ctx, N,...);
- справка обновлена (убран удалённый serviceSpecificModifiers);
- сервис-специфичные литералы пояснены как 'именованные константы'.

org_ip_allocation_resource.go: ResolveRefSvcParamValue(ctx, 19, ...) -> svcIDVcOrg.

Проверено: bash TOOLS/scripts/check_hardcoded_service_ids.sh -> OK (exit 0).
2026-09-30 20:33:09 +03:00

48 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# check_hardcoded_service_ids.sh — запрет сервис-специфичных хардкодов по числовому ID.
#
# Ищет:
# 1) сравнения вида svc.ID == N / ServiceID == N / spec.ServiceID == N (N > 0)
# 2) литеральные ref-service id в вызовах резолва:
# ResolveRefSvcParamValue(ctx, 19, ...) / ResolveRefSvcParamDisplayName(ctx, 22, ...)
#
# Область: TOOLS/** и provider/internal/** (кроме сгенерированного resources_gen/**).
# Исключения должны жить в именованных реестрах/константах (данные), а не как магические числа.
# - TOOLS/docs-generator/internal/writers/writers.go (serviceSpecificDocExamples)
# - provider/internal/resources_core/*.go (именованные svcID* константы)
#
# Выход: 0 — хардкодов нет; 1 — найдены.
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="${ROOT_DIR:-$(cd "${SCRIPT_DIR}/../.." && pwd)}"
SCAN_DIRS=("$ROOT_DIR/TOOLS" "$ROOT_DIR/provider/internal")
matches=""
for dir in "${SCAN_DIRS[@]}"; do
[[ -d "$dir" ]] || continue
# Сгенерированный код не сканируем — он не редактируется руками (см. ARCHITECTURE.md).
found="$(grep -rnE \
-e '\.(ServiceID|ID)[[:space:]]*==[[:space:]]*[1-9][0-9]*' \
-e '(ResolveRefSvcParamValue|ResolveRefSvcParamDisplayName)\([^,]+, *[1-9][0-9]*' \
"$dir" --include='*.go' --exclude-dir=resources_gen || true)"
if [[ -n "$found" ]]; then
matches+="$found"$'\n'
fi
done
if [[ -n "$matches" ]]; then
echo "HARDCODED SERVICE ID FOUND (service-specific logic must live in a named registry):" >&2
printf '%s' "$matches" >&2
echo "" >&2
echo "Вынеси исключение в именованный реестр/константу:" >&2
echo " - TOOLS/docs-generator/internal/writers/writers.go (serviceSpecificDocExamples)" >&2
echo " - provider/internal/resources_core/*.go (именованные svcID* константы)" >&2
echo "См. TOOLS/ARCHITECTURE.md, раздел «Exception Registry»." >&2
exit 1
fi
echo "OK: no hardcoded service IDs in TOOLS/ and provider/internal/."