Skip to content

Commit 0271322

Browse files
committed
fix(ci): make sync step visible, fetch PR merge ref, retry, file cap, fix NL
1 parent 4478606 commit 0271322

2 files changed

Lines changed: 90 additions & 19 deletions

File tree

‎.github/workflows/ai-code-review.yml‎

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@ jobs:
4141
# ── Inline system prompt ──
4242
SYSTEM_PROMPT=$(cat .github/prompts/code-review-prompt.md)
4343
44-
REVIEW_FILE="review_output.md"
44+
REVIEW_FILE="review_output.md"
4545
: > "$REVIEW_FILE"
4646
HAS_REVIEW=false
4747
FILE_COUNT=0
48+
MAX_REVIEW_FILES=10
49+
SKIPPED_FILES=""
4850
CHANGED_FILES=$(cat changed_files.txt)
4951
5052
# ── Check API key early ──
@@ -57,7 +59,13 @@ jobs:
5759
echo "No files changed, skipping review." >> "$REVIEW_FILE"
5860
else
5961
while IFS= read -r FILE; do
62+
NL=$'\n'
6063
[ -z "$FILE" ] && continue
64+
if [ "${FILE_COUNT}" -ge "${MAX_REVIEW_FILES}" ]; then
65+
echo " [SKIP] $FILE — max ${MAX_REVIEW_FILES} files reached"
66+
SKIPPED_FILES="${SKIPPED_FILES} - $FILE${NL}"
67+
continue
68+
fi
6169
echo "Reviewing: $FILE"
6270
6371
# ── Get per-file diff ──
@@ -69,7 +77,6 @@ jobs:
6977
continue
7078
fi
7179
72-
NL=$'\n'
7380
# ── If empty (new file / special chars), show full content ──
7481
if [ -z "$DIFF" ]; then
7582
# Check file type before generating virtual diff
@@ -148,16 +155,28 @@ jobs:
148155
fi
149156
150157
# ── Final summary ──
151-
if [ "$HAS_REVIEW" = false ]; then
152-
printf '%s\n' '## 🤖 AI Code Review' '' 'No reviewable changes found (all files binary, unchanged, or empty).' > "$REVIEW_FILE"
153-
else
154-
SUMMARY=$(printf '# 🤖 AI Code Review\n\n> 共审查 **%s** 个变更文件\n\n' "${FILE_COUNT}")
155-
{
156-
echo "$SUMMARY"
157-
echo ""
158+
{
159+
echo "# 🤖 AI Code Review"
160+
echo ""
161+
echo "> 共审查 **${FILE_COUNT}** 个变更文件"
162+
if [ -n "$SKIPPED_FILES" ]; then
163+
SKIP_COUNT=$(echo "$SKIPPED_FILES" | grep -c ' - ' || true)
164+
echo "> ⚠️ 另有 **${SKIP_COUNT}** 个文件超过上限(最多 ${MAX_REVIEW_FILES} 个)未审查"
165+
fi
166+
echo ""
167+
if [ "$HAS_REVIEW" = true ]; then
158168
cat "$REVIEW_FILE"
159-
} > "${REVIEW_FILE}.tmp" && mv "${REVIEW_FILE}.tmp" "$REVIEW_FILE"
160-
fi
169+
else
170+
echo "No reviewable changes found (all files binary, unchanged, or empty)."
171+
fi
172+
if [ -n "$SKIPPED_FILES" ]; then
173+
echo ""
174+
echo "---"
175+
echo "### ⚠️ 未审查的文件"
176+
printf '%b' "$SKIPPED_FILES"
177+
fi
178+
} > "${REVIEW_FILE}.tmp"
179+
mv "${REVIEW_FILE}.tmp" "$REVIEW_FILE"
161180
162181
echo "Review written to $REVIEW_FILE"
163182

‎.github/workflows/ci.yml‎

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,41 @@ jobs:
2424
steps:
2525
- name: Sync from local mirror (skip unstable GitHub checkout)
2626
run: |
27+
echo "=== CI Sync ==="
28+
retry() {
29+
local desc="$1" rc=0; shift
30+
for i in 1 2 3; do
31+
if "$@" --depth=1; then rc=0; break; fi
32+
rc=$?
33+
if [ "$i" -lt 3 ]; then
34+
echo "::warning::$desc failed, retry #$i in $((i*3))s"
35+
sleep $((i * 3))
36+
else
37+
echo "::error::$desc failed after 3 attempts"
38+
fi
39+
done
40+
return $rc
41+
}
2742
MIRROR=/opt/ScratchV
2843
WORKSPACE=/opt/actions-runner/_work/ScratchV/ScratchV
29-
# Copy pre-cloned repo to workspace (avoid GitHub network issues)
3044
rm -rf "$WORKSPACE"
3145
cp -a "$MIRROR" "$WORKSPACE"
3246
cd "$WORKSPACE"
33-
# Try to fetch latest; fallback to local copy if network fails
34-
git fetch origin main --depth=1 2>/dev/null || echo "WARNING: git fetch failed, using local mirror"
35-
git checkout -f "$GITHUB_SHA" 2>/dev/null || git checkout -f origin/main 2>/dev/null || true
47+
echo "Fetching origin main..."
48+
retry "git fetch origin main" git fetch origin main || exit 1
49+
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
50+
PR_NUMBER="${GITHUB_REF#refs/pull/}"
51+
PR_NUMBER="${PR_NUMBER%/merge}"
52+
echo "Fetching PR #${PR_NUMBER} merge ref..."
53+
retry "git fetch PR #${PR_NUMBER}" git fetch origin "refs/pull/${PR_NUMBER}/merge" || exit 1
54+
fi
55+
echo "Checking out $GITHUB_SHA..."
56+
if git -c advice.detachedHead=false checkout -f "$GITHUB_SHA"; then
57+
echo "::notice::Checkout successful: $(git log -1 --format='%h %ai %s')"
58+
else
59+
echo "::error::GITHUB_SHA ($GITHUB_SHA) not found in local repo — checkout failed"
60+
exit 1
61+
fi
3662
3763
- name: Install dependencies
3864
run: |
@@ -72,15 +98,41 @@ jobs:
7298
steps:
7399
- name: Sync from local mirror (skip unstable GitHub checkout)
74100
run: |
101+
echo "=== CI Sync ==="
102+
retry() {
103+
local desc="$1" rc=0; shift
104+
for i in 1 2 3; do
105+
if "$@" --depth=1; then rc=0; break; fi
106+
rc=$?
107+
if [ "$i" -lt 3 ]; then
108+
echo "::warning::$desc failed, retry #$i in $((i*3))s"
109+
sleep $((i * 3))
110+
else
111+
echo "::error::$desc failed after 3 attempts"
112+
fi
113+
done
114+
return $rc
115+
}
75116
MIRROR=/opt/ScratchV
76117
WORKSPACE=/opt/actions-runner/_work/ScratchV/ScratchV
77-
# Copy pre-cloned repo to workspace (avoid GitHub network issues)
78118
rm -rf "$WORKSPACE"
79119
cp -a "$MIRROR" "$WORKSPACE"
80120
cd "$WORKSPACE"
81-
# Try to fetch latest; fallback to local copy if network fails
82-
git fetch origin main --depth=1 2>/dev/null || echo "WARNING: git fetch failed, using local mirror"
83-
git checkout -f "$GITHUB_SHA" 2>/dev/null || git checkout -f origin/main 2>/dev/null || true
121+
echo "Fetching origin main..."
122+
retry "git fetch origin main" git fetch origin main || exit 1
123+
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
124+
PR_NUMBER="${GITHUB_REF#refs/pull/}"
125+
PR_NUMBER="${PR_NUMBER%/merge}"
126+
echo "Fetching PR #${PR_NUMBER} merge ref..."
127+
retry "git fetch PR #${PR_NUMBER}" git fetch origin "refs/pull/${PR_NUMBER}/merge" || exit 1
128+
fi
129+
echo "Checking out $GITHUB_SHA..."
130+
if git -c advice.detachedHead=false checkout -f "$GITHUB_SHA"; then
131+
echo "::notice::Checkout successful: $(git log -1 --format='%h %ai %s')"
132+
else
133+
echo "::error::GITHUB_SHA ($GITHUB_SHA) not found in local repo — checkout failed"
134+
exit 1
135+
fi
84136
85137
- name: Install dependencies
86138
run: |

0 commit comments

Comments
 (0)