#!/bin/bash # 服务器侧同步文档站:拉取最新代码、构建 MkDocs、同步到站点目录 set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" DEPLOY_ROOT="${DEPLOY_ROOT:-/var/www/docs.xuqinmin.com}" SITE_DIR="$ROOT_DIR/site" TARGET_DIR="$DEPLOY_ROOT/site" VENV_DIR="${VENV_DIR:-$ROOT_DIR/.venv-docs}" if ! command -v python3 >/dev/null 2>&1; then echo "错误: 未检测到 python3" exit 1 fi if ! command -v rsync >/dev/null 2>&1; then echo "错误: 未检测到 rsync" exit 1 fi mkdir -p "$TARGET_DIR" UPDATED=1 if [ -d "$ROOT_DIR/.git" ]; then BEFORE_HEAD="$(git -C "$ROOT_DIR" rev-parse HEAD 2>/dev/null || true)" git -C "$ROOT_DIR" pull --ff-only --quiet AFTER_HEAD="$(git -C "$ROOT_DIR" rev-parse HEAD 2>/dev/null || true)" if [ -n "$BEFORE_HEAD" ] && [ "$BEFORE_HEAD" = "$AFTER_HEAD" ]; then UPDATED=0 fi fi if [ ! -d "$VENV_DIR" ]; then python3 -m venv "$VENV_DIR" fi if [ ! -x "$VENV_DIR/bin/mkdocs" ]; then "$VENV_DIR/bin/pip" install --upgrade pip >/dev/null "$VENV_DIR/bin/pip" install mkdocs-material >/dev/null fi if [ "$UPDATED" -eq 0 ] && [ -d "$SITE_DIR" ]; then echo "仓库无更新,跳过构建。" exit 0 fi echo "开始构建设计文档站..." "$VENV_DIR/bin/mkdocs" build --clean --strict --site-dir "$SITE_DIR" echo "同步到服务器目录..." rsync -a --delete "$SITE_DIR"/ "$TARGET_DIR"/ echo "同步完成: $TARGET_DIR"