3737 default : false
3838
3939jobs :
40+ detect-changes :
41+ runs-on : ubuntu-latest
42+ outputs :
43+ heavy-persistence : ${{ steps.filter.outputs.heavy-persistence }}
44+ steps :
45+ - uses : actions/checkout@v7
46+ with :
47+ ref : ${{ github.event.pull_request.head.sha }}
48+ fetch-depth : 0
49+ - uses : dorny/paths-filter@v3
50+ id : filter
51+ with :
52+ filters : |
53+ heavy-persistence:
54+ - 'cassandra-persistence/**'
55+ - 'es6-persistence/**'
56+ - 'es7-persistence/**'
57+ - 'es8-persistence/**'
58+ - 'mysql-persistence/**'
59+ - 'os-persistence/**'
60+ - 'os-persistence-v2/**'
61+ - 'os-persistence-v3/**'
62+ - 'scheduler/cassandra-persistence/**'
63+ - 'scheduler/mysql-persistence/**'
64+
4065 build :
4166 runs-on : ubuntu-latest
4267 steps :
@@ -70,44 +95,18 @@ jobs:
7095 ~/.gradle/wrapper
7196 key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
7297 restore-keys : ${{ runner.os }}-gradle-
73- - name : Force Docker API Version
74- run : echo 'api.version=1.44' > ~/.docker-java.properties
75- - name : Cache Docker images
76- uses : actions/cache@v5
77- id : docker-cache
78- with :
79- path : /tmp/docker-images-build.tar
80- key : docker-build-v2
81- - name : Load cached Docker images
82- if : steps.docker-cache.outputs.cache-hit == 'true'
83- run : docker load -i /tmp/docker-images-build.tar || true
8498 - name : Build with Gradle
8599 if : github.ref != 'refs/heads/main'
86100 env :
87101 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
88102 SONAR_TOKEN : ${{ secrets.SONAR_TOKEN }}
89103 run : |
90- ./gradlew build -x :conductor-test-harness:test --scan
104+ ./gradlew build -x :conductor-test-harness:test -x test
91105 - name : Build and Publish snapshot
92106 if : github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
93107 run : |
94108 echo "Running build for commit ${{ github.sha }}"
95- ./gradlew build -x :conductor-test-harness:test
96- - name : Save Docker images for cache
97- if : steps.docker-cache.outputs.cache-hit != 'true'
98- run : |
99- set -euo pipefail
100- docker image prune -f
101- mapfile -t images < <((docker images --format '{{.Repository}}:{{.Tag}}' \
102- | grep -v '<none>' \
103- | grep -E '(^|/)(elasticsearch|redis|postgres|mysql|mongo|cassandra)(:|/)|mockserver/mockserver|opensearchproject/opensearch|testcontainers/|orkesio/') || true)
104- if [ "${#images[@]}" -eq 0 ]; then
105- echo "No Testcontainers-related images to cache; writing empty tar for cache action."
106- tar -cf /tmp/docker-images-build.tar --files-from /dev/null
107- exit 0
108- fi
109- printf '%s\n' "${images[@]}"
110- docker save -o /tmp/docker-images-build.tar "${images[@]}"
109+ ./gradlew build -x :conductor-test-harness:test -x test
111110 - name : Generate aggregated coverage report
112111 if : always()
113112 run : ./gradlew jacocoAggregatedReport -x test || true
@@ -127,11 +126,71 @@ jobs:
127126 with :
128127 name : coverage-report
129128 path : build/reports/jacoco/aggregated
130- - name : Store Buildscan URL
129+ unit-test :
130+ needs : detect-changes
131+ runs-on : ubuntu-latest
132+ steps :
133+ - uses : actions/checkout@v7
134+ with :
135+ ref : ${{ github.event.pull_request.head.sha }}
136+ fetch-depth : 0
137+ - name : Free disk space
138+ run : |
139+ sudo rm -rf /usr/share/dotnet
140+ sudo rm -rf /usr/local/lib/android
141+ sudo rm -rf /opt/ghc
142+ - name : Set up Zulu JDK 21
143+ uses : actions/setup-java@v5
144+ with :
145+ distribution : " zulu"
146+ java-version : " 21"
147+ - name : Cache Gradle packages
148+ uses : actions/cache@v5
149+ with :
150+ path : |
151+ ~/.gradle/caches
152+ ~/.gradle/wrapper
153+ key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
154+ restore-keys : ${{ runner.os }}-gradle-
155+ - name : Force Docker API Version
156+ run : echo 'api.version=1.44' > ~/.docker-java.properties
157+ - name : Run unit tests
158+ run : |
159+ # On main (post-merge): run everything
160+ if [ "${{ github.event_name }}" != "pull_request" ]; then
161+ ./gradlew test -x :conductor-test-harness:test
162+ exit 0
163+ fi
164+ # On PRs: skip heavy container tests (cassandra, es, mysql, opensearch)
165+ # unless their code changed. Redis, postgres, sqlite always run.
166+ if [ "${{ needs.detect-changes.outputs.heavy-persistence }}" == "true" ]; then
167+ ./gradlew test -x :conductor-test-harness:test
168+ else
169+ ./gradlew test \
170+ -x :conductor-test-harness:test \
171+ -x :conductor-cassandra-persistence:test \
172+ -x :conductor-scheduler-cassandra-persistence:test \
173+ -x :conductor-es6-persistence:test \
174+ -x :conductor-es7-persistence:test \
175+ -x :conductor-es8-persistence:test \
176+ -x :conductor-mysql-persistence:test \
177+ -x :conductor-scheduler-mysql-persistence:test \
178+ -x :conductor-os-persistence:test \
179+ -x :conductor-os-persistence-v2:test \
180+ -x :conductor-os-persistence-v3:test
181+ fi
182+ - name : Publish Test Report
183+ uses : mikepenz/action-junit-report@v6
184+ if : always()
185+ with :
186+ report_paths : " **/build/test-results/test/TEST-*.xml"
187+ check_name : Unit Test Report
188+ - name : Upload unit-test reports
131189 uses : actions/upload-artifact@v7
190+ if : always()
132191 with :
133- name : build-scan
134- path : " buildscan.log "
192+ name : unit-test-reports
193+ path : " **/build/reports/tests "
135194 test-harness :
136195 runs-on : ubuntu-latest
137196 steps :
0 commit comments