From 1d5a7bdc8ec071cdddf0e69d6053d49ca20a2b18 Mon Sep 17 00:00:00 2001 From: Umesh Kumar Singh Date: Wed, 11 Mar 2026 08:54:57 +0530 Subject: [PATCH] ci: fetch base branch before regression test check The regression-test-check workflow failed because origin/main wasn't available as a ref in the CI environment. actions/checkout@v4 fetches the PR merge ref history but doesn't make the base branch ref available for three-dot diff comparisons. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/regression-test-check.yml | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/.github/workflows/regression-test-check.yml b/.github/workflows/regression-test-check.yml index 18b8c76ffa..6d97c4ce71 100644 --- a/.github/workflows/regression-test-check.yml +++ b/.github/workflows/regression-test-check.yml @@ -13,6 +13,11 @@ jobs: with: fetch-depth: 0 + - name: Fetch PR head and base + run: | + git fetch origin ${{ github.event.pull_request.base.ref }} + git fetch origin pull/${{ github.event.pull_request.number }}/head:pr-head + - name: Check for regression tests env: PR_TITLE: ${{ github.event.pull_request.title }} @@ -21,6 +26,8 @@ jobs: set -euo pipefail BASE_REF="origin/${{ github.event.pull_request.base.ref }}" + # Use the actual PR head, not the merge commit that actions/checkout checks out + HEAD_REF="pr-head" # --- 1. Is this a fix PR? Check title first, then commit messages --- IS_FIX=false @@ -30,7 +37,7 @@ jobs: fi if [ "$IS_FIX" = false ]; then - COMMITS=$(git log --format='%s' "${BASE_REF}..HEAD") + COMMITS=$(git log --format='%s' "${BASE_REF}..${HEAD_REF}") if grep -qiE '^(fix(\(.*\))?|hotfix|bugfix):' <<< "$COMMITS"; then IS_FIX=true fi @@ -49,14 +56,14 @@ jobs: exit 0 fi - COMMIT_BODIES=$(git log --format='%B' "${BASE_REF}..HEAD") + COMMIT_BODIES=$(git log --format='%B' "${BASE_REF}..${HEAD_REF}") if grep -qF '[skip-regression-check]' <<< "$COMMIT_BODIES"; then echo "[skip-regression-check] found in commit message — skipping." exit 0 fi # --- 3. Exempt static-only / docs-only changes --- - CHANGED_FILES=$(git diff --name-only "${BASE_REF}...HEAD") + CHANGED_FILES=$(git diff --name-only "${BASE_REF}...${HEAD_REF}") if [ -z "$CHANGED_FILES" ]; then echo "No changed files — skipping." @@ -80,13 +87,13 @@ jobs: # --- 4. Look for test changes --- # Fast path: new test attributes or test modules in added lines. - if git diff "${BASE_REF}...HEAD" -U0 -- '*.rs' | grep -qE '^\+.*(#\[test\]|#\[tokio::test\]|#\[cfg\(test\)\]|mod tests)'; then + if git diff "${BASE_REF}...${HEAD_REF}" -U0 -- '*.rs' | grep -qE '^\+.*(#\[test\]|#\[tokio::test\]|#\[cfg\(test\)\]|mod tests)'; then echo "Test changes found in .rs files." exit 0 fi # Whole-function context: detect edits inside existing test functions. - if git diff "${BASE_REF}...HEAD" -W -- '*.rs' | awk ' + if git diff "${BASE_REF}...${HEAD_REF}" -W -- '*.rs' | awk ' /^@@/ { if (has_test && has_add) { found=1; exit } has_test=0; has_add=0 } /^ .*#\[test\]/ || /^ .*#\[tokio::test\]/ || /^ .*#\[cfg\(test\)\]/ || /^ .*mod tests/ { has_test=1 } /^\+.*#\[test\]/ || /^\+.*#\[tokio::test\]/ || /^\+.*#\[cfg\(test\)\]/ || /^\+.*mod tests/ { has_test=1 }