@@ -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