feat: 流水线更新,兼容多次commit
All checks were successful
缓存序列化结构检查 / cache-schema-check (push) Has been skipped
All checks were successful
缓存序列化结构检查 / cache-schema-check (push) Has been skipped
This commit is contained in:
@@ -15,14 +15,19 @@ jobs:
|
||||
if: ${{ gitea.ref != 'refs/heads/pre' && gitea.ref != 'refs/heads/dev' && gitea.ref != 'refs/heads/master-2.0' }}
|
||||
runs-on: jdk11
|
||||
steps:
|
||||
# 浅克隆:仅需 HEAD 与 HEAD~1,避免全量拉取
|
||||
# 指定 --branch 确保非默认分支推送时也能正确检出 gitea.sha
|
||||
# 浅克隆当前 tip;对比基准用 push before(覆盖一次 push 的多 commit 累计 diff)
|
||||
# 不必全量历史:只需能 git show before / after 两边的文件内容
|
||||
- name: 检出代码
|
||||
run: |
|
||||
git config --global http.sslVerify false
|
||||
git clone --depth 2 --single-branch --branch "${{ gitea.ref_name }}" \
|
||||
"https://${{ gitea.token }}@git.niujiekeji.com/${{ gitea.repository }}.git" .
|
||||
git checkout -B "${{ gitea.ref_name }}" "${{ gitea.sha }}"
|
||||
REPO_URL="https://${{ gitea.token }}@git.niujiekeji.com/${{ gitea.repository }}.git"
|
||||
BRANCH="${{ gitea.ref_name }}"
|
||||
NEW_SHA="${{ gitea.sha }}"
|
||||
|
||||
git clone --depth 1 --single-branch --branch "${BRANCH}" "${REPO_URL}" .
|
||||
git checkout -B "${BRANCH}" "${NEW_SHA}"
|
||||
|
||||
echo "${NEW_SHA}" > /tmp/cache-schema-new-sha.txt
|
||||
|
||||
- name: 检查配置文件
|
||||
run: |
|
||||
@@ -74,25 +79,81 @@ jobs:
|
||||
echo "Java: $(java -version 2>&1 | head -1)"
|
||||
|
||||
- name: 执行缓存序列化结构检测
|
||||
env:
|
||||
# push 前 tip;新分支首次 push 时为全 0。workflow_dispatch 可能为空,下方会回退。
|
||||
PUSH_BEFORE: ${{ gitea.event.before }}
|
||||
run: |
|
||||
if [ -f /tmp/cache-schema-check.skip ]; then
|
||||
echo "总开关已关闭,跳过检测"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
OLD_SHA=$(git rev-parse HEAD~1 2>/dev/null || echo "")
|
||||
if [ -z "$OLD_SHA" ]; then
|
||||
echo "首次提交,跳过检测"
|
||||
NEW_SHA=$(cat /tmp/cache-schema-new-sha.txt)
|
||||
OLD_SHA="${PUSH_BEFORE}"
|
||||
|
||||
# 新分支首次 push(before 全 0)→ 跳过
|
||||
if [ -z "$OLD_SHA" ] || echo "$OLD_SHA" | grep -Eq '^0+$'; then
|
||||
# 手动触发:无 before,回退为 HEAD~1(加深 1 层后取父提交)
|
||||
if [ "${{ gitea.event_name }}" = "workflow_dispatch" ]; then
|
||||
git fetch --deepen 1 || true
|
||||
OLD_SHA=$(git rev-parse HEAD~1 2>/dev/null || echo "")
|
||||
if [ -z "$OLD_SHA" ]; then
|
||||
echo "手动触发且无父提交,跳过检测"
|
||||
exit 0
|
||||
fi
|
||||
echo "workflow_dispatch:无 push before,回退使用 HEAD~1=${OLD_SHA}"
|
||||
else
|
||||
echo "新分支首次 push(before 为空/全 0),跳过检测"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$OLD_SHA" = "$NEW_SHA" ]; then
|
||||
echo "before 与 after 相同,无需检测"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
COMMIT_TIME=$(git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S')
|
||||
# 确保 before 提交对象可读(按 SHA 浅取,无需全量历史)
|
||||
ensure_commit() {
|
||||
local sha="$1"
|
||||
if git cat-file -e "${sha}^{commit}" 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
echo "本地缺少 ${sha},尝试按 SHA 浅取…"
|
||||
if git fetch --depth 1 origin "${sha}"; then
|
||||
git cat-file -e "${sha}^{commit}" 2>/dev/null && return 0
|
||||
fi
|
||||
# 兜底:逐步 deepen(应对部分服务端不允许直接 fetch SHA)
|
||||
for d in 10 30 50 100; do
|
||||
echo "deepen ${d}…"
|
||||
git fetch --deepen "${d}" || true
|
||||
if git cat-file -e "${sha}^{commit}" 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
if ! ensure_commit "$OLD_SHA"; then
|
||||
echo "错误: 无法获取 push 前 tip ${OLD_SHA},请检查 shallow/权限"
|
||||
exit 2
|
||||
fi
|
||||
if ! ensure_commit "$NEW_SHA"; then
|
||||
echo "错误: 无法解析当前 tip ${NEW_SHA}"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
echo "对比区间: ${OLD_SHA} → ${NEW_SHA}"
|
||||
COMMIT_COUNT=$(git rev-list --count "${OLD_SHA}..${NEW_SHA}" 2>/dev/null || echo "?")
|
||||
echo "本次 push 累计 commit 数(约): ${COMMIT_COUNT}"
|
||||
|
||||
COMMIT_TIME=$(git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S' "${NEW_SHA}")
|
||||
|
||||
java -jar "/tmp/cache-schema-checker-${CACHE_SCHEMA_CHECKER_VERSION}.jar" \
|
||||
--config .gitea/config/cache-schema-check-config.yaml \
|
||||
--repo-root . \
|
||||
--old-sha "$OLD_SHA" \
|
||||
--new-sha "$(git rev-parse HEAD)" \
|
||||
--new-sha "$NEW_SHA" \
|
||||
--branch "${{ gitea.ref_name }}" \
|
||||
--modifier "${{ gitea.actor }}" \
|
||||
--modify-time "$COMMIT_TIME"
|
||||
|
||||
Reference in New Issue
Block a user