refactor(build): эфемерные generated-копии — dev-materialize по стенду вместо постоянного дубля
This commit is contained in:
@@ -237,6 +237,9 @@ Enforced by scripts (run before build/commit):
|
|||||||
- `TOOLS/scripts/check_hardcoded_service_ids.sh` — forbids `svc.ID == N` /
|
- `TOOLS/scripts/check_hardcoded_service_ids.sh` — forbids `svc.ID == N` /
|
||||||
`ServiceID == N` outside the registries.
|
`ServiceID == N` outside the registries.
|
||||||
|
|
||||||
Build rule: `provider/internal/resources_gen` is a transient sync copy, never a
|
Build rule: `provider/internal/resources_gen` and `provider/resources_yaml` are
|
||||||
build source. Canonical build is `03_build_and_upload_provider.sh` (temp copy from
|
ephemeral by design and never a build source. Canonical build is
|
||||||
`generated/<stand>/go`); `build-provider.sh` refuses direct build from `provider/`.
|
`03_build_and_upload_provider.sh` (temp copy from `generated/<stand>/go`);
|
||||||
|
`build-provider.sh` refuses direct build from `provider/`. For local IDE,
|
||||||
|
`go build` and `go test`, materialize one stand first:
|
||||||
|
`TOOLS/scripts/dev-materialize.sh <stand>` (output is git-ignored).
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ if [[ ! -d "$PROV_GO_DIR" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Сравнение по содержимому, включая файлы, присутствующие только с одной стороны.
|
# Сравнение по содержимому, включая файлы, присутствующие только с одной стороны.
|
||||||
if diff -rq "$GEN_GO_DIR" "$PROV_GO_DIR" >/dev/null; then
|
# .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)."
|
echo "OK: no drift for stand '${STAND}' (generated go == provider copy)."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
@@ -51,8 +52,9 @@ echo " source: $GEN_GO_DIR" >&2
|
|||||||
echo " target: $PROV_GO_DIR" >&2
|
echo " target: $PROV_GO_DIR" >&2
|
||||||
echo "" >&2
|
echo "" >&2
|
||||||
echo "Сгенерированный код стенда расходится с рабочей копией провайдера." >&2
|
echo "Сгенерированный код стенда расходится с рабочей копией провайдера." >&2
|
||||||
echo "Сборка должна идти через 03_build_and_upload_provider.sh (temp-копия);" >&2
|
echo "Релиз собирается через 03_build_and_upload_provider.sh (temp-копия)." >&2
|
||||||
echo "provider/internal/resources_gen надо привести в соответствие с generated." >&2
|
echo "Для локальной разработки перематериализуй стенд:" >&2
|
||||||
|
echo " TOOLS/scripts/dev-materialize.sh ${STAND}" >&2
|
||||||
echo "Различия:" >&2
|
echo "Различия:" >&2
|
||||||
diff -rq "$GEN_GO_DIR" "$PROV_GO_DIR" >&2 || true
|
diff -rq --exclude='.stand' "$GEN_GO_DIR" "$PROV_GO_DIR" >&2 || true
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Executable
+55
@@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# dev-materialize.sh — локально материализовать сгенерированный код стенда в provider/.
|
||||||
|
#
|
||||||
|
# Кладёт в provider/ ЭФЕМЕРНУЮ копию (git-ignored), чтобы штатно работали
|
||||||
|
# go build / go test / IDE. Это НЕ путь релиза: релиз собирается только через
|
||||||
|
# 03_build_and_upload_provider.sh (temp-копия со свежесгенерированным кодом).
|
||||||
|
#
|
||||||
|
# Использование:
|
||||||
|
# ./TOOLS/scripts/dev-materialize.sh dev # dev | test | prod
|
||||||
|
#
|
||||||
|
# Требует предварительной генерации:
|
||||||
|
# TOOLS/scripts/02_generate_resources_and_docs_v2.sh --profile TOOLS/config/<stand>
|
||||||
|
|
||||||
|
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"
|
||||||
|
GEN_YAML_DIR="${ROOT_DIR}/generated/${STAND}/resources_yaml"
|
||||||
|
PROV_GO_DIR="${ROOT_DIR}/provider/internal/resources_gen"
|
||||||
|
PROV_YAML_DIR="${ROOT_DIR}/provider/resources_yaml"
|
||||||
|
|
||||||
|
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 "$GEN_YAML_DIR" ]]; then
|
||||||
|
echo "ERROR: no generated yaml for stand '${STAND}': $GEN_YAML_DIR" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 1) Go-ресурсы.
|
||||||
|
mkdir -p "$PROV_GO_DIR"
|
||||||
|
find "$PROV_GO_DIR" -maxdepth 1 -type f -name '*.go' -delete
|
||||||
|
cp -R "$GEN_GO_DIR"/*.go "$PROV_GO_DIR/"
|
||||||
|
|
||||||
|
# 2) YAML-спеки + embed.go (нужны для go:embed в resources_core).
|
||||||
|
mkdir -p "$PROV_YAML_DIR"
|
||||||
|
find "$PROV_YAML_DIR" -maxdepth 1 -type f \( -name '*.yaml' -o -name 'embed.go' \) -delete
|
||||||
|
cp -a "$GEN_YAML_DIR"/*.yaml "$PROV_YAML_DIR/"
|
||||||
|
cp "$GEN_YAML_DIR"/embed.go "$PROV_YAML_DIR/embed.go" 2>/dev/null || true
|
||||||
|
|
||||||
|
# 3) Маркер стенда — чтобы не спутать, какой стенд лежит в provider/.
|
||||||
|
printf '%s\n' "$STAND" > "$PROV_GO_DIR/.stand"
|
||||||
|
|
||||||
|
echo "Materialized stand '${STAND}' into provider/ (internal/resources_gen + resources_yaml)."
|
||||||
|
echo "This copy is ephemeral and git-ignored. Release build always uses 03_build_and_upload_provider.sh."
|
||||||
Reference in New Issue
Block a user