用 marknb 替换 Python markdown,并添加一键安装与升级脚本。
部署时通过 install.sh 自动编译 marknb;日常更新用 upgrade.sh 拉代码并重编译。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Executable
+74
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env bash
|
||||
# marknb / py-blog 公共构建逻辑(供 install.sh、upgrade.sh 引用)
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
VENDOR="$ROOT/vendor/marknb"
|
||||
MARKNB_REPO="${MARKNB_REPO:-https://cnb.cool/whcself/marknb.git}"
|
||||
MARKNB_SRC="$VENDOR/src"
|
||||
LIB_PATH="$VENDOR/libmarknb.so"
|
||||
|
||||
apt_install() {
|
||||
if ! command -v apt-get >/dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
local pkgs=(gcc make git python3 python3-pip python3-venv)
|
||||
if command -v sudo >/dev/null 2>&1 && [ "$(id -u)" -ne 0 ]; then
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -y --no-install-recommends "${pkgs[@]}"
|
||||
else
|
||||
apt-get update -qq
|
||||
apt-get install -y --no-install-recommends "${pkgs[@]}"
|
||||
fi
|
||||
}
|
||||
|
||||
build_marknb() {
|
||||
mkdir -p "$VENDOR"
|
||||
if [ -d "$MARKNB_SRC/.git" ]; then
|
||||
git -C "$MARKNB_SRC" fetch --depth 1 origin main
|
||||
git -C "$MARKNB_SRC" checkout -f main
|
||||
git -C "$MARKNB_SRC" reset --hard origin/main
|
||||
else
|
||||
git clone --depth 1 --branch main "$MARKNB_REPO" "$MARKNB_SRC"
|
||||
fi
|
||||
|
||||
local srcs=(
|
||||
"$MARKNB_SRC/src/fsm.c"
|
||||
"$MARKNB_SRC/src/table_stats.c"
|
||||
"$MARKNB_SRC/src/line_index.c"
|
||||
"$MARKNB_SRC/src/render.c"
|
||||
"$MARKNB_SRC/src/marknb.c"
|
||||
"$MARKNB_SRC/src/compat_cmark.c"
|
||||
)
|
||||
gcc -std=c11 -Wall -Wextra -O3 -fPIC -shared \
|
||||
-I"$MARKNB_SRC/include" -I"$MARKNB_SRC/src" \
|
||||
"${srcs[@]}" -lm -o "$LIB_PATH"
|
||||
}
|
||||
|
||||
install_python() {
|
||||
if [ ! -d "$ROOT/venv" ]; then
|
||||
python3 -m venv "$ROOT/venv"
|
||||
fi
|
||||
"$ROOT/venv/bin/pip" install -U pip
|
||||
"$ROOT/venv/bin/pip" install -r "$ROOT/requirements.txt"
|
||||
}
|
||||
|
||||
upgrade_python() {
|
||||
if [ ! -d "$ROOT/venv" ]; then
|
||||
echo "未找到 venv,改为执行 install.sh" >&2
|
||||
exec bash "$ROOT/scripts/install.sh"
|
||||
fi
|
||||
"$ROOT/venv/bin/pip" install -U pip
|
||||
"$ROOT/venv/bin/pip" install -U -r "$ROOT/requirements.txt"
|
||||
}
|
||||
|
||||
pull_py_blog() {
|
||||
if [ ! -d "$ROOT/.git" ]; then
|
||||
echo "当前目录不是 git 仓库,跳过 py-blog 代码拉取"
|
||||
return 0
|
||||
fi
|
||||
local branch
|
||||
branch="$(git -C "$ROOT" rev-parse --abbrev-ref HEAD)"
|
||||
git -C "$ROOT" fetch origin "$branch"
|
||||
git -C "$ROOT" merge --ff-only "origin/$branch"
|
||||
}
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
# 一键安装 py-blog 依赖:编译 marknb 动态库 + Python venv
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
# shellcheck source=common.sh
|
||||
source "$ROOT/scripts/common.sh"
|
||||
|
||||
echo "==> 安装系统构建依赖(如有 apt)"
|
||||
apt_install
|
||||
|
||||
echo "==> 拉取并编译 marknb → $LIB_PATH"
|
||||
build_marknb
|
||||
|
||||
echo "==> 安装 Python 依赖到 venv"
|
||||
install_python
|
||||
|
||||
echo ""
|
||||
echo "安装完成。"
|
||||
echo " marknb: $LIB_PATH"
|
||||
echo " 启动: source venv/bin/activate && python blog.py"
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
# 升级已部署的 py-blog:拉取代码、重编译 marknb、更新 Python 依赖
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
# shellcheck source=common.sh
|
||||
source "$ROOT/scripts/common.sh"
|
||||
|
||||
echo "==> 拉取 py-blog 最新代码"
|
||||
pull_py_blog
|
||||
|
||||
echo "==> 重新编译 marknb → $LIB_PATH"
|
||||
build_marknb
|
||||
|
||||
echo "==> 升级 Python 依赖"
|
||||
upgrade_python
|
||||
|
||||
echo ""
|
||||
echo "升级完成。"
|
||||
echo " marknb: $LIB_PATH"
|
||||
echo " 若 blog.py 正在运行,请重启服务使变更生效。"
|
||||
Reference in New Issue
Block a user