#!/usr/bin/env bash set -euo pipefail # check_hardcoded_service_ids.sh — запрет сервис-специфичных хардкодов по числовому ID. # # Ищет сравнения вида svc.ID == N / ServiceID == N / spec.ServiceID == N (N > 0) # в Go-коде TOOLS/. Исключения должны жить ТОЛЬКО в именованных реестрах (данные): # - TOOLS/yaml-generator/main.go (serviceSpecificModifiers) # - TOOLS/docs-generator/internal/writers/writers.go (serviceSpecificDocExamples) # # Выход: 0 — хардкодов нет; 1 — найдены. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="${ROOT_DIR:-$(cd "${SCRIPT_DIR}/../.." && pwd)}" matches="$(grep -rnE '\.(ServiceID|ID)[[:space:]]*==[[:space:]]*[1-9][0-9]*' "$ROOT_DIR/TOOLS" --include='*.go' || true)" if [[ -n "$matches" ]]; then echo "HARDCODED SERVICE ID FOUND (service-specific logic must live in a registry):" >&2 echo "$matches" >&2 echo "" >&2 echo "Вынеси исключение в один из реестров:" >&2 echo " - TOOLS/yaml-generator/main.go (serviceSpecificModifiers)" >&2 echo " - TOOLS/docs-generator/internal/writers/writers.go (serviceSpecificDocExamples)" >&2 echo "См. TOOLS/ARCHITECTURE.md, раздел «Реестр исключений»." >&2 exit 1 fi echo "OK: no hardcoded service IDs in TOOLS/."