用 marknb 替换 Python markdown,并添加一键安装与升级脚本。

部署时通过 install.sh 自动编译 marknb;日常更新用 upgrade.sh 拉代码并重编译。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
cnb
2026-07-05 11:48:18 +08:00
co-authored by Cursor
parent 0333ab1fc1
commit cf8eba082f
8 changed files with 227 additions and 25 deletions
+74
View File
@@ -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"
}