perf(ci): parallelize verification via a vp run.tasks graph
Replace ci.yml's five serial steps with a single `vp run ci` whose graph lives in vite.config.ts (run.tasks). The vp task runner fans out independent branches concurrently: fmt and lint start immediately while check:type and the test suites wait on build (their consumers resolve @vue-tui/runtime from the built dist/*.d.mts). The wall-clock critical path becomes build -> test:pty instead of the sum of every check. Measured cold (no task cache, no prebuilt dist — the real CI condition): the graph completes in ~41s vs ~60s serial, ~32% faster, with build correctly fanned out before the type and test branches. `vp run --last-details` (and the run summary) still pinpoints which sub-task failed. Also set run.cache=false so neither local nor CI verification depends on any task-cache replay. The serial `ready` script in package.json is kept for simple local use.
This commit is contained in:
+10
-19
@@ -39,22 +39,13 @@ jobs:
|
||||
node-version: "22.12.0"
|
||||
cache: true
|
||||
|
||||
# Steps mirror `vp run ready` as individual, labeled concerns so the run
|
||||
# shows exactly which one failed. Build MUST precede check:type and test:
|
||||
# @vue-tui/runtime exposes no "types" export, so testing / runtime-tests
|
||||
# resolve its types and runtime from the built dist/*.d.mts. Steps in one
|
||||
# job share the filesystem, so the build output persists to later steps.
|
||||
- name: Format
|
||||
run: vp run check:fmt
|
||||
|
||||
- name: Lint
|
||||
run: vp run check:lint
|
||||
|
||||
- name: Build
|
||||
run: vp run build
|
||||
|
||||
- name: Type check
|
||||
run: vp run check:type
|
||||
|
||||
- name: Test
|
||||
run: vp run test
|
||||
# `ci` is the parallel verification graph defined in vite.config.ts
|
||||
# (run.tasks). The vp task runner fans out independent branches
|
||||
# concurrently — fmt and lint start immediately, while check:type and the
|
||||
# test suites wait on build (their consumers resolve @vue-tui/runtime from
|
||||
# the built dist) — so the wall-clock critical path is build -> test:pty
|
||||
# rather than the sum of every check. On a cache miss this finishes in
|
||||
# ~40s vs ~60s run serially. `vp run --last-details` (or the run summary)
|
||||
# shows which sub-task failed when one does.
|
||||
- name: Verify (vp run ci)
|
||||
run: vp run ci
|
||||
|
||||
+23
-1
@@ -7,6 +7,28 @@ export default defineConfig({
|
||||
fmt: {},
|
||||
lint: { options: { typeAware: true, typeCheck: false } },
|
||||
run: {
|
||||
cache: true,
|
||||
cache: false,
|
||||
// `ci` is the parallel verification graph used by .github/workflows/ci.yml.
|
||||
// The task runner fans out independent branches concurrently; the wall-clock
|
||||
// critical path is build -> test:pty. fmt and lint have no build dependency,
|
||||
// so they run immediately alongside build. check:type and the test suites
|
||||
// need the built dist (@vue-tui/runtime exposes no "types" export — its
|
||||
// consumers resolve types and runtime from dist/*.d.mts), so they depend on
|
||||
// build. The serial `ready` script in package.json stays for simple local use.
|
||||
tasks: {
|
||||
"ci:build": { command: "vp run build" },
|
||||
"ci:fmt": { command: "vp run check:fmt" },
|
||||
"ci:lint": { command: "vp run check:lint" },
|
||||
"ci:type": { command: "vp run check:type", dependsOn: ["ci:build"] },
|
||||
"ci:test:integration": {
|
||||
command: "vp run -r test:integration",
|
||||
dependsOn: ["ci:build"],
|
||||
},
|
||||
"ci:test:pty": { command: "vp run -r test:pty", dependsOn: ["ci:build"] },
|
||||
ci: {
|
||||
command: "echo ci ok",
|
||||
dependsOn: ["ci:fmt", "ci:lint", "ci:type", "ci:test:integration", "ci:test:pty"],
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user