From 368d14de0e80d5bf7898409d6192a344de088fc0 Mon Sep 17 00:00:00 2001 From: hpd840321 Date: Sun, 10 May 2026 06:54:22 +0800 Subject: [PATCH] feat: add release build script for component-organization service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - release-component-organization.sh: Maven build + DDL + config + ZIP - Includes organization-side active policy SQL (唯一策略维护点) - Naming: ninca-common-component-organization-{ver}-xinghewan-{date} --- .../build/release-component-organization.sh | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 scripts/build/release-component-organization.sh diff --git a/scripts/build/release-component-organization.sh b/scripts/build/release-component-organization.sh new file mode 100644 index 00000000..919a272c --- /dev/null +++ b/scripts/build/release-component-organization.sh @@ -0,0 +1,139 @@ +#!/usr/bin/env bash +# 构建 ninca-common-component-organization 指定版本发布包 +# 目录命名: ninca-common-component-organization-<版本>-xinghewan-<日期> +# 用法: ./release-component-organization.sh [版本号] +# 示例: ./release-component-organization.sh 2.9.5 +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/../.." && pwd)" +MAVEN_ROOT="${ROOT}/backend/ninca-common-component-organization" +REL_VER="${1:-2.9.5}" +RELEASE_DATE_LABEL="${RELEASE_DATE_LABEL:-$(date +%Y%m%d)}" +JAR_NAME="ninca-common-component-organization-${REL_VER}.jar" +BUNDLE_DIR_NAME="ninca-common-component-organization-${REL_VER}-xinghewan-${RELEASE_DATE_LABEL}" +OUT_DIR="${MAVEN_ROOT}/releases/${BUNDLE_DIR_NAME}" + +JAVA_HOME="${JAVA_HOME:-/usr/lib/jvm/java-8-openjdk-amd64}" +export JAVA_HOME +export PATH="${JAVA_HOME}/bin:${PATH}" + +if ! java -version 2>&1 | grep -q 'version "1\.8\.'; then + echo "ERROR: 需要 JDK 8(JAVA_HOME=${JAVA_HOME})。" >&2 + exit 1 +fi + +rm -rf "${OUT_DIR}" +mkdir -p "${OUT_DIR}" + +require_file() { + local file_path="$1"; local hint="$2" + if [[ ! -f "${file_path}" ]]; then + echo "ERROR: 缺少必需文件: ${file_path} (${hint})" >&2 + exit 1 + fi +} + +# ── Step 1: Maven build ── +echo "==> Set reactor version to ${REL_VER}" +(cd "${MAVEN_ROOT}" && mvn -q versions:set -DnewVersion="${REL_VER}" -DgenerateBackupPoms=false) + +echo "==> Package starter (fat jar)" +(cd "${MAVEN_ROOT}" && mvn -q -pl cwos-component-organization-starter -am package -DskipTests) + +SRC_JAR="${MAVEN_ROOT}/cwos-component-organization-starter/target/${JAR_NAME}" +if [[ ! -f "${SRC_JAR}" ]]; then + for candidate in $(ls -1t "${MAVEN_ROOT}/cwos-component-organization-starter/target"/*.jar 2>/dev/null || true); do + if [[ "${candidate}" == *.jar.original ]]; then continue; fi + SRC_JAR="${candidate}"; break + done +fi +if [[ -z "${SRC_JAR}" || ! -f "${SRC_JAR}" ]]; then + echo "ERROR: 未找到可用 starter 制品" >&2; exit 1 +fi + +# ── Step 2: Copy artifacts ── +echo "==> Copy artifacts to ${OUT_DIR}" +install -m0644 "${SRC_JAR}" "${OUT_DIR}/${JAR_NAME}" + +# Config files +for conf_name in bootstrap.properties application.properties recognition-logback.xml; do + CONF_SRC="${MAVEN_ROOT}/cwos-component-organization-starter/deploy/run-verify/${conf_name}" + if [[ -f "${CONF_SRC}" ]]; then + install -m0644 "${CONF_SRC}" "${OUT_DIR}/${conf_name}" + fi +done + +# ── Step 3: DDL/SQL (组织侧 — 活跃策略) ── +DDL_DIR="${OUT_DIR}/ddl" +mkdir -p "${DDL_DIR}" + +ORG_DDL_SRC="${ROOT}/docs/sql/organization_tenant_visitor_floor_policy.sql" +require_file "${ORG_DDL_SRC}" "组织库 DDL" +install -m0644 "${ORG_DDL_SRC}" "${DDL_DIR}/organization_tenant_visitor_floor_policy.sql" + +ORG_INIT_SRC="${ROOT}/docs/sql/organization_tenant_visitor_floor_policy_init_tenants.sql" +require_file "${ORG_INIT_SRC}" "组织库策略种子" +install -m0644 "${ORG_INIT_SRC}" "${DDL_DIR}/organization_tenant_visitor_floor_policy_init_tenants.sql" + +# DDL 说明 +cat > "${DDL_DIR}/README_DDL.txt" << 'DDL_README' +# tenant_visitor_floor_policy DDL 说明 (组织侧) +# +# 执行目标库: component-organization +# 执行顺序: +# 1. organization_tenant_visitor_floor_policy.sql — 建表 DDL +# 2. organization_tenant_visitor_floor_policy_init_tenants.sql — 种子数据 (幂等) +# +# 策略语义: REPLACE_ALLOWLIST (替代, 非求交) +# V2 唯一策略维护点, 电梯侧不再维护此表。 +DDL_README + +# ── Step 4: Start script ── +cat > "${OUT_DIR}/start.sh" << 'STARTSCRIPT' +#!/usr/bin/env bash +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +JAVA_BIN="${JAVA_HOME:-/usr/lib/jvm/java-8-openjdk-amd64}/bin/java" +JAR=$(ls "$SCRIPT_DIR"/ninca-common-component-organization-*.jar 2>/dev/null | head -1) +exec "$JAVA_BIN" -jar "$JAR" \ + --spring.config.location="file:${SCRIPT_DIR}/" \ + --logging.config="file:${SCRIPT_DIR}/recognition-logback.xml" \ + "$@" +STARTSCRIPT +chmod 0755 "${OUT_DIR}/start.sh" + +# ── Step 5: RELEASE.txt ── +cat > "${OUT_DIR}/RELEASE.txt" << RELEASETXT +component: ninca-common-component-organization +version: ${REL_VER}-xinghewan +date: ${RELEASE_DATE_LABEL} +jar: ${JAR_NAME} +RELEASETXT + +# ── Step 6: BUILD_MANIFEST.txt ── +{ + echo "artifact=${JAR_NAME}" + echo "bundle_dir_name=${BUNDLE_DIR_NAME}" + echo "built_at=$(date -Iseconds 2>/dev/null || date)" + echo "java_home=${JAVA_HOME}" + java -version 2>&1 | sed 's/^/java_version_line=/' || true + echo -n "git_rev=" + (cd "${ROOT}" && git rev-parse HEAD 2>/dev/null) || echo "unknown" + echo -n "git_branch=" + (cd "${ROOT}" && git rev-parse --abbrev-ref HEAD 2>/dev/null) || echo "unknown" +} > "${OUT_DIR}/BUILD_MANIFEST.txt" + +# ── Step 7: Zip ── +if [[ "${RELEASE_MAKE_ZIP:-1}" == "1" ]]; then + ZIP_NAME="${BUNDLE_DIR_NAME}.zip" + ZIP_OUT="${MAVEN_ROOT}/releases/${ZIP_NAME}" + rm -f "${ZIP_OUT}" + (cd "${MAVEN_ROOT}/releases" && zip -rq "${ZIP_NAME}" "${BUNDLE_DIR_NAME}") + echo "==> Zip artifact: ${ZIP_OUT}" +fi + +# ── Restore version ── +echo "==> Restore reactor version to 2.9.2-xinghewan" +(cd "${MAVEN_ROOT}" && mvn -q versions:set -DnewVersion=2.9.2-xinghewan -DgenerateBackupPoms=false) + +echo "==> Done." +ls -la "${OUT_DIR}"