上一版是「钉死上游 commit、构建时拉 archive、再用 overlay/ 叠加补丁」。但上游已明示停止维护 (README 里 2024-12-28 起挂着警告:「开源版本已停止维护,不再进行新特性更新和 bug 修复」), 所以把源码放进本仓库:构建不再依赖 github.com/lsky-org 长期可用,之后要改 PHP 代码直接改 src/ 提交即可,不必再维护叠加机制。 1) 上游 pin:911275c(2023-05-16)→ 38d52c4609eb85236b45ac75acac2ced55174953(2025-11-24)。 中间 32 个提交只动了 9 个文件,**数据库迁移 0 处**,所以升级不碰站点数据(SQLite 结构不变)。 吃进三个真实修复:图片格式转换时不同图片共用同一个临时文件(并发上传会变成同一张图, 默认配置即触发)、加水印后丢质量参数、SVG 支持;另有 laravel 9.52.4→9.52.17、 phpseclib 3.0.19→3.0.43、commonmark 2.3.9→2.6.0、aws-sdk-php 等一串依赖安全升级。 2) vendored 源码:src/ = 上游 38d52c46 的完整树(304 个文件、8.1MB,按 commit 精确复制, 文件数与上游 git 树一致)。我们的三个补丁文件就地打上补丁,取消 overlay/。 3) Dockerfile:去掉 curl 下载 archive 那一层,改成 COPY src/;自证拆成两组 —— 「自证 1 上游纯净性」ImageService.php / convention.php / public/index.php / routes/web.php / composer.lock 必须等于上游 md5;「自证 2 补丁产物」三个补丁文件 md5 + 关键标记 grep。 快照被误改、补丁丢了,构建期就拦下。 4) 新增维护脚本:tools/diff-vs-upstream.sh(拉上游快照做全树对比 + 白名单校验:除三个补丁文件 外不许有别的改动,同时可重生成 patches/ios-longpress.patch)、tools/vendor-upstream.sh (换 pin 时重新 vendor,自动保留补丁文件并打印上游侧差异)。 5) 测试与文档:jsdom 测试默认路径改指 src/public/js/context-js/context-js.js,新增两条结构自检 (两份 context-js.js 必须一致、blade 必须带 ?v= 版本串)→ 70/70 通过;README 重写 「代码在仓库哪里、怎么改、怎么升 pin」,并修正许可证说明(应用 GPL-3.0 / 打包 AGPL-3.0)。 数据安全逻辑一字未动:entrypoint.sh 仍是「版本标记不一致才同步」,排除 .env / storage / database / bootstrap/cache / public/i。换镜像后容器自动把新代码同步进卷。
70 lines
3.1 KiB
Bash
Executable File
70 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# ---------------------------------------------------------------------------
|
||
# 用途:把本仓库 src/ 与上游官方快照做**全树对比**,回答两个问题:
|
||
# 1) 我们相对上游到底改了哪几个文件、改了什么(默认就打印这个)
|
||
# 2) src/ 里有没有"手滑改动" —— 除了白名单里那三个补丁文件之外还动了别处就报警
|
||
#
|
||
# 依赖:git(需要能访问 github.com;上游已停更,平时不需要跑这个脚本)
|
||
# 用法:bash tools/diff-vs-upstream.sh [commit] # 默认用 Dockerfile 里的 LSKY_COMMIT
|
||
# ---------------------------------------------------------------------------
|
||
set -euo pipefail
|
||
cd "$(dirname "$0")/.."
|
||
|
||
COMMIT="${1:-$(grep -oE '^ARG LSKY_COMMIT=[0-9a-f]+' Dockerfile | cut -d= -f2)}"
|
||
if [ -z "$COMMIT" ]; then
|
||
echo "用法:bash tools/diff-vs-upstream.sh <上游 commit>" >&2
|
||
exit 2
|
||
fi
|
||
|
||
# 白名单:这三个文件是我们有意修改的补丁产物(见 README / patches/ios-longpress.patch)
|
||
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/3] 拉取上游快照 ${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
|
||
|
||
echo "[2/3] 全树对比(只列有差异的文件)…"
|
||
diff -rq --exclude=.git "$TMP/up" src > "$TMP/raw.txt" 2>&1 || true
|
||
|
||
# 分类:内容不同 / 只在 src(我们新增)/ 只在上游(我们删了)
|
||
DIFFERS=$(grep -oE '^Files .* and src/.* differ$' "$TMP/raw.txt" | sed -E 's#^Files .* and (src/.*) differ$#\1#' | sort || true)
|
||
ONLY_SRC=$(grep -oE "^Only in src.*: .*$" "$TMP/raw.txt" | sed -E 's#^Only in (src[^:]*): (.*)$#\1/\2#' | sed 's#^\./##' | sort || true)
|
||
ONLY_UP=$(grep -oE "^Only in .*lsky-pro.*: .*$" "$TMP/raw.txt" | grep -v 'Only in src' | sed -E 's#^Only in [^:]*: (.*)$#\1#' | sort || true)
|
||
|
||
echo
|
||
echo "=== 内容不同的文件(预期只有白名单那三项)==="
|
||
if [ -n "$DIFFERS" ]; then echo "$DIFFERS"; else echo "(无)"; fi
|
||
|
||
if [ -n "$ONLY_SRC" ] || [ -n "$ONLY_UP" ]; then
|
||
echo
|
||
echo "=== 只在一边存在的文件 ==="
|
||
[ -n "$ONLY_SRC" ] && echo "$ONLY_SRC" | sed 's/^/ 只在 src\/:/'
|
||
[ -n "$ONLY_UP" ] && echo "$ONLY_UP" | sed 's/^/ 只在上游:/'
|
||
fi
|
||
|
||
echo
|
||
echo "=== 每个文件的详细 diff ==="
|
||
for f in $DIFFERS; do
|
||
echo "---- $f"
|
||
diff -u "$TMP/up/${f#src/}" "$f" || true
|
||
done
|
||
|
||
echo
|
||
echo "[3/3] 白名单校验:"
|
||
UNEXPECTED="$(comm -23 <(printf '%s\n' "$DIFFERS") <(printf '%s\n' "$PATCHED" | sed 's#^#src/#' | sort) || true)"
|
||
if [ -n "$UNEXPECTED" ]; then
|
||
echo " ❌ 除了预期补丁,还动了别的文件(要么是有意的、请更新白名单,要么是手滑):"
|
||
printf '%s\n' "$UNEXPECTED" | sed 's/^/ /'
|
||
exit 1
|
||
fi
|
||
echo " ✅ src/ 相对上游的改动 = 预期补丁三项,没有额外改动"
|
||
echo
|
||
echo "提示:把上面的 diff 存进 patches/ios-longpress.patch 即可(patch 文件只是「给人看」的存档,不参与构建)。"
|