复现已有算法

This commit is contained in:
cloud
2026-07-14 15:43:18 +08:00
parent abebd2a683
commit 50b8111fd9
860 changed files with 182250 additions and 18 deletions
Executable
+89
View File
@@ -0,0 +1,89 @@
#!/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/ ..."
rm -rf "${RUNTIME_DIR}"
mkdir -p "${RUNTIME_DIR}"/{config,web,libs,logs}
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}"