aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/build.sh
diff options
context:
space:
mode:
authorshu <nvcsadjkojf@outlook.com>2026-08-19 15:56:06 +0800
committershu <nvcsadjkojf@outlook.com>2026-08-19 15:56:06 +0800
commitca1a4a31706d0c03673fe4c414c645ed826b21c6 (patch)
treec412265a19dd4694c39aac65b6e1a8903a513978 /scripts/build.sh
parent490d41f154615a52734f117d7d7bda5a9331e303 (diff)
精简 Wiki 构建与运行方式
将浏览器端工具整理为 utilities 插件,移除 Docker、Org GTD 和 files API,并补充单文件构建及 Node.js 运行入口。
Diffstat (limited to 'scripts/build.sh')
-rwxr-xr-xscripts/build.sh66
1 files changed, 66 insertions, 0 deletions
diff --git a/scripts/build.sh b/scripts/build.sh
new file mode 100755
index 0000000..ac7651f
--- /dev/null
+++ b/scripts/build.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+set -eu
+
+SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
+PROJECT_DIR=$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)
+OUTPUT_DIR="$PROJECT_DIR/dist"
+OUTPUT_FILE="$OUTPUT_DIR/tdwiki.html"
+TIDDLYWIKI_BIN=${TIDDLYWIKI_BIN:-tiddlywiki}
+BUILD_TMP_DIR=
+BUILD_WIKI_DIR=
+
+cleanup() {
+ if [ -n "$BUILD_TMP_DIR" ] && [ -d "$BUILD_TMP_DIR" ]; then
+ rm -rf -- "$BUILD_TMP_DIR"
+ fi
+}
+
+prepare_build_wiki() {
+ BUILD_TMP_DIR=$(mktemp -d "${TMPDIR:-/tmp}/tdwiki-build.XXXXXX")
+ BUILD_WIKI_DIR="$BUILD_TMP_DIR/wiki"
+ mkdir -p "$BUILD_WIKI_DIR"
+ cp -R "$PROJECT_DIR/tiddlers" "$BUILD_WIKI_DIR/tiddlers"
+ cp -R "$PROJECT_DIR/plugins" "$BUILD_WIKI_DIR/plugins"
+
+ node -e '
+const fs = require("fs");
+const source = process.argv[1];
+const destination = process.argv[2];
+const info = JSON.parse(fs.readFileSync(source,"utf8"));
+const serverPlugins = new Set([
+ "tiddlywiki/filesystem",
+ "tiddlywiki/tiddlyweb"
+]);
+info.plugins = (info.plugins || []).filter(name => !serverPlugins.has(name));
+fs.writeFileSync(destination,JSON.stringify(info,null,4) + "\n");
+' "$PROJECT_DIR/tiddlywiki.info" "$BUILD_WIKI_DIR/tiddlywiki.info"
+}
+
+verify_output() {
+ node -e '
+const fs = require("fs");
+const filename = process.argv[1];
+const html = fs.readFileSync(filename,"utf8");
+
+for(const title of ["$:/plugins/local/utilities"]) {
+ if(!html.includes(`"title":"${title}"`)) {
+ throw new Error(`single-file wiki is missing ${title}`);
+ }
+}
+
+' "$OUTPUT_FILE"
+}
+
+trap cleanup EXIT HUP INT TERM
+
+prepare_build_wiki
+mkdir -p "$OUTPUT_DIR"
+
+"$TIDDLYWIKI_BIN" "$BUILD_WIKI_DIR" \
+ --output "$OUTPUT_DIR" \
+ --rendertiddler '$:/core/save/all' \
+ tdwiki.html text/plain
+
+verify_output
+printf 'Built %s\n' "$OUTPUT_FILE"