Skip to content

Commit e56f68c

Browse files
committed
wip: test-parallel-execute-system-tests
1 parent 2a6aaff commit e56f68c

2 files changed

Lines changed: 66 additions & 53 deletions

File tree

.kokoro/presubmit/system.cfg

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,49 @@ env_vars: {
1010
key: "BIGFRAMES_TEST_PROJECT"
1111
value: "bigframes-testing"
1212
}
13+
14+
env_vars_matrix {
15+
key: "PACKAGE_NAME"
16+
value: "bigframes"
17+
value: "bigquery-magics"
18+
value: "django-google-spanner"
19+
value: "gapic-generator"
20+
value: "google-auth"
21+
value: "google-cloud-access-approval"
22+
value: "google-cloud-automl"
23+
value: "google-cloud-bigquery"
24+
value: "google-cloud-bigquery-connection"
25+
value: "google-cloud-bigquery-datatransfer"
26+
value: "google-cloud-bigquery-reservation"
27+
value: "google-cloud-bigquery-storage"
28+
value: "google-cloud-bigtable"
29+
value: "google-cloud-compute"
30+
value: "google-cloud-container"
31+
value: "google-cloud-dataproc"
32+
value: "google-cloud-datastore"
33+
value: "google-cloud-dlp"
34+
value: "google-cloud-dns"
35+
value: "google-cloud-error-reporting"
36+
value: "google-cloud-firestore"
37+
value: "google-cloud-kms"
38+
value: "google-cloud-logging"
39+
value: "google-cloud-monitoring"
40+
value: "google-cloud-ndb"
41+
value: "google-cloud-os-config"
42+
value: "google-cloud-pubsub"
43+
value: "google-cloud-scheduler"
44+
value: "google-cloud-spanner"
45+
value: "google-cloud-spanner-dbapi-driver"
46+
value: "google-cloud-speech"
47+
value: "google-cloud-storage"
48+
value: "google-cloud-tasks"
49+
value: "google-cloud-testutils"
50+
value: "google-cloud-texttospeech"
51+
value: "google-cloud-translate"
52+
value: "google-cloud-videointelligence"
53+
value: "google-cloud-vision"
54+
value: "google-resumable-media"
55+
value: "pandas-gbq"
56+
value: "sqlalchemy-bigquery"
57+
value: "sqlalchemy-spanner"
58+
}

.kokoro/system.sh

Lines changed: 20 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -158,60 +158,27 @@ for path in `find 'packages' \
158158
fi
159159
done
160160

161-
if [ -n "$PACKAGES_TO_TEST" ]; then
162-
export -f run_package_test
163-
export system_test_script PROJECT_ROOT KOKORO_GFILE_DIR
164-
165-
# 1. DYNAMIC ROUTING: Automatically detect which packages are CPU hogs by checking if they install pytest-xdist or hardcode workers
166-
LIGHT_TO_TEST=""
167-
HEAVY_TO_TEST=""
168-
for pkg in $PACKAGES_TO_TEST; do
169-
if grep -qE "pytest-xdist|-n=auto|-n=[0-9]+" "packages/$pkg/noxfile.py" "packages/$pkg/setup.py" 2>/dev/null; then
170-
HEAVY_TO_TEST="$HEAVY_TO_TEST $pkg"
171-
else
172-
LIGHT_TO_TEST="$LIGHT_TO_TEST $pkg"
173-
fi
174-
done
175-
176-
# 2. PARALLEL LANE (Live Streaming): Run light packages with a parallel job queue.
177-
# We prefix every line with the package name so output streams LIVE and remains readable.
178-
if [ -n "$LIGHT_TO_TEST" ]; then
179-
echo "============================================================"
180-
echo "Running Lightweight Packages in Parallel (4 workers max)"
181-
echo "============================================================"
182-
for pkg in $LIGHT_TO_TEST; do
183-
(
184-
timeout 15m bash -c "run_package_test \"$pkg\" < /dev/null" 2>&1 | awk -v prefix="[$pkg]" '{print prefix, $0}'
185-
if [ ${PIPESTATUS[0]} -ne 0 ]; then touch ".failed_$pkg"; fi
186-
) &
187-
# Limit parallel background jobs to 4
188-
while [ $(jobs -r | wc -l) -ge 4 ]; do sleep 1; done
189-
done
190-
wait # Wait for all parallel jobs to finish
191-
fi
192-
193-
# 3. SEQUENTIAL VIP LANE: Run heavy packages one-by-one so they have 100% of the VM resources.
194-
if [ -n "$HEAVY_TO_TEST" ]; then
195-
echo "============================================================"
196-
echo "Running CPU-Intensive Packages Sequentially"
197-
echo "============================================================"
198-
for pkg in $HEAVY_TO_TEST; do
199-
if [ -n "$pkg" ]; then
200-
echo "[$pkg] Starting sequential execution..."
201-
timeout 25m bash -c "run_package_test \"$pkg\" < /dev/null" 2>&1 | awk -v prefix="[$pkg]" '{print prefix, $0}'
202-
if [ ${PIPESTATUS[0]} -ne 0 ]; then touch ".failed_$pkg"; fi
203-
fi
204-
done
205-
fi
161+
if [ -z "$PACKAGE_NAME" ]; then
162+
echo "Error: PACKAGE_NAME environment variable is not set."
163+
echo "This script expects to be run in a Kokoro Matrix where PACKAGE_NAME is injected."
164+
exit 1
165+
fi
206166

207-
# 4. FAIL STATE EVALUATION
208-
for failed_marker in .failed_*; do
209-
if [ -f "$failed_marker" ]; then
210-
failed_pkg="${failed_marker#.failed_}"
211-
echo "--- FAILED: $failed_pkg ---"
212-
RETVAL=1
213-
fi
214-
done
167+
if [[ " $PACKAGES_TO_TEST " =~ " $PACKAGE_NAME " ]]; then
168+
echo "============================================================"
169+
echo "Package $PACKAGE_NAME was modified. Running system tests..."
170+
echo "============================================================"
171+
export system_test_script PROJECT_ROOT KOKORO_GFILE_DIR
172+
173+
# Run the system test natively. It gets 100% of this VM's CPU.
174+
run_package_test "$PACKAGE_NAME"
175+
RETVAL=$?
176+
else
177+
echo "============================================================"
178+
echo "Package $PACKAGE_NAME was not modified in this PR."
179+
echo "Fast-Failing: Exiting early to save Google compute quota."
180+
echo "============================================================"
181+
exit 0
215182
fi
216183

217184
exit ${RETVAL}

0 commit comments

Comments
 (0)