1
- name : Unit Test
1
+ name : Test
2
2
on :
3
3
pull_request :
4
4
branches : [ "dev" ]
17
17
echo "Changed files: ${{ steps.changed_files.outputs.all_changed_files }}"
18
18
TEST_FILES=$(echo "${{ steps.changed_files.outputs.all_changed_files }}" \
19
19
| tr ' ' '\n' \
20
- | grep -E '^.+/src/test/(java|kotlin)/.+\.(kt|java)$')
20
+ | grep -E '^.+/src/test/(java|kotlin)/.+\.(kt|java)$' || true )
21
21
echo "Filtered by grep: $TEST_FILES"
22
22
TEST_FILES=$(echo "$TEST_FILES" \
23
23
| sed -E 's/^(.+)\/src\/test\/(java|kotlin)\/(.+)\.(kt|java)$/\1 \3/' \
26
26
TEST_FILES_SINGLE_LINE=$(echo "$TEST_FILES" | tr '\n' ' ')
27
27
echo "TEST_FILES=$TEST_FILES_SINGLE_LINE" >> $GITHUB_ENV
28
28
echo "$TEST_FILES" > test_files.txt
29
- if [ -s test_files.txt ]; then
29
+ if [ -n "$(cat test_files.txt | xargs)" ]; then
30
30
echo "any_changed=true" >> $GITHUB_ENV
31
31
else
32
32
echo "any_changed=false" >> $GITHUB_ENV
58
58
while IFS=$'\n' read -r LINE; do
59
59
60
60
# 1) 원본 변수 추출
61
- MODULE_RAW=$(echo "$LINE" | awk '{print $1}') # 예: "core.data"
62
- TEST_CLASS_RAW=$(echo "$LINE" | awk '{print $2}') # 예: "kr.co.data.dummy.DummyInstances"
61
+ MODULE_RAW=$(echo "$LINE" | awk '{print $1}')
62
+ TEST_CLASS_RAW=$(echo "$LINE" | awk '{print $2}')
63
63
echo "MODULE_RAW: $MODULE_RAW"
64
64
echo "TEST_CLASS_RAW: $TEST_CLASS_RAW"
65
65
@@ -104,4 +104,75 @@ jobs:
104
104
uses : EnricoMi/publish-unit-test-result-action@v2
105
105
if : always()
106
106
with :
107
- files : " **/test-results/**/*.xml"
107
+ files : " **/test-results/**/*.xml"
108
+
109
+ android_test :
110
+ runs-on : ubuntu-latest
111
+
112
+ steps :
113
+ - name : Checkout code
114
+ uses : actions/checkout@v3
115
+
116
+ - name : Get changed files
117
+ id : changed_files
118
+ uses : tj-actions/changed-files@v45
119
+
120
+ - name : Filter out test files
121
+ id : android_test_files
122
+ run : |
123
+ echo "Changed files: ${{ steps.changed_files.outputs.all_changed_files }}"
124
+
125
+ ANDROID_TEST_FILES=$(echo "${{ steps.changed_files.outputs.all_changed_files }}" \
126
+ | tr ' ' '\n' \
127
+ | grep -E '^.+/src/androidTest/(java|kotlin)/.+\.(kt|java)$' || true)
128
+ echo "Filtered by grep: $ANDROID_TEST_FILES"
129
+
130
+ ANDROID_TEST_FILES=$(echo "$ANDROID_TEST_FILES" \
131
+ | sed -E 's/^(.+)\/src\/androidTest\/(java|kotlin)\/(.+)\.(kt|java)$/\1 \3/' \
132
+ | sed 's/\//./g')
133
+ echo "Processed by sed: $ANDROID_TEST_FILES"
134
+
135
+ ANDROID_TEST_FILES_SINGLE_LINE=$(echo "$ANDROID_TEST_FILES" | tr '\n' ' ')
136
+ echo "ANDROID_TEST_FILES=$ANDROID_TEST_FILES_SINGLE_LINE" >> $GITHUB_ENV
137
+
138
+ echo "$ANDROID_TEST_FILES" > android_test_files.txt
139
+
140
+ if [ -n "$(cat android_test_files.txt | xargs)" ]; then
141
+ echo "any_changed=true" >> $GITHUB_ENV
142
+ else
143
+ echo "any_changed=false" >> $GITHUB_ENV
144
+ fi
145
+
146
+ - name : Setup JDK
147
+ if : env.any_changed == 'true'
148
+ uses : actions/setup-java@v4
149
+ with :
150
+ distribution : ' corretto'
151
+ java-version : ' 17'
152
+
153
+ - name : Grant execute permission for gradlew
154
+ if : env.any_changed == 'true'
155
+ run : chmod +x gradlew
156
+
157
+ - name : Run Instrumentation Tests on Emulator
158
+ if : env.any_changed == 'true'
159
+ uses : reactivecircus/android-emulator-runner@v2
160
+ with :
161
+ api-level : 26
162
+ target : default
163
+ arch : x86_64
164
+ profile : Nexus 6
165
+ script : ./gradlew connectedCheck --stacktrace
166
+ run : |
167
+ cat android_test_files.txt | while IFS=$'\n' read -r LINE; do
168
+ MODULE=$(echo "$LINE" | awk '{print $1}')
169
+ TEST_CLASS=$(echo "$LINE" | awk '{print $2}')
170
+
171
+ MODULE=$(echo "$MODULE" | sed 's|\.|:|g')
172
+
173
+ echo "MODULE: $MODULE"
174
+ echo "TEST_CLASS: $TEST_CLASS"
175
+
176
+ echo "Running: ./gradlew :$MODULE:connectedAndroidTest --tests \"$TEST_CLASS\""
177
+ ./gradlew :$MODULE:connectedAndroidTest --tests "$TEST_CLASS" --scan || exit 1
178
+ done
0 commit comments