Skip to content

Commit a4d2e61

Browse files
fix script
1 parent 52773cd commit a4d2e61

1 file changed

Lines changed: 130 additions & 47 deletions

File tree

tools/test.sh

Lines changed: 130 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -62,33 +62,29 @@ while [[ $# -gt 0 ]]; do
6262
esac
6363
done
6464

65-
# Determine what to test
65+
# Determine what to test (as tiers)
66+
TIERS_TO_RUN=()
67+
6668
if [[ ${#PACKAGES[@]} -gt 0 ]]; then
67-
TEST_PATHS=("${PACKAGES[@]}")
69+
# Specific packages - run as single tier
70+
TIERS_TO_RUN+=("${PACKAGES[*]}")
6871
elif [[ -n "$TIER" ]]; then
72+
# Single tier
6973
case $TIER in
70-
1) read -ra TEST_PATHS <<< "$TIER1" ;;
71-
2) read -ra TEST_PATHS <<< "$TIER2" ;;
72-
3) read -ra TEST_PATHS <<< "$TIER3" ;;
74+
1) TIERS_TO_RUN+=("$TIER1") ;;
75+
2) TIERS_TO_RUN+=("$TIER2") ;;
76+
3) TIERS_TO_RUN+=("$TIER3") ;;
7377
*) echo "Invalid tier: $TIER"; exit 1 ;;
7478
esac
7579
else
76-
# All tiers
77-
read -ra T1 <<< "$TIER1"
78-
read -ra T2 <<< "$TIER2"
79-
read -ra T3 <<< "$TIER3"
80-
TEST_PATHS=("${T1[@]}" "${T2[@]}" "${T3[@]}")
80+
# All tiers - run sequentially
81+
TIERS_TO_RUN+=("$TIER1")
82+
TIERS_TO_RUN+=("$TIER2")
83+
TIERS_TO_RUN+=("$TIER3")
8184
fi
8285

83-
# Filter out excluded packages
84-
FILTERED_PATHS=()
85-
for path in "${TEST_PATHS[@]}"; do
86-
if ! is_excluded "$path"; then
87-
FILTERED_PATHS+=("$path")
88-
fi
89-
done
90-
TEST_PATHS=("${FILTERED_PATHS[@]}")
91-
86+
# Clean and recreate logs directory
87+
rm -rf "$LOGS_DIR"
9288
mkdir -p "$LOGS_DIR"
9389

9490
# Test a single package (runs in subshell)
@@ -105,81 +101,168 @@ test_package() {
105101
# Clear log file
106102
> "$log"
107103

108-
echo "=== Testing $name ===" | tee -a "$log"
104+
echo "🏁 Starting $name"
105+
echo "=== Testing $name ===" >> "$log"
109106

110107
# Build first if needed
111108
if is_type "$dir" "$BUILD_FIRST" && [[ -f "build.sh" ]]; then
112-
./build.sh 2>&1 | tee -a "$log" || { echo "FAIL $name (build)"; return 1; }
109+
./build.sh >> "$log" 2>&1 || { echo "⛔️ Failed $name (build)" ; return 1; }
113110
fi
114111

115112
# Install npm deps if needed
116-
[[ -f "package.json" ]] && npm install --verbose 2>&1 | tee -a "$log"
113+
[[ -f "package.json" ]] && npm install --silent >> "$log" 2>&1
117114

118115
local coverage=""
119116

120117
if is_type "$dir" "$NPM_PACKAGES"; then
121-
npm test 2>&1 | tee -a "$log" || { echo "FAIL $name"; return 1; }
118+
npm test >> "$log" 2>&1 || { echo "⛔️ Failed $name"; return 1; }
122119
elif is_type "$dir" "$NODE_INTEROP_PACKAGES"; then
123120
# Node interop packages: use coverage CLI like NODE_PACKAGES
124-
dart run "$COVERAGE_CLI" 2>&1 | tee -a "$log" || { echo "FAIL $name"; return 1; }
121+
dart run "$COVERAGE_CLI" >> "$log" 2>&1 || { echo "⛔️ Failed $name"; return 1; }
125122
coverage=$(calc_coverage "coverage/lcov.info")
126123
elif is_type "$dir" "$NODE_PACKAGES"; then
127-
dart run "$COVERAGE_CLI" 2>&1 | tee -a "$log" || { echo "FAIL $name"; return 1; }
124+
dart run "$COVERAGE_CLI" >> "$log" 2>&1 || { echo "⛔️ Failed $name"; return 1; }
128125
coverage=$(calc_coverage "coverage/lcov.info")
129126
elif is_type "$dir" "$BROWSER_PACKAGES"; then
130127
# Browser packages: run Chrome tests, check coverage if lcov.info exists
131-
dart test -p chrome --reporter expanded --fail-fast 2>&1 | tee -a "$log" || { echo "FAIL $name"; return 1; }
128+
dart test -p chrome --reporter expanded --fail-fast >> "$log" 2>&1 || { echo "⛔️ Failed $name"; return 1; }
132129
[[ -f "coverage/lcov.info" ]] && coverage=$(calc_coverage "coverage/lcov.info")
133130
else
134131
# Standard VM package with coverage
135-
dart test --coverage=coverage --reporter expanded --fail-fast 2>&1 | tee -a "$log" || { echo "FAIL $name"; return 1; }
136-
dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --report-on=lib 2>&1 | tee -a "$log"
132+
dart test --coverage=coverage --reporter expanded --fail-fast >> "$log" 2>&1 || { echo "⛔️ Failed $name"; return 1; }
133+
dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --report-on=lib >> "$log" 2>&1
137134
coverage=$(calc_coverage "coverage/lcov.info")
138135
fi
139136

140137
# Check coverage threshold if applicable
141138
if [[ -n "$coverage" ]]; then
142139
if [[ "$coverage" == "0" ]] || (( $(echo "$coverage < $MIN_COVERAGE" | bc -l) )); then
143-
echo "FAIL $name (coverage ${coverage}% < ${MIN_COVERAGE}%)"
140+
echo "⛔️ Failed $name (coverage ${coverage}% < ${MIN_COVERAGE}%)"
144141
return 1
145142
fi
146-
echo "PASS $name (${coverage}%)"
143+
echo "✅ Succeeded $name (${coverage}%)"
147144
else
148-
echo "PASS $name"
145+
echo "✅ Succeeded $name"
149146
fi
150147
return 0
151148
}
152149

153-
# Run tests in parallel
154-
run_parallel() {
150+
# Extract failure summary from a log file
151+
extract_failure() {
152+
local log="$1"
153+
local name="$2"
154+
155+
# Look for "Failed to load" or "Failed to run" errors
156+
if grep -q "Failed to load\|Failed to run\|Some tests failed" "$log"; then
157+
echo ""
158+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
159+
echo "FAILURE: $name"
160+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
161+
162+
# Extract failed test file names
163+
grep "Failed to load\|Failed to run" "$log" | head -5 | while IFS= read -r line; do
164+
if [[ "$line" =~ Failed\ to\ load\ \"([^\"]+)\" ]]; then
165+
echo " Test: ${BASH_REMATCH[1]}"
166+
fi
167+
done
168+
169+
# Extract first error message
170+
echo ""
171+
echo " Error:"
172+
grep -A 1 "Failed to load\|Failed to run" "$log" | head -3 | sed 's/^/ /'
173+
echo ""
174+
echo " Full log: $log"
175+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
176+
fi
177+
}
178+
179+
# Run a tier of tests in parallel (wait for all, don't kill on failure)
180+
run_tier() {
181+
local tier_paths=("$@")
155182
local pids=()
183+
local failed_packages=()
184+
185+
# Filter out excluded packages
186+
local filtered=()
187+
for path in "${tier_paths[@]}"; do
188+
if ! is_excluded "$path"; then
189+
filtered+=("$path")
190+
fi
191+
done
156192

157-
for dir in "${TEST_PATHS[@]}"; do
193+
[[ ${#filtered[@]} -eq 0 ]] && return 0
194+
195+
# Start all tests in parallel
196+
for dir in "${filtered[@]}"; do
158197
test_package "$dir" &
159198
pids+=($!)
160199
done
161200

162-
# Wait for all and fail if any failed
163-
local failed=0
164-
for pid in "${pids[@]}"; do
165-
wait "$pid" || failed=1
201+
# Wait for ALL jobs to complete, track failures
202+
for i in "${!pids[@]}"; do
203+
if ! wait "${pids[$i]}"; then
204+
failed_packages+=("${filtered[$i]}")
205+
fi
166206
done
167207

168-
return $failed
208+
# Report failures with details
209+
if [[ ${#failed_packages[@]} -gt 0 ]]; then
210+
echo ""
211+
echo "╔════════════════════════════════════════════════════════════════╗"
212+
echo "${#failed_packages[@]} PACKAGE(S) FAILED"
213+
echo "╚════════════════════════════════════════════════════════════════╝"
214+
215+
for dir in "${failed_packages[@]}"; do
216+
local name=$(basename "$dir")
217+
local log="$LOGS_DIR/$name.log"
218+
extract_failure "$log" "$name"
219+
done
220+
221+
return 1
222+
fi
223+
224+
return 0
169225
}
170226

171227
# Main
172-
echo "Testing ${#TEST_PATHS[@]} packages (MIN_COVERAGE=${MIN_COVERAGE}%)"
228+
echo "Running ${#TIERS_TO_RUN[@]} tier(s) (MIN_COVERAGE=${MIN_COVERAGE}%)"
173229
echo "Excluded: $EXCLUDED"
174230
echo "Logs: $LOGS_DIR/"
175231
echo ""
176232

177-
if run_parallel; then
178-
echo ""
179-
echo "All tests passed"
180-
exit 0
233+
# Determine actual tier number for display
234+
if [[ -n "$TIER" ]]; then
235+
TIER_LABEL="TIER $TIER"
236+
elif [[ ${#PACKAGES[@]} -gt 0 ]]; then
237+
TIER_LABEL="CUSTOM"
181238
else
182-
echo ""
183-
echo "Tests failed"
184-
exit 1
239+
TIER_LABEL="ALL TIERS"
185240
fi
241+
242+
tier_num=1
243+
for tier_spec in "${TIERS_TO_RUN[@]}"; do
244+
read -ra tier_paths <<< "$tier_spec"
245+
246+
# Display label
247+
if [[ "$TIER_LABEL" == "ALL TIERS" ]]; then
248+
echo "=== TIER $tier_num: ${#tier_paths[@]} packages ==="
249+
else
250+
echo "=== $TIER_LABEL: ${#tier_paths[@]} packages ==="
251+
fi
252+
253+
if ! run_tier "${tier_paths[@]}"; then
254+
echo ""
255+
if [[ "$TIER_LABEL" == "ALL TIERS" ]]; then
256+
echo "TIER $tier_num FAILED - stopping"
257+
else
258+
echo "$TIER_LABEL FAILED"
259+
fi
260+
exit 1
261+
fi
262+
263+
echo ""
264+
((tier_num++))
265+
done
266+
267+
echo "All tests passed"
268+
exit 0

0 commit comments

Comments
 (0)