#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" # shellcheck disable=SC1091 source "$SCRIPT_DIR/common.sh" load_local_env NACOS_SOURCE_DIR="${LIKEI_NACOS_CONFIG_ROOT:-$JAVA_REPO_DIR/nacos_config}" NACOS_CONFIG_HOST="${NACOS_CONFIG_HOST:?missing NACOS_CONFIG_HOST}" NACOS_CONFIG_PORT="${NACOS_CONFIG_PORT:?missing NACOS_CONFIG_PORT}" NAMESPACE_ID="${NAMESPACE_ID:-${LIKEI_NACOS_NAMESPACE:?missing LIKEI_NACOS_NAMESPACE}}" NAMESPACE_NAME="${NAMESPACE_NAME:-${LIKEI_NACOS_NAMESPACE_NAME:?missing LIKEI_NACOS_NAMESPACE_NAME}}" NACOS_CONFIG_BASE_URL="http://${NACOS_CONFIG_HOST}:${NACOS_CONFIG_PORT}/nacos" TMP_DIR="$(mktemp -d)" cleanup() { rm -rf "$TMP_DIR" } trap cleanup EXIT cp -R "$NACOS_SOURCE_DIR/." "$TMP_DIR/" if [ -f "$TMP_DIR/common/external.yml" ]; then cp "$TMP_DIR/common/external.yml" "$TMP_DIR/common/external-config.yml" fi if [ "$NAMESPACE_ID" != "public" ]; then for _ in $(seq 1 60); do if curl -fsS "${NACOS_CONFIG_BASE_URL}/" >/dev/null; then break fi sleep 1 done curl -fsS -X POST "$NACOS_CONFIG_BASE_URL/v1/console/namespaces" \ --data-urlencode "customNamespaceId=${NAMESPACE_ID}" \ --data-urlencode "namespaceName=${NAMESPACE_NAME}" \ --data-urlencode "namespaceDesc=${NAMESPACE_NAME}" >/dev/null || true fi publish_file() { local file_path="$1" local group="$2" local data_id="$3" if [ "$NAMESPACE_ID" = "public" ]; then curl -fsS -X POST "$NACOS_CONFIG_BASE_URL/v1/cs/configs" \ --data-urlencode "group=${group}" \ --data-urlencode "dataId=${data_id}" \ --data-urlencode "type=yaml" \ --data-urlencode "content@${file_path}" >/dev/null else curl -fsS -X POST "$NACOS_CONFIG_BASE_URL/v1/cs/configs" \ --data-urlencode "tenant=${NAMESPACE_ID}" \ --data-urlencode "group=${group}" \ --data-urlencode "dataId=${data_id}" \ --data-urlencode "type=yaml" \ --data-urlencode "content@${file_path}" >/dev/null fi printf 'published %s/%s\n' "$group" "$data_id" } while IFS= read -r file_path; do [ -f "$file_path" ] || continue group_name="$(basename "$(dirname "$file_path")")" data_id="$(basename "$file_path")" publish_file "$file_path" "$group_name" "$data_id" done < <(find "$TMP_DIR" -type f -name '*.yml' | sort)