部署时通过 install.sh 自动编译 marknb;日常更新用 upgrade.sh 拉代码并重编译。 Co-authored-by: Cursor <cursoragent@cursor.com>
75 lines
2.1 KiB
Bash
Executable File
75 lines
2.1 KiB
Bash
Executable File
#!/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"
|
|
}
|