#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT_DIR" PORT="${PORT:-4000}" HOST="${HOST:-127.0.0.1}" BRANCH="${BRANCH:-main}" usage() { cat <<'EOF' 用法: ./scripts/blog.sh preview # 一键预览环境 ./scripts/blog.sh deploy # 一键构建 + 提交 + 推送到自建 git 可选环境变量: PORT=4000 预览端口 HOST=127.0.0.1 预览监听地址 BRANCH=main 推送分支 EOF } preview() { echo "[preview] clean + start hexo server on ${HOST}:${PORT}" npx hexo clean exec npx hexo server -i "${HOST}" -p "${PORT}" } deploy() { echo "[deploy] clean + generate" npx hexo clean npx hexo generate echo "[deploy] git add" git add -A if git diff --cached --quiet; then echo "[deploy] 没有可提交的改动,跳过 commit/push" exit 0 fi if git diff --cached --quiet --ignore-submodules --exit-code; then : # keep shellcheck calm fi if ! git rev-parse --verify HEAD >/dev/null 2>&1; then git commit -m "chore: deploy blog" else git commit -m "chore: deploy blog $(date '+%F %T')" fi echo "[deploy] push origin ${BRANCH}" git push origin "${BRANCH}" } case "${1:-}" in preview) preview ;; deploy) deploy ;; -h|--help|help|"") usage ;; *) echo "未知命令: $1" >&2 usage exit 1 ;; esac