99ed321d24
- 使用 libxlsxwriter 常量内存导出 Excel\n- 增加全局任务占用提示与原始数据持久化\n- 保留运行时任务数据并更新接口文档
93 lines
3.5 KiB
Bash
Executable File
93 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
||
# =====================================================
|
||
# package.sh — 编译并把 wind_power 产物整理到 runtime/wind_power/
|
||
#
|
||
# 输出目录结构:
|
||
# runtime/wind_power/
|
||
# ├── wind_server # 后端可执行
|
||
# ├── config/ # server_config.json 等静态配置
|
||
# ├── web/ # 前端静态资源(vite build 产物)
|
||
# ├── libs/ # 运行期依赖库(libdrogon/libtrantor .so)
|
||
# └── logs/ # 日志目录(运行时写入)
|
||
#
|
||
# 用法:
|
||
# ./package.sh # 默认 Release
|
||
# ./package.sh --build-type Debug
|
||
# ./package.sh --publish # 额外打包到 publish/wind_power-<ver>.tar.gz
|
||
#
|
||
# 参考: edge_collector/package.sh
|
||
# =====================================================
|
||
|
||
set -euo pipefail
|
||
|
||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
RUNTIME_DIR="${ROOT_DIR}/runtime/wind_power"
|
||
PUBLISH_DIR="${ROOT_DIR}/publish"
|
||
PKG_BUILD="${ROOT_DIR}/build_package"
|
||
BUILD_TYPE="Release"
|
||
PACKAGE_VERSION="0.1.0"
|
||
PUBLISH=false
|
||
|
||
# ---- 参数解析 ----
|
||
while [ $# -gt 0 ]; do
|
||
case "$1" in
|
||
--build-type) BUILD_TYPE="$2"; shift 2 ;;
|
||
--version) PACKAGE_VERSION="$2"; shift 2 ;;
|
||
--publish|publish) PUBLISH=true; shift ;;
|
||
*) echo "[package] 未知参数: $1"; exit 1 ;;
|
||
esac
|
||
done
|
||
|
||
# ---- 颜色 ----
|
||
GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m'
|
||
info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
||
step() { echo -e "${CYAN}[STEP]${NC} $1"; }
|
||
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
||
|
||
# 1. 确保 Drogon 已从源码编译(产物存在则秒过)
|
||
step "1/5 确保 Drogon ..."
|
||
THIRD_PARTY="${ROOT_DIR}/third_party" source "${ROOT_DIR}/third_party/ensure_third_party.sh"
|
||
ARCH="${TARGET_ARCH}"
|
||
info "target arch = ${ARCH}, drogon install = ${DROGON_INSTALL}"
|
||
|
||
# 2. 构建后端
|
||
step "2/5 构建后端 (${BUILD_TYPE}) ..."
|
||
cmake -S "${ROOT_DIR}/backend" -B "${PKG_BUILD}" -DCMAKE_BUILD_TYPE="${BUILD_TYPE}"
|
||
cmake --build "${PKG_BUILD}" -j"$(nproc)"
|
||
|
||
# 3. 构建前端
|
||
step "3/5 构建前端 ..."
|
||
( cd "${ROOT_DIR}/frontend/web_app"
|
||
[ -d node_modules ] || npm install --silent
|
||
npm run build )
|
||
|
||
# 4. 整理 runtime 目录
|
||
step "4/5 整理 runtime/wind_power/ ..."
|
||
# data/ 是服务端运行期持久化目录,不能随打包清理,否则保存的方案和图表配置会丢失。
|
||
mkdir -p "${RUNTIME_DIR}"/{data,uploads,logs}
|
||
rm -rf "${RUNTIME_DIR}/config" "${RUNTIME_DIR}/web" "${RUNTIME_DIR}/libs"
|
||
rm -f "${RUNTIME_DIR}/wind_server"
|
||
mkdir -p "${RUNTIME_DIR}"/{config,web,libs}
|
||
|
||
cp "${PKG_BUILD}/wind_server" "${RUNTIME_DIR}/"
|
||
cp -r "${ROOT_DIR}"/backend/config/* "${RUNTIME_DIR}/config/"
|
||
rsync -a --delete "${ROOT_DIR}/frontend/web_app/dist/" "${RUNTIME_DIR}/web/"
|
||
|
||
# 运行期动态库(部署机无需安装 Drogon)
|
||
cp "${DROGON_INSTALL}"/libs/libdrogon.so* "${RUNTIME_DIR}/libs/"
|
||
cp "${DROGON_INSTALL}"/libs/libtrantor.so* "${RUNTIME_DIR}/libs/"
|
||
# 只保留实际文件,去掉会随版本变化的开发符号链接末级
|
||
info "runtime libs: $(ls "${RUNTIME_DIR}/libs/")"
|
||
|
||
# 5. 可选:打包为 tar.gz
|
||
if [ "${PUBLISH}" = true ]; then
|
||
step "5/5 打包 publish/wind_power-${PACKAGE_VERSION}.tar.gz ..."
|
||
mkdir -p "${PUBLISH_DIR}"
|
||
tar -czf "${PUBLISH_DIR}/wind_power-${PACKAGE_VERSION}.tar.gz" -C "${ROOT_DIR}/runtime" wind_power
|
||
info "✅ ${PUBLISH_DIR}/wind_power-${PACKAGE_VERSION}.tar.gz"
|
||
else
|
||
info "跳过打包(加 --publish 可生成 tar.gz)"
|
||
fi
|
||
|
||
info "✅ 打包完成 → ${RUNTIME_DIR}"
|