fix(docs): remove stand-specific hardcodes

This commit is contained in:
“Naeel”
2026-09-03 16:14:28 +03:00
parent 6bf514e03a
commit aa0f7f6402
7 changed files with 170 additions and 51 deletions
@@ -80,6 +80,13 @@ if [[ ! -f "$SERVICES_LIST_PATH" ]]; then
exit 2
fi
for required_var in VERSION NAMESPACE PROVIDER_NAME NUBES_API_ENDPOINT REGISTRY_HOSTNAME; do
if [[ -z "${!required_var:-}" ]]; then
echo "Error: $required_var is required in profile.env or registry.env" >&2
exit 2
fi
done
cd "$PROVIDER_DIR"
echo "Generating resources from unified YAML specs..."
@@ -96,11 +103,10 @@ cp -R "$TMP_GEN_DIR/." "$GO_OUTPUT_DIR/"
echo "Generating docs via template generator..."
mkdir -p "$DOCS_DIR"
find "$DOCS_DIR" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +
# Determine API endpoint for doc examples.
# Use NUBES_API_ENDPOINT from profile.env, fall back to production default.
# ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Default = Gateway. Override via NUBES_API_ENDPOINT.
DOCS_API_ENDPOINT="${NUBES_API_ENDPOINT:-https://lk-api-gateway.ngcloud.ru/api/v1/svc}"
# Determine API endpoint for doc examples from the selected profile.
DOCS_API_ENDPOINT="$NUBES_API_ENDPOINT"
# If endpoint looks like new REST gateway (no index.cfm), keep as-is.
# If it's old-style without index.cfm, append it for backward compat in docs.
if [[ "$DOCS_API_ENDPOINT" != *"/index.cfm"* ]] && [[ "$DOCS_API_ENDPOINT" != *"/svc"* ]]; then
@@ -111,7 +117,7 @@ ${ROOT_DIR}/TOOLS/bin/docs-generator \
-resources "$RESOURCES_YAML_DIR" \
-docs "$DOCS_DIR" \
-services "$SERVICES_LIST_PATH" \
-version "${VERSION:-2.x}" \
-version "$VERSION" \
-api-endpoint "$DOCS_API_ENDPOINT" \
-provider-source "${REGISTRY_HOSTNAME}/${NAMESPACE}/${PROVIDER_NAME}"
+72 -30
View File
@@ -36,8 +36,27 @@ if [[ -n "$PROFILE_DIR" ]]; then
source "$PROFILE_ENV_FILE"
set +a
fi
REGISTRY_ENV_FILE="${ROOT_DIR}/TOOLS/config/registry.env"
if [[ -f "$REGISTRY_ENV_FILE" ]]; then
set -a
# shellcheck disable=SC1090
source "$REGISTRY_ENV_FILE"
set +a
fi
fi
if [[ -z "$PROFILE_DIR" ]]; then
echo "Error: --profile <path> is required" >&2
exit 2
fi
for required_var in VERSION NAMESPACE PROVIDER_NAME NUBES_API_ENDPOINT REGISTRY_HOSTNAME; do
if [[ -z "${!required_var:-}" ]]; then
echo "Error: $required_var is required in profile.env or registry.env" >&2
exit 2
fi
done
resolve_root_path() {
local path_value="$1"
if [[ -z "$path_value" ]]; then
@@ -51,9 +70,9 @@ resolve_root_path() {
echo "${ROOT_DIR}/${path_value}"
}
VERSION="${1:-}"
if [[ -z "$VERSION" ]]; then
VERSION="${VERSION:-}"
VERSION_ARG="${1:-}"
if [[ -n "$VERSION_ARG" ]]; then
VERSION="$VERSION_ARG"
fi
if [[ -z "$VERSION" ]]; then
VERSION=$(grep -E 'version string' "$PROVIDER_MAIN" | sed -E 's/.*"([0-9.]+)".*/\1/')
@@ -65,8 +84,6 @@ if [[ -z "$VERSION" ]]; then
fi
REGISTRY_HOST="${REGISTRY_HOST:-tf-docs.nodejsk8s.dev.nubes.ru}"
NAMESPACE="${NAMESPACE:-nubes}"
PROVIDER_NAME="${PROVIDER_NAME:-nubes}"
export REGISTRY_HOST NAMESPACE PROVIDER_NAME VERSION
S3CFG_REGISTRY="${S3CFG_REGISTRY:-${ROOT_DIR}/secrets/.s3cfg_registry}"
@@ -85,9 +102,15 @@ if [[ -n "$PROFILE_DIR" ]]; then
fi
fi
# ⛔ LEGACY: deck-api.ngcloud.ru ЗАКРЫВАЕТСЯ. Default = Gateway.
DOCS_API_ENDPOINT="${NUBES_API_ENDPOINT:-https://lk-api-gateway.ngcloud.ru/api/v1/svc}"
DOCS_API_ENDPOINT="$NUBES_API_ENDPOINT"
DOCS_API_ENDPOINT="$(normalize_api_endpoint "$DOCS_API_ENDPOINT")"
DASHBOARD_HOST="deck"
if [[ "$NAMESPACE" != "nubes" ]]; then
DASHBOARD_HOST="deck-${NAMESPACE#nubes-}"
fi
DASHBOARD_URL="https://${DASHBOARD_HOST}.ngcloud.ru"
PROVIDER_SOURCE="${REGISTRY_HOSTNAME}/${NAMESPACE}/${PROVIDER_NAME}"
export DOCS_API_ENDPOINT DASHBOARD_URL PROVIDER_SOURCE
load_s3cfg_registry() {
local cfg="$1"
@@ -143,37 +166,56 @@ if [[ -n "${MKDOCS_DOCS_DIR:-}" ]]; then
fi
fi
# Per-стенд подстановка в getting-started (после копирования 30_registry в docs_dir)
# Per-стенд подстановка во все скопированные Markdown-файлы.
if [[ -n "${MKDOCS_DOCS_DIR:-}" ]]; then
export DOCS_GUIDE_VERSION="$VERSION"
export DOCS_GUIDE_API_ENDPOINT="$DOCS_API_ENDPOINT"
export DOCS_GUIDE_NAMESPACE="$NAMESPACE"
export DOCS_GUIDE_FILE="${MKDOCS_DOCS_DIR}/30_registry/guides/getting-started.md"
export DOCS_SUBSTITUTION_ROOT="$MKDOCS_DOCS_DIR"
python3 - <<'PY'
import os
import re
from pathlib import Path
guide_path = Path(os.environ["DOCS_GUIDE_FILE"])
if guide_path.exists():
text = guide_path.read_text(encoding="utf-8")
# source namespace: .../{{NAMESPACE}}/nubes -> .../<ns>/nubes
text = text.replace("{{NAMESPACE}}", os.environ["DOCS_GUIDE_NAMESPACE"])
# version (первое вхождение version = "x.y.z" — блок required_providers)
text = re.sub(
r'(version\s*=\s*")([0-9.]+)(")',
lambda m: f'{m.group(1)}{os.environ["DOCS_GUIDE_VERSION"]}{m.group(3)}',
text,
count=1,
root = Path(os.environ["DOCS_SUBSTITUTION_ROOT"])
values = {
"{{NAMESPACE}}": os.environ["NAMESPACE"],
"{{VERSION}}": os.environ["VERSION"],
"{{NUBES_API_ENDPOINT}}": os.environ["DOCS_API_ENDPOINT"],
"{{DASHBOARD_URL}}": os.environ["DASHBOARD_URL"],
"{{PROVIDER_SOURCE}}": os.environ["PROVIDER_SOURCE"],
"{{REGISTRY_HOST}}": os.environ["REGISTRY_HOSTNAME"],
}
legacy_provider_source = re.compile(
r'(source\s*=\s*")registry\.kube5s\.ru/[^"\n]+(")'
)
for path in root.rglob("*.md"):
text = path.read_text(encoding="utf-8")
for placeholder, value in values.items():
text = text.replace(placeholder, value)
text = legacy_provider_source.sub(
lambda match: f'{match.group(1)}{os.environ["PROVIDER_SOURCE"]}{match.group(2)}',
text,
)
text = re.sub(
r'(api_endpoint\s*=\s*")([^"]+)(")',
lambda m: f'{m.group(1)}{os.environ["DOCS_GUIDE_API_ENDPOINT"]}{m.group(3)}',
text,
count=1,
)
guide_path.write_text(text, encoding="utf-8")
path.write_text(text, encoding="utf-8")
for path in root.rglob("*.md"):
text = path.read_text(encoding="utf-8")
if "{{" in text or "}}" in text:
raise SystemExit(f"unresolved documentation placeholder: {path}")
PY
foreign_namespace=""
foreign_api=""
foreign_dashboard=""
case "$NAMESPACE" in
nubes) foreign_namespace="nubes-dev|nubes-test"; foreign_api="lk-api-gateway-(dev|test)"; foreign_dashboard="deck-(dev|test)" ;;
nubes-dev) foreign_namespace="nubes-test"; foreign_api="lk-api-gateway\.ngcloud\.ru|lk-api-gateway-test\.ngcloud\.ru"; foreign_dashboard="deck\.ngcloud\.ru|deck-test\.ngcloud\.ru" ;;
nubes-test) foreign_namespace="nubes-dev"; foreign_api="lk-api-gateway\.ngcloud\.ru|lk-api-gateway-dev\.ngcloud\.ru"; foreign_dashboard="deck\.ngcloud\.ru|deck-dev\.ngcloud\.ru" ;;
*) echo "Error: unsupported namespace for documentation validation: $NAMESPACE" >&2; exit 2 ;;
esac
if grep -RInE "$foreign_namespace|$foreign_api|$foreign_dashboard|registry\.kube5s\.ru" "$MKDOCS_DOCS_DIR" --include='*.md' >/tmp/docs-stand-contamination.txt 2>/dev/null; then
echo "Error: stand-specific contamination detected in generated docs:" >&2
cat /tmp/docs-stand-contamination.txt >&2
exit 2
fi
fi
python3 - <<'PY'