Skip to content

Commit 998c420

Browse files
committed
ci: parallelize regression witnesses + fix go/npm caches
The witness batch ran 28 triage tools sequentially for ~985s of a ~21.5min run. Split into three LPT-balanced groups (from measured per-tool CI durations) run concurrently on isolated tools copies (harness lock is per tools-dir parent), with vendor//lib//native symlinked in for tools that boot the bridge in-process, and group starts staggered 15s to spread the tsserver boot spike. Local smoke of the exact script: 28/28 green, 985s -> 374s wall (~2.6x). Also: setup-go cache-dependency-path=typescript-go/go.sum (the default go.sum-at-root pattern never matched, so Go module caching never restored — the 'Restore cache failed' annotation), and setup-node npm cache for the three lockfiles.
1 parent 5f079ee commit 998c420

1 file changed

Lines changed: 46 additions & 37 deletions

File tree

‎.github/workflows/ci.yml‎

Lines changed: 46 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,16 @@ jobs:
2424
- uses: actions/setup-node@v4
2525
with:
2626
node-version: 24
27+
cache: npm
28+
cache-dependency-path: |
29+
package-lock.json
30+
typescript/package-lock.json
31+
typescript-go/package-lock.json
2732
2833
- uses: actions/setup-go@v5
2934
with:
3035
go-version: "1.26" # typescript-go/go.mod
36+
cache-dependency-path: typescript-go/go.sum
3137

3238
- name: Install dependencies
3339
run: npm ci
@@ -107,44 +113,47 @@ jobs:
107113
VOLAR_ROOT: ${{ runner.temp }}/volar
108114
STOCK_TSSERVER_PATH: ${{ runner.temp }}/volar-stock/package/lib/tsserver.js
109115
run: |
110-
failed=()
111-
for w in \
112-
triage-sim-xfile \
113-
triage-xrefs-diag-variants \
114-
triage-qi-delete-min \
115-
triage-sim-edit \
116-
triage-quickinfo-emptyparity \
117-
triage-refs-exportspec \
118-
triage-tostring-gtd-vue \
119-
triage-defineprops-refs \
120-
triage-completion-parity \
121-
triage-f2hl-augment \
122-
triage-f2hl-typesref \
123-
triage-f2hl-jsdoc \
124-
triage-f2hl-defaultkw \
125-
triage-f2qi-names \
126-
triage-geterr-5823 \
127-
triage-f2r5-defcases \
128-
triage-f2r6-libref \
129-
triage-f2r6-samevue \
130-
triage-f2r6-xvue \
131-
triage-completion-details-array \
132-
triage-adv6a-jsx-spelling \
133-
triage-adv6b-generic-sig \
134-
triage-ambient-rpc-fallback \
135-
triage-impl-kind \
136-
triage-rpcsym-nameless \
137-
triage-rpcsym-adversarial \
138-
triage-orphan-leak \
139-
triage-parent-watch-acceptance \
140-
; do
141-
echo "=== $w ==="
142-
node "tools/$w.mjs" || failed+=("$w")
116+
# Parallel groups on isolated tools copies: the harness lock lives at
117+
# <toolsDir>/../.tnb-harness.lock, so concurrent tools from one
118+
# tools/ dir would serialize. Groups are LPT-balanced from measured
119+
# per-tool durations (~985s sequential -> ~330s per group). vendor/
120+
# lib/ native/ are symlinked into each copy for tools that boot the
121+
# bridge in-process (they resolve the repo from import.meta.dirname/..).
122+
# Starts are staggered to spread the tsserver boot spike.
123+
group1="triage-f2qi-names triage-xrefs-diag-variants triage-tostring-gtd-vue triage-adv6b-generic-sig triage-sim-edit triage-f2hl-jsdoc triage-completion-details-array triage-refs-exportspec"
124+
group2="triage-f2r5-defcases triage-f2r6-samevue triage-f2r6-libref triage-f2r6-xvue triage-sim-xfile triage-f2hl-typesref triage-geterr-5823 triage-quickinfo-emptyparity triage-ambient-rpc-fallback triage-completion-parity"
125+
group3="triage-qi-delete-min triage-defineprops-refs triage-impl-kind triage-rpcsym-nameless triage-rpcsym-adversarial triage-f2hl-augment triage-orphan-leak triage-parent-watch-acceptance triage-f2hl-defaultkw triage-adv6a-jsx-spelling"
126+
pids=()
127+
i=0
128+
for group in "$group1" "$group2" "$group3"; do
129+
i=$((i + 1))
130+
rm -rf "/tmp/tnb-wg$i"
131+
mkdir -p "/tmp/tnb-wg$i"
132+
cp -R tools "/tmp/tnb-wg$i/tools"
133+
ln -sfn "$GITHUB_WORKSPACE/vendor" "/tmp/tnb-wg$i/vendor"
134+
ln -sfn "$GITHUB_WORKSPACE/lib" "/tmp/tnb-wg$i/lib"
135+
ln -sfn "$GITHUB_WORKSPACE/native" "/tmp/tnb-wg$i/native"
136+
(
137+
failed=()
138+
for w in $group; do
139+
echo "=== [wg$i] $w ==="
140+
(cd "/tmp/tnb-wg$i/tools" && node "$w.mjs") || failed+=("$w")
141+
done
142+
if ((${#failed[@]})); then
143+
echo "WG$i FAILURES (${#failed[@]}): ${failed[*]}"
144+
exit 1
145+
fi
146+
) > "/tmp/tnb-wg$i.log" 2>&1 &
147+
pids+=($!)
148+
sleep 15
143149
done
144-
if ((${#failed[@]})); then
145-
echo "WITNESS FAILURES (${#failed[@]}): ${failed[*]}"
146-
exit 1
147-
fi
150+
rc=0
151+
for p in "${pids[@]}"; do wait "$p" || rc=1; done
152+
for j in 1 2 3; do
153+
echo "=== witness group $j (tail) ==="
154+
tail -5 "/tmp/tnb-wg$j.log" || true
155+
done
156+
exit $rc
148157
149158
- name: sourcefile-guard
150159
env:

0 commit comments

Comments
 (0)