Skip to content

Commit b77b7e6

Browse files
authored
Faster smoke tests (#4272)
1 parent 09dbf39 commit b77b7e6

File tree

1 file changed

+33
-5
lines changed

1 file changed

+33
-5
lines changed

.github/workflows/build-common.yml

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,35 @@ jobs:
196196

197197
- id: set-matrix
198198
run: |
199-
modules=$(ls -d smoke-tests/apps/* | sed 's/\/$//' | sed 's/\//:/g' | sed 's/^/:/')
200-
inner_json=$(echo $modules | xargs echo | sed 's/ /","/g')
201-
echo "matrix={\"module\":[\"$inner_json\"]}" >> $GITHUB_OUTPUT
199+
json_array=$(
200+
for dir in smoke-tests/apps/*; do
201+
# Convert directory path to module name (e.g., "smoke-tests/apps/MyApp" -> "smoke-tests:apps:MyApp")
202+
module=$(echo "$dir" | sed 's|/|:|g')
203+
# Extract just the app name from the module path (e.g., "smoke-tests:apps:MyApp" -> "MyApp")
204+
module_short=$(echo "$module" | sed 's|.*:||')
205+
206+
find "${dir}/src/smokeTest/java" -name "*Test.java" | \
207+
# Remove the base path to get relative path from smokeTest/java
208+
sed "s|${dir}/src/smokeTest/java/||" | \
209+
# Convert file name to class name (e.g., "com/example/MyTest.java" -> "com.example.MyTest")
210+
sed 's|/|.|g' | sed 's|\.java$||' | \
211+
# Process each fully qualified test class name
212+
while read -r class_name; do
213+
# Extract just the simple class name (e.g., "com.example.MyTest" -> "MyTest")
214+
class_short=$(echo "$class_name" | sed 's/.*\.//')
215+
echo "{\"display\":\"${module_short}:${class_short}\"," \
216+
"\"module\":\"${module}\"," \
217+
"\"test_class\":\"${class_name}\"}"
218+
done
219+
# Join all JSON objects with commas and remove trailing comma
220+
done | tr '\n' ',' | sed 's/,$//'
221+
)
222+
223+
# Output the matrix in GitHub Actions format
224+
echo "matrix={\"include\":[$json_array]}" >> $GITHUB_OUTPUT
202225
203226
smoke-test:
227+
name: ${{ matrix.display }}
204228
needs: setup-smoke-test-matrix
205229
runs-on: ubuntu-latest
206230
strategy:
@@ -226,12 +250,16 @@ jobs:
226250
uses: gradle/actions/setup-gradle@v4
227251

228252
- name: Test
229-
run: ./gradlew ${{ matrix.module }}:smokeTest
253+
run: ./gradlew ${{ matrix.module }}:smokeTest --tests "${{ matrix.test_class }}*"
230254

231255
- name: Create unique artifact name
232256
if: failure()
233257
run: |
234-
echo "UPLOAD_ARTIFACT_NAME=${{ matrix.module }}" | sed 's/:/-/g' >> $GITHUB_ENV
258+
# Create a unique name based on module and test class
259+
artifact_name="${{ matrix.module }}:${{ matrix.test_class }}"
260+
# Replace colons and dots with hyphens for valid artifact names
261+
artifact_name=$(echo "$artifact_name" | sed 's/[:.]/\-/g')
262+
echo "UPLOAD_ARTIFACT_NAME=$artifact_name" >> $GITHUB_ENV
235263
236264
- name: Upload smoke test reports
237265
uses: actions/upload-artifact@v4

0 commit comments

Comments
 (0)