Files
starRiverProperty/scripts/build/release-component-organization.sh
hpd840321 368d14de0e feat: add release build script for component-organization service
- release-component-organization.sh: Maven build + DDL + config + ZIP
- Includes organization-side active policy SQL (唯一策略维护点)
- Naming: ninca-common-component-organization-{ver}-xinghewan-{date}
2026-05-10 06:54:22 +08:00

140 lines
5.1 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 8JAVA_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}"