Skip to content

Commit d4073c6

Browse files
OhYeeclaude
andcommitted
ci: agentrun 变更检测改为与默认分支 main 的分叉点比较
原逻辑仅比较 HEAD^..HEAD(最近一次提交),多 commit 分支会漏检早先提交的 改动——例如分支最后一次提交只动 tests/ 时,会误判 agentrun 无变更而跳过 构建。改为 git merge-base(origin/main, HEAD) 取整个分支引入的全部改动; 直接 push 到 main 等与 base 无分叉的场景回退到 HEAD^..HEAD。 (仓库默认分支为 main,无 master 分支,故对齐 main。) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: OhYee <oyohyee@oyohyee.com>
1 parent 1054209 commit d4073c6

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

.github/workflows/ci.yml

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,25 @@ jobs:
5454
id: changes
5555
run: |
5656
echo "Checking if agentrun directory has changes..."
57-
# 获取最近两次提交之间的差异;如果没有父提交,则将所有跟踪文件视为已更改
58-
if git rev-parse HEAD^ >/dev/null 2>&1; then
57+
# 与默认分支(main)的分叉点比较,取整个分支引入的全部改动,
58+
# 而非仅最近一次提交(避免多 commit 分支漏检早先提交的改动)。
59+
# CI 以 fetch-depth: 0 检出,origin/main 可用;优先用它,退回本地 main。
60+
BASE_REF=""
61+
for ref in origin/main main; do
62+
if git rev-parse --verify "$ref" >/dev/null 2>&1; then
63+
BASE_REF="$ref"; break
64+
fi
65+
done
66+
MERGE_BASE=""
67+
if [ -n "$BASE_REF" ]; then
68+
MERGE_BASE=$(git merge-base "$BASE_REF" HEAD 2>/dev/null || echo "")
69+
fi
70+
if [ -n "$MERGE_BASE" ] && [ "$MERGE_BASE" != "$(git rev-parse HEAD)" ]; then
71+
echo "Diffing against base ($BASE_REF, merge-base ${MERGE_BASE})"
72+
git diff --name-only "$MERGE_BASE" HEAD > changed_files.txt
73+
elif git rev-parse HEAD^ >/dev/null 2>&1; then
74+
# 回退(如直接 push 到 main,与 base 无分叉):比较最近一次提交
75+
echo "No divergence from base; falling back to HEAD^..HEAD"
5976
git diff --name-only HEAD^ HEAD > changed_files.txt
6077
else
6178
echo "No parent commit; treating all tracked files as changed."

0 commit comments

Comments
 (0)