fix(deploy): harden webhook auto-release for CRLF, git reset, and prisma order
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+18
-2
@@ -13,7 +13,7 @@ LOG_FILE="${DEPLOY_LOG_FILE:-/var/log/dukang/deploy.log}"
|
|||||||
|
|
||||||
if [[ -f "$ENV_FILE" ]]; then
|
if [[ -f "$ENV_FILE" ]]; then
|
||||||
# shellcheck disable=SC1090
|
# shellcheck disable=SC1090
|
||||||
source "$ENV_FILE"
|
source <(sed 's/\r$//' "$ENV_FILE")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p "$(dirname "$LOG_FILE")"
|
mkdir -p "$(dirname "$LOG_FILE")"
|
||||||
@@ -49,7 +49,23 @@ if [[ "$LOCAL_SHA" == "$REMOTE_SHA" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
log "PULL $LOCAL_SHA -> $REMOTE_SHA"
|
log "PULL $LOCAL_SHA -> $REMOTE_SHA"
|
||||||
git pull --ff-only "$GIT_REMOTE" "$GIT_BRANCH"
|
|
||||||
|
# 保留生产密钥,避免 reset 覆盖
|
||||||
|
ENV_BACKUP="$(mktemp)"
|
||||||
|
API_ENV_BACKUP="$(mktemp)"
|
||||||
|
API_ENV_PROD_BACKUP="$(mktemp)"
|
||||||
|
cp "$ENV_FILE" "$ENV_BACKUP" 2>/dev/null || true
|
||||||
|
cp "$APP_ROOT/server/dukang-api/.env" "$API_ENV_BACKUP" 2>/dev/null || true
|
||||||
|
cp "$APP_ROOT/server/dukang-api/.env.production" "$API_ENV_PROD_BACKUP" 2>/dev/null || true
|
||||||
|
|
||||||
|
git checkout "$GIT_BRANCH"
|
||||||
|
git reset --hard "$GIT_REMOTE/$GIT_BRANCH"
|
||||||
|
|
||||||
|
cp "$ENV_BACKUP" "$ENV_FILE" 2>/dev/null || true
|
||||||
|
cp "$API_ENV_BACKUP" "$APP_ROOT/server/dukang-api/.env" 2>/dev/null || true
|
||||||
|
cp "$API_ENV_PROD_BACKUP" "$APP_ROOT/server/dukang-api/.env.production" 2>/dev/null || true
|
||||||
|
rm -f "$ENV_BACKUP" "$API_ENV_BACKUP" "$API_ENV_PROD_BACKUP"
|
||||||
|
sed -i 's/\r$//' "$ENV_FILE" 2>/dev/null || true
|
||||||
|
|
||||||
# 修复 Windows 换行
|
# 修复 Windows 换行
|
||||||
find "$APP_ROOT/deploy" -maxdepth 1 -name '*.sh' -exec sed -i 's/\r$//' {} + 2>/dev/null || true
|
find "$APP_ROOT/deploy" -maxdepth 1 -name '*.sh' -exec sed -i 's/\r$//' {} + 2>/dev/null || true
|
||||||
|
|||||||
@@ -45,15 +45,8 @@ export NODE_OPTIONS="${NODE_OPTIONS:---max-old-space-size=2048}"
|
|||||||
pnpm approve-builds --all 2>/dev/null || true
|
pnpm approve-builds --all 2>/dev/null || true
|
||||||
pnpm install --frozen-lockfile 2>/dev/null || pnpm install
|
pnpm install --frozen-lockfile 2>/dev/null || pnpm install
|
||||||
|
|
||||||
if [[ "$SKIP_BUILD" == false ]]; then
|
|
||||||
echo "==> 3. 构建"
|
|
||||||
pnpm build
|
|
||||||
else
|
|
||||||
echo "==> 3. 跳过构建"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$SKIP_DB" == false ]]; then
|
if [[ "$SKIP_DB" == false ]]; then
|
||||||
echo "==> 4. 数据库 schema 同步"
|
echo "==> 3. 数据库 schema 同步(构建前)"
|
||||||
cd "$APP_ROOT/server/dukang-api"
|
cd "$APP_ROOT/server/dukang-api"
|
||||||
pnpm prisma:generate
|
pnpm prisma:generate
|
||||||
if [[ "$DB_PUSH_ACCEPT_DATA_LOSS" == true ]]; then
|
if [[ "$DB_PUSH_ACCEPT_DATA_LOSS" == true ]]; then
|
||||||
@@ -65,8 +58,16 @@ if [[ "$SKIP_DB" == false ]]; then
|
|||||||
echo "==> 执行 seed"
|
echo "==> 执行 seed"
|
||||||
pnpm prisma:seed
|
pnpm prisma:seed
|
||||||
fi
|
fi
|
||||||
|
cd "$APP_ROOT"
|
||||||
else
|
else
|
||||||
echo "==> 4. 跳过数据库"
|
echo "==> 3. 跳过数据库"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$SKIP_BUILD" == false ]]; then
|
||||||
|
echo "==> 4. 构建"
|
||||||
|
pnpm build
|
||||||
|
else
|
||||||
|
echo "==> 4. 跳过构建"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "==> 5. 重启 PM2"
|
echo "==> 5. 重启 PM2"
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ if [[ ! -f "$ENV_FILE" ]]; then
|
|||||||
else
|
else
|
||||||
echo " 保留已有 $ENV_FILE"
|
echo " 保留已有 $ENV_FILE"
|
||||||
fi
|
fi
|
||||||
|
sed -i 's/\r$//' "$ENV_FILE" 2>/dev/null || true
|
||||||
|
|
||||||
echo "==> 3. Nginx webhook 路由"
|
echo "==> 3. Nginx webhook 路由"
|
||||||
HOOK_CONF="$DEPLOY_DIR/nginx-deploy-webhook.conf"
|
HOOK_CONF="$DEPLOY_DIR/nginx-deploy-webhook.conf"
|
||||||
|
|||||||
Reference in New Issue
Block a user