87 lines
2.8 KiB
Bash
Executable File
87 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
||
# ============================================================
|
||
# 打包发布产物:opendance-web-v0.1.0.tar.gz
|
||
#
|
||
# 产物结构(文档 §4.4):
|
||
# web-server/ NestJS 源码 + 构建产物
|
||
# admin/ React 管理端构建产物
|
||
# deploy/ docker-compose.yml / install.sh / .env.example
|
||
# contracts/ 当前版本契约快照
|
||
# THIRD_PARTY.md 开源项目声明
|
||
# README.txt 使用说明
|
||
#
|
||
# 用法:./scripts/package-release.sh [版本号]
|
||
# ============================================================
|
||
set -euo pipefail
|
||
|
||
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||
cd "$REPO_ROOT"
|
||
|
||
VERSION="${1:-0.1.0}"
|
||
NAME="opendance-web-v${VERSION}"
|
||
OUT_DIR="$REPO_ROOT/dist-release"
|
||
STAGE="$OUT_DIR/$NAME"
|
||
|
||
log() { printf '\033[1;34m[package]\033[0m %s\n' "$*"; }
|
||
die() { printf '\033[1;31m[error]\033[0m %s\n' "$*" >&2; exit 1; }
|
||
|
||
# ---------- 1. 契约一致性 ----------
|
||
log "校验契约版本一致性..."
|
||
( cd web-server && node scripts/check-contracts.mjs )
|
||
|
||
# ---------- 2. 后端构建 ----------
|
||
log "构建后端..."
|
||
( cd web-server && npm run build )
|
||
|
||
# ---------- 3. 管理端构建 ----------
|
||
if [ -d web-server/admin/node_modules ]; then
|
||
log "构建管理端..."
|
||
( cd web-server/admin && npm run build )
|
||
else
|
||
log "警告:web-server/admin/node_modules 不存在,跳过管理端构建(产物将缺少 admin/)"
|
||
fi
|
||
|
||
# ---------- 4. 组织产物目录 ----------
|
||
log "整理产物目录 $STAGE ..."
|
||
rm -rf "$STAGE"
|
||
mkdir -p "$STAGE"
|
||
|
||
# 后端源码 + 构建产物(排除依赖、测试、存储、密钥)
|
||
rsync -a --delete \
|
||
--exclude 'node_modules' \
|
||
--exclude 'storage' \
|
||
--exclude 'data' \
|
||
--exclude '.env' \
|
||
--exclude '.env.local' \
|
||
--exclude 'admin' \
|
||
web-server/ "$STAGE/web-server/"
|
||
|
||
# 管理端构建产物(文档要求 admin/ 与 web-server/ 平级)
|
||
if [ -d web-server/admin/dist ]; then
|
||
mkdir -p "$STAGE/admin"
|
||
cp -r web-server/admin/dist/. "$STAGE/admin/"
|
||
cp web-server/admin/nginx.conf "$STAGE/admin/" 2>/dev/null || true
|
||
else
|
||
log "警告:未找到 web-server/admin/dist,产物不含 admin/"
|
||
fi
|
||
|
||
cp -r deploy "$STAGE/deploy"
|
||
rm -f "$STAGE/deploy/.env"
|
||
cp -r contracts "$STAGE/contracts"
|
||
cp THIRD_PARTY.md README.txt project.yaml DSH.md "$STAGE/"
|
||
cp -r tasks "$STAGE/tasks"
|
||
|
||
# ---------- 5. 打包 ----------
|
||
log "生成压缩包..."
|
||
( cd "$OUT_DIR" && tar -czf "$NAME.tar.gz" "$NAME" )
|
||
|
||
log "完成:$OUT_DIR/$NAME.tar.gz"
|
||
echo
|
||
echo "产物内容:"
|
||
# 先把清单读入变量,避免 tar 因管道提前关闭(SIGPIPE)而误报 "write error"
|
||
MANIFEST=$(tar -tzf "$OUT_DIR/$NAME.tar.gz")
|
||
echo "$MANIFEST" | sed -n '1,20p'
|
||
echo " ...(共 $(echo "$MANIFEST" | wc -l) 项,$(du -h "$OUT_DIR/$NAME.tar.gz" | cut -f1))"
|
||
echo
|
||
echo "部署方式:解压后进入 deploy/,复制 .env.example 为 .env 并填写数据库信息,执行 ./install.sh"
|