bdd30f0a88
- deps.py: _create_redis_client 增加同步 ping 校验,Redis 不可达时正确降级为内存模式 - main.py: lifespan 复用 deps 的 UserStore 单例,避免 admin 与 API 请求实例不一致 - 前端: 强制改密弹窗(must_change_password 用户)、兼容新旧登录返回格式、markPasswordChanged - 新增 NAS SSH 部署脚本与批处理测试;gitignore 前端构建产物
49 lines
1.8 KiB
Bash
Executable File
49 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# =============================================================================
|
|
# 安装本地 git pre-push 门禁
|
|
#
|
|
# 作用:任何「推送到 origin(NAS)」的操作前,先跑后端测试;若前端有变化,
|
|
# 先在本地预构建一次。任一环节失败则阻断推送,确保坏代码绝不上线。
|
|
#
|
|
# 说明:
|
|
# - deploy.sh 推送前会设 QMDS_SKIP_PREPUSH=1,避免与自身校验重复跑。
|
|
# - 仅对 origin 远端生效,推其他远端不受影响。
|
|
#
|
|
# 卸载:rm .git/hooks/pre-push
|
|
# =============================================================================
|
|
set -e
|
|
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
HOOK="$ROOT/.git/hooks/pre-push"
|
|
mkdir -p "$(dirname "$HOOK")"
|
|
|
|
cat > "$HOOK" <<'HOOK_EOF'
|
|
#!/usr/bin/env bash
|
|
# QMDSearch pre-push 校验门禁(由 scripts/install-hooks.sh 安装)
|
|
REMOTE="$1"
|
|
# 仅对 NAS 远端 (origin) 做校验;且 deploy.sh 已设 QMDS_SKIP_PREPUSH 时跳过
|
|
if [[ "$REMOTE" != "origin" ]]; then exit 0; fi
|
|
if [[ -n "${QMDS_SKIP_PREPUSH:-}" ]]; then exit 0; fi
|
|
|
|
echo "[pre-push] 推送前校验后端测试..."
|
|
if ! uv run pytest -q --no-header 2>&1 | tail -n 20; then
|
|
echo "[pre-push] 测试失败,已阻断推送。请先修复后再 push。" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# 暂存区若含前端变化,本地先预构建一次,避免推到 NAS 才翻车
|
|
if git diff --cached --name-only | grep -qE '^frontend/'; then
|
|
echo "[pre-push] 检测到前端变化,本地预构建..."
|
|
if ! (cd frontend && npm ci --no-audit --no-fund && npm run build); then
|
|
echo "[pre-push] 前端构建失败,已阻断推送。" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "[pre-push] 校验通过,允许推送。"
|
|
HOOK_EOF
|
|
|
|
chmod +x "$HOOK"
|
|
echo "已安装 pre-push 门禁 -> $HOOK"
|
|
echo "如需卸载: rm $HOOK"
|