Skip to content

Commit 718418e

Browse files
Kselftest and Create PR optimizations
Signed-off-by: Shreeya Patel <spatel@ciq.com>
1 parent b3ac240 commit 718418e

File tree

1 file changed

+44
-70
lines changed

1 file changed

+44
-70
lines changed

.github/workflows/kernel-build-and-test-x86_64.yml

Lines changed: 44 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ jobs:
197197
runs-on: kernel-build
198198
needs: test-kselftest
199199
if: success() || failure()
200+
outputs:
201+
base_branch: ${{ steps.base_branch.outputs.base_branch }}
200202

201203
steps:
202204
- name: Checkout kernel source
@@ -220,40 +222,53 @@ jobs:
220222
BASE_BRANCH="${{ github.base_ref }}"
221223
echo "Using PR base branch: $BASE_BRANCH"
222224
else
223-
# For direct pushes, find the common ancestor branch
225+
# For direct pushes, try common base branches first (fast path)
224226
echo "Not a PR, finding base branch via merge-base"
225227
226-
# Get all remote branches and find the one with closest common ancestor
227-
CURRENT_COMMIT=$(git rev-parse HEAD)
228-
BEST_BRANCH=""
229-
CLOSEST_DISTANCE=999999
228+
# Try common base branches first (most likely candidates)
229+
for branch in test-stage-separation ciqlts9_2 main master; do
230+
if git rev-parse origin/$branch >/dev/null 2>&1; then
231+
MERGE_BASE=$(git merge-base HEAD origin/$branch 2>/dev/null || echo "")
232+
if [ -n "$MERGE_BASE" ] && [ "$MERGE_BASE" != "$(git rev-parse HEAD)" ]; then
233+
BASE_BRANCH=$branch
234+
DISTANCE=$(git rev-list --count ${MERGE_BASE}..HEAD 2>/dev/null || echo "0")
235+
echo "Found base branch: $BASE_BRANCH (distance: $DISTANCE commits)"
236+
break
237+
fi
238+
fi
239+
done
230240
231-
for remote_branch in $(git for-each-ref --format='%(refname:short)' refs/remotes/origin/ | grep -v 'HEAD\|PR-CHECKER'); do
232-
branch_name=$(echo "$remote_branch" | sed 's|^origin/||')
241+
# Fallback: if not found, search all branches (slower but comprehensive)
242+
if [ -z "$BASE_BRANCH" ]; then
243+
echo "Common branches not found, searching all branches..."
244+
CURRENT_COMMIT=$(git rev-parse HEAD)
245+
BEST_BRANCH=""
246+
CLOSEST_DISTANCE=999999
233247
234-
# Skip if it's the current branch
235-
if [ "$branch_name" = "${{ github.ref_name }}" ]; then
236-
continue
237-
fi
248+
for remote_branch in $(git for-each-ref --format='%(refname:short)' refs/remotes/origin/ | grep -v 'HEAD\|PR-CHECKER' | head -20); do
249+
branch_name=$(echo "$remote_branch" | sed 's|^origin/||')
250+
251+
# Skip if it's the current branch
252+
if [ "$branch_name" = "${{ github.ref_name }}" ]; then
253+
continue
254+
fi
238255
239-
MERGE_BASE=$(git merge-base HEAD "$remote_branch" 2>/dev/null || echo "")
256+
MERGE_BASE=$(git merge-base HEAD "$remote_branch" 2>/dev/null || echo "")
240257
241-
# Check if this branch shares history and isn't the current commit
242-
if [ -n "$MERGE_BASE" ] && [ "$MERGE_BASE" != "$CURRENT_COMMIT" ]; then
243-
# Calculate distance (number of commits) from merge-base to current HEAD
244-
DISTANCE=$(git rev-list --count ${MERGE_BASE}..HEAD 2>/dev/null || echo "999999")
258+
if [ -n "$MERGE_BASE" ] && [ "$MERGE_BASE" != "$CURRENT_COMMIT" ]; then
259+
DISTANCE=$(git rev-list --count ${MERGE_BASE}..HEAD 2>/dev/null || echo "999999")
245260
246-
# Find the branch with the shortest distance (most recent common ancestor)
247-
if [ "$DISTANCE" -lt "$CLOSEST_DISTANCE" ]; then
248-
CLOSEST_DISTANCE=$DISTANCE
249-
BEST_BRANCH=$branch_name
261+
if [ "$DISTANCE" -lt "$CLOSEST_DISTANCE" ]; then
262+
CLOSEST_DISTANCE=$DISTANCE
263+
BEST_BRANCH=$branch_name
264+
fi
250265
fi
251-
fi
252-
done
266+
done
253267
254-
if [ -n "$BEST_BRANCH" ]; then
255-
BASE_BRANCH=$BEST_BRANCH
256-
echo "Found common ancestor with $BASE_BRANCH (distance: $CLOSEST_DISTANCE commits)"
268+
if [ -n "$BEST_BRANCH" ]; then
269+
BASE_BRANCH=$BEST_BRANCH
270+
echo "Found base branch: $BASE_BRANCH (distance: $CLOSEST_DISTANCE commits)"
271+
fi
257272
fi
258273
fi
259274
@@ -368,7 +383,7 @@ jobs:
368383
- name: Checkout kernel source
369384
uses: actions/checkout@v4
370385
with:
371-
fetch-depth: 0
386+
fetch-depth: 50 # Shallow clone: enough for commit messages and logs
372387
token: ${{ secrets.GITHUB_TOKEN }}
373388

374389
- name: Download kernel compilation logs
@@ -442,52 +457,11 @@ jobs:
442457
env:
443458
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
444459
run: |
445-
BASE_BRANCH=""
446-
447-
# For PRs, use the base branch directly
448-
if [ -n "${{ github.base_ref }}" ]; then
449-
BASE_BRANCH="${{ github.base_ref }}"
450-
echo "Using PR base branch: $BASE_BRANCH"
451-
else
452-
# For direct pushes, find the common ancestor branch
453-
echo "Not a PR, finding base branch via merge-base"
454-
455-
# Get all remote branches and find the one with closest common ancestor
456-
CURRENT_COMMIT=$(git rev-parse HEAD)
457-
BEST_BRANCH=""
458-
CLOSEST_DISTANCE=999999
459-
460-
for remote_branch in $(git for-each-ref --format='%(refname:short)' refs/remotes/origin/ | grep -v 'HEAD\|PR-CHECKER'); do
461-
branch_name=$(echo "$remote_branch" | sed 's|^origin/||')
462-
463-
# Skip if it's the current branch
464-
if [ "$branch_name" = "${{ github.ref_name }}" ]; then
465-
continue
466-
fi
467-
468-
MERGE_BASE=$(git merge-base HEAD "$remote_branch" 2>/dev/null || echo "")
469-
470-
# Check if this branch shares history and isn't the current commit
471-
if [ -n "$MERGE_BASE" ] && [ "$MERGE_BASE" != "$CURRENT_COMMIT" ]; then
472-
# Calculate distance (number of commits) from merge-base to current HEAD
473-
DISTANCE=$(git rev-list --count ${MERGE_BASE}..HEAD 2>/dev/null || echo "999999")
474-
475-
# Find the branch with the shortest distance (most recent common ancestor)
476-
if [ "$DISTANCE" -lt "$CLOSEST_DISTANCE" ]; then
477-
CLOSEST_DISTANCE=$DISTANCE
478-
BEST_BRANCH=$branch_name
479-
fi
480-
fi
481-
done
482-
483-
if [ -n "$BEST_BRANCH" ]; then
484-
BASE_BRANCH=$BEST_BRANCH
485-
echo "Found common ancestor with $BASE_BRANCH (distance: $CLOSEST_DISTANCE commits)"
486-
fi
487-
fi
460+
# Reuse base branch from compare-results stage (already computed)
461+
BASE_BRANCH="${{ needs.compare-results.outputs.base_branch }}"
488462
489463
if [ -z "$BASE_BRANCH" ]; then
490-
echo "ERROR: Could not determine base branch for PR"
464+
echo "ERROR: Could not determine base branch for PR (compare-results did not find one)"
491465
exit 1
492466
fi
493467

0 commit comments

Comments
 (0)