11#! /usr/bin/env bash
22set -eo pipefail
33
4- # Determine the base branch of the PR
4+ # Determine base branch (main for push, PR base for pull_request)
55BASE_BRANCH=${GITHUB_BASE_REF:- main}
66
77# Fetch full history for proper diff
88git fetch origin " $BASE_BRANCH "
99
10- # Compute merge base
10+ # Compute merge base to compare changes
1111MERGE_BASE=$( git merge-base HEAD origin/$BASE_BRANCH )
1212
1313# Get changed files relative to merge base
1414changed_files=$( git diff --name-only " $MERGE_BASE " HEAD)
1515
16- # Extract unique exercise directories
16+ # Extract unique exercise directories (practice/*/<slug> or concept/*/<slug>)
1717changed_exercises=$( echo " $changed_files " | \
1818 grep -E ' ^exercises/(practice|concept)/[^/]+/.+\.(java|json|gradle)$' | \
1919 cut -d/ -f1-3 | sort -u)
@@ -23,19 +23,22 @@ if [ -z "$changed_exercises" ]; then
2323 exit 0
2424fi
2525
26- # Source original verify_exercise script
27- source ./bin/test-with-test-runner
26+ echo " Changed exercises detected:"
27+ echo " $changed_exercises "
28+ echo
2829
29- # Run verify_exercise for each changed exercise
30+ # Run tests for each changed exercise
31+ exit_code=0
3032for dir in $changed_exercises ; do
3133 slug=$( basename " $dir " )
32- if [[ $dir == exercises/practice/* ]]; then
33- echo " Checking $slug (practice)..."
34- verify_exercise " $dir " " example" " practice"
35- elif [[ $dir == exercises/concept/* ]]; then
36- echo " Checking $slug (concept)..."
37- verify_exercise " $dir " " exemplar" " concept"
34+ echo " === Running tests for $slug ==="
35+
36+ # Run Gradle test for this exercise
37+ if [[ -f " $dir /build.gradle" || -f " $dir /build.gradle.kts" ]]; then
38+ ./gradlew --continue -p " $dir " test || exit_code=$?
39+ else
40+ echo " No build.gradle found for $slug , skipping..."
3841 fi
3942done
4043
41- exit ${ exit_code:- 0}
44+ exit $exit_code
0 commit comments