README(659 行 → 176 行):只保留「这是什么」与「怎么部署/维护」——快速开始、首次安装、 升级(注明不需要 --force-recreate)、回滚(给真实存在的 sha-<commit> 标签)、备份与恢复 (整目录 tar,并说明 SQLite 开了 WAL 会短暂出现 -wal/-shm)、常见配置(端口/证书路径/ APACHE_* 六个变量与实际默认值)、许可与致谢。不再记录任何修复史或差异逐条。 所有具体值(镜像名、容器名、端口、卷路径、WEB_PORT/HTTPS_PORT、MPM 默认值、PHP/Laravel 版本、回滚标签)都对着源码与实机逐条核过。 构建与 CI: - .dockerignore 补 src/storage/logs/*(+ 保留 .gitignore 占位):本机开发日志会被 COPY src/ 带进镜像(含本机绝对路径与错误栈)。用一份 moby 语义 matcher 验过排除生效、 且不影响 fontawesome 字体等构建必需品。 - update-composer-lock.yaml:两处 curl … | php 改成与 Dockerfile 同款「先落盘 → 官方 installer.sig → 校验 96 位 hex → sha384sum -c - → 再执行 → 删临时文件」(哈希不写死); 注释里的 9.52.17 与「5 条公告」校正为 9.52.22 / 4 条(OSV 实查)。 - build-image.yaml:扩展自证那段的结论文案改成与实际一致(硬断言只有 pdo_sqlite, 其余仅打印供人工比对)——sqlite3 对本站不是必需,钉死它会在无害变动时误红。 - tools/vendor-upstream.sh:去掉不存在的 test/run.sh,改为 cd test && npm test。
88 lines
3.6 KiB
Bash
Executable File
88 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# ---------------------------------------------------------------------------
|
||
# 用途:把本仓库 src/ 换成上游另一个 commit 的完整快照(重新 vendor)。
|
||
#
|
||
# 什么时候用:上游万一又有提交、你想跟上去的时候。
|
||
# 注意:三个补丁文件(见 PATCHED 列表)不会被覆盖 —— 脚本会把上游版本存到
|
||
# /tmp 下并逐条打印 diff,需要你确认后把补丁重新贴到 src/ 里(或反过来弃用)。
|
||
# 跑完必须:① 更新 Dockerfile 里的 LSKY_COMMIT 与两道自证的 md5
|
||
# ② 重新生成 patches/ios-longpress.patch
|
||
# ③ 跑 test/ 的行为测试(cd test && npm test)
|
||
#
|
||
# 依赖:git、md5sum(需要能访问 github.com)
|
||
# 用法:bash tools/vendor-upstream.sh <上游 commit>
|
||
# ---------------------------------------------------------------------------
|
||
set -euo pipefail
|
||
cd "$(dirname "$0")/.."
|
||
|
||
COMMIT="${1:-}"
|
||
if [ -z "$COMMIT" ]; then
|
||
echo "用法:bash tools/vendor-upstream.sh <上游 commit>" >&2
|
||
exit 2
|
||
fi
|
||
case "$COMMIT" in
|
||
*[!0-9a-f]*) echo "看起来不像 commit SHA:$COMMIT" >&2; exit 2 ;;
|
||
esac
|
||
|
||
PATCHED="resources/js/context-js.js
|
||
public/js/context-js/context-js.js
|
||
resources/views/user/images.blade.php"
|
||
|
||
TMP="$(mktemp -d)"
|
||
trap 'rm -rf "$TMP"' EXIT
|
||
|
||
echo "[1/4] 拉取上游快照 ${COMMIT:0:9} …"
|
||
git init -q "$TMP/up"
|
||
git -C "$TMP/up" remote add origin https://github.com/lsky-org/lsky-pro.git
|
||
git -C "$TMP/up" fetch -q --depth 1 origin "$COMMIT"
|
||
git -C "$TMP/up" checkout -q FETCH_HEAD
|
||
REAL="$(git -C "$TMP/up" rev-parse HEAD)"
|
||
echo " 实际 commit = $REAL"
|
||
[ "$REAL" = "$COMMIT" ] || { echo "❌ 拉到的不是指定 commit,先停下" >&2; exit 1; }
|
||
|
||
# 源码已经 vendored 进仓库,src/ 下的改动就是产品本身 —— 擦除前必须确认都已提交,
|
||
# 否则"重新 vendor"会把它们静默抹掉(这是唯一一处不可逆操作)。
|
||
echo "[2/5] 安全检查:src/ 里不能有未提交的改动 …"
|
||
if [ -n "$(git status --porcelain -- src)" ]; then
|
||
echo "❌ src/ 下有未提交的改动,请先 commit 或 stash,否则跑下去会丢:" >&2
|
||
git status --short -- src >&2
|
||
exit 1
|
||
fi
|
||
echo " src/ 工作区干净 ✅"
|
||
|
||
echo "[3/5] 把补丁文件先留档(免得被覆盖)…"
|
||
mkdir -p "$TMP/patched"
|
||
for f in $PATCHED; do
|
||
cp -a "src/$f" "$TMP/patched/$(echo "$f" | tr / _)"
|
||
done
|
||
|
||
echo "[4/5] 替换 src/ …"
|
||
find src -mindepth 1 -maxdepth 1 -exec rm -rf {} +
|
||
tar -C "$TMP/up" --exclude=./.git -cf - . | tar -C src -xf -
|
||
for f in $PATCHED; do
|
||
cp -a "$TMP/patched/$(echo "$f" | tr / _)" "src/$f"
|
||
done
|
||
echo " 完成,src/ 现在 = 上游 $REAL + 我们的三个补丁文件"
|
||
|
||
echo
|
||
echo "[5/5] 上游新版里这三个文件与我们的补丁版本的差异(人工看,必要时重新贴补丁):"
|
||
for f in $PATCHED; do
|
||
echo "---- $f"
|
||
if diff -q "$TMP/up/$f" "src/$f" >/dev/null; then
|
||
echo " 上游与我们的一致(说明这是上游也改过的文件,补丁可能已合并/被覆盖,务必人工确认)"
|
||
else
|
||
diff -u "$TMP/up/$f" "src/$f" | head -80 || true
|
||
fi
|
||
done
|
||
|
||
cat <<EOF
|
||
|
||
接下来必须做的事:
|
||
1) 更新 Dockerfile 里的 ARG LSKY_COMMIT=$REAL
|
||
2) 更新「自证 1」(上游纯净性)与「自证 2」(补丁产物)里的 md5 期望值:
|
||
cd src && printf '%s\n' '...' | md5sum -c - # 生成/校验用这条
|
||
3) 重新生成 patches/ios-longpress.patch(bash tools/diff-vs-upstream.sh)
|
||
4) 跑行为测试:cd test && npm ci && npm test
|
||
5) 提交后看 CI:镜像自证 + 真容器三场景会给出最终结论
|
||
EOF
|