@@ -231,6 +231,7 @@ jobs:
231231 added_tests=()
232232 deleted_tests=()
233233 skipped_tests=()
234+ base_skipped_tests=()
234235
235236 # Function to extract test names from a file
236237 extract_test_names() {
@@ -241,7 +242,35 @@ jobs:
241242 fi
242243 }
243244
244- # First, get list of changed test files and analyze deletions
245+ # Function to extract skipped test names from a file
246+ extract_skipped_tests() {
247+ local file=$1
248+ local ref=$2
249+ if git show "$ref:$file" > /dev/null 2>&1; then
250+ git show "$ref:$file" | grep -E "test\.skip\([\'\"].*[\'\"]" | sed -E "s/.*test\.skip\(['\"]([^'\"]+)['\"].*/\1/"
251+ fi
252+ }
253+
254+ # Get skipped tests from both base and current branches
255+ for file in $(git ls-files | grep -E '^tests/suites/.*\.(spec|test)\.(ts|tsx|js|jsx)$'); do
256+ # Get skipped tests from base branch
257+ while IFS= read -r test; do
258+ if [[ -n "$test" ]]; then
259+ base_skipped_tests+=("$test")
260+ fi
261+ done < <(extract_skipped_tests "$file" main)
262+
263+ # Get skipped tests from current branch
264+ while IFS= read -r test; do
265+ if [[ -n "$test" ]]; then
266+ if ! printf '%s\n' "${base_skipped_tests[@]}" | grep -Fxq "$test"; then
267+ skipped_tests+=("$test")
268+ fi
269+ fi
270+ done < <(extract_skipped_tests "$file" HEAD)
271+ done
272+
273+ # Get list of changed test files
245274 for file in $(git diff --name-only main...HEAD | grep -E '^tests/suites/.*\.(spec|test)\.(ts|tsx|js|jsx)$'); do
246275 # Get test names from both versions
247276 current_tests=$(extract_test_names "$file" HEAD)
@@ -251,7 +280,10 @@ jobs:
251280 while IFS= read -r test; do
252281 if [[ -n "$test" ]]; then
253282 if ! echo "$base_tests" | grep -Fxq "$test"; then
254- added_tests+=("$test")
283+ # Only add if it's not a skipped test
284+ if ! printf '%s\n' "${skipped_tests[@]}" | grep -Fxq "$test"; then
285+ added_tests+=("$test")
286+ fi
255287 fi
256288 fi
257289 done <<< "$current_tests"
@@ -260,21 +292,15 @@ jobs:
260292 while IFS= read -r test; do
261293 if [[ -n "$test" ]]; then
262294 if ! echo "$current_tests" | grep -Fxq "$test"; then
263- deleted_tests+=("$test")
295+ # Only count as deleted if it wasn't skipped in base
296+ if ! printf '%s\n' "${base_skipped_tests[@]}" | grep -Fxq "$test"; then
297+ deleted_tests+=("$test")
298+ fi
264299 fi
265300 fi
266301 done <<< "$base_tests"
267302 done
268303
269- # Separately, get skipped tests from test results
270- if [ -f "playwright-artifacts/test-results.json" ]; then
271- while IFS= read -r test; do
272- if [[ -n "$test" ]]; then
273- skipped_tests+=("$test")
274- fi
275- done < <(jq -r '.suites[].specs[] | select(.ok == false and .skipped == true) | .title' playwright-artifacts/test-results.json)
276- fi
277-
278304 # Create JSON output
279305 echo "added_tests=$(IFS=,; echo "${added_tests[*]}")" >> $GITHUB_OUTPUT
280306 echo "deleted_tests=$(IFS=,; echo "${deleted_tests[*]}")" >> $GITHUB_OUTPUT
@@ -324,8 +350,8 @@ jobs:
324350 };
325351
326352 const bundleStatus = percent === 'N/A' ? '⚠️' :
327- parseFloat(percent) > 0 ? '🔺' :
328- parseFloat(percent) < 0 ? '🔽' : '✅';
353+ parseFloat(percent) > 0 ? '🔺' :
354+ parseFloat(percent) < 0 ? '🔽' : '✅';
329355
330356 const addedTests = '${{ steps.analyze_tests.outputs.added_tests }}'.split(',').filter(Boolean);
331357 const deletedTests = '${{ steps.analyze_tests.outputs.deleted_tests }}'.split(',').filter(Boolean);
0 commit comments