velocious 1.0.604 → 1.0.605
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -10
- package/build/cli/commands/test/timing-manifest/merge.js +14 -0
- package/build/environment-handlers/base.js +9 -0
- package/build/environment-handlers/node/cli/commands/test/timing-manifest/merge.js +108 -0
- package/build/environment-handlers/node/cli/commands/test.js +48 -7
- package/build/environment-handlers/node.js +10 -0
- package/build/src/cli/commands/test/timing-manifest/merge.d.ts +10 -0
- package/build/src/cli/commands/test/timing-manifest/merge.d.ts.map +1 -0
- package/build/src/cli/commands/test/timing-manifest/merge.js +13 -0
- package/build/src/environment-handlers/base.d.ts +6 -0
- package/build/src/environment-handlers/base.d.ts.map +1 -1
- package/build/src/environment-handlers/base.js +9 -1
- package/build/src/environment-handlers/node/cli/commands/test/timing-manifest/merge.d.ts +32 -0
- package/build/src/environment-handlers/node/cli/commands/test/timing-manifest/merge.d.ts.map +1 -0
- package/build/src/environment-handlers/node/cli/commands/test/timing-manifest/merge.js +97 -0
- package/build/src/environment-handlers/node/cli/commands/test.d.ts +3 -3
- package/build/src/environment-handlers/node/cli/commands/test.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/test.js +36 -9
- package/build/src/environment-handlers/node.d.ts +6 -0
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +10 -1
- package/build/src/testing/test-profile-output.d.ts +11 -0
- package/build/src/testing/test-profile-output.d.ts.map +1 -1
- package/build/src/testing/test-profile-output.js +21 -7
- package/build/src/testing/test-profiler.d.ts.map +1 -1
- package/build/src/testing/test-profiler.js +3 -2
- package/build/src/testing/test-suite-splitter.d.ts +33 -0
- package/build/src/testing/test-suite-splitter.d.ts.map +1 -1
- package/build/src/testing/test-suite-splitter.js +84 -8
- package/build/src/testing/timing-manifest.d.ts +94 -0
- package/build/src/testing/timing-manifest.d.ts.map +1 -0
- package/build/src/testing/timing-manifest.js +284 -0
- package/build/testing/test-profile-output.js +23 -8
- package/build/testing/test-profiler.js +2 -1
- package/build/testing/test-suite-splitter.js +91 -7
- package/build/testing/timing-manifest.js +346 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/scripts/bootstrap-provider-runtime.sh +249 -0
- package/scripts/verify-docker-dev-environment.js +219 -29
- package/src/cli/commands/test/timing-manifest/merge.js +14 -0
- package/src/environment-handlers/base.js +9 -0
- package/src/environment-handlers/node/cli/commands/test/timing-manifest/merge.js +108 -0
- package/src/environment-handlers/node/cli/commands/test.js +48 -7
- package/src/environment-handlers/node.js +10 -0
- package/src/testing/test-profile-output.js +23 -8
- package/src/testing/test-profiler.js +2 -1
- package/src/testing/test-suite-splitter.js +91 -7
- package/src/testing/timing-manifest.js +346 -0
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* Gap-less positional lists with automatic reordering via `actsAsList`, including models with numeric, string, or UUID primary keys (see [docs/acts-as-list.md](docs/acts-as-list.md))
|
|
27
27
|
* Rails-style nested-attribute writes on frontend-model `save()` (see [docs/nested-attributes.md](docs/nested-attributes.md))
|
|
28
28
|
* Async-aware test-data factories with inherited traits, graph-first native association autosave, metadata-aware override precedence, callbacks, sequences, linting, and a process-global reload-retention budget that bounds cache-busted re-import memory (see [docs/factories.md](docs/factories.md))
|
|
29
|
-
* Opt-in Benchmark-style test profiling with privacy-safe rich JSON
|
|
29
|
+
* Opt-in Benchmark-style test profiling with privacy-safe rich JSON, directly reusable duration-aware shard manifests, and strict generic shard-profile aggregation (see [docs/test-profiling.md](docs/test-profiling.md))
|
|
30
30
|
* Per-row association counts via `.withCount(...)`, including cohort-safe intersected filters, safe batching of structurally identical aggregates, and automatic IN-list chunking for large parent sets, on frontend and backend queries (see [docs/with-count.md](docs/with-count.md))
|
|
31
31
|
* Consumer-defined per-row SQL aggregates/computations via `.queryData(...)`, with compatible projections sharing a roundtrip while preserving declared alias-overwrite order and automatic IN-list chunking for large parent sets, on frontend and backend queries (see [docs/query-data.md](docs/query-data.md))
|
|
32
32
|
* Per-record ability checks via `.abilities(...)` on frontend queries + `record.can(action)` (see [docs/abilities.md](docs/abilities.md))
|
|
@@ -107,7 +107,7 @@ The checked-in root `Dockerfile` and `compose.yml` define one canonical `dev` se
|
|
|
107
107
|
|
|
108
108
|
Prerequisites: Docker with the Compose v2 plugin, and this repository checked out at `$DEV_HOME_PATH/velocious` (default `DEV_HOME_PATH`: `/home/dev`).
|
|
109
109
|
|
|
110
|
-
First-use setup: copy `.env.example` to the git-ignored `.env
|
|
110
|
+
First-use setup: copy `.env.example` to the git-ignored `.env`, set `GH_CONFIG_SOURCE_PATH` to an existing host GitHub CLI config directory, set `AI_PROVIDER_RUNTIME_SOURCE_PATH` to the dedicated writable provider runtime, and replace `AGENT_CONTEXT_SOURCE_PATH` with one exact immutable bundle directory:
|
|
111
111
|
|
|
112
112
|
```bash
|
|
113
113
|
cp .env.example .env
|
|
@@ -123,7 +123,7 @@ docker compose exec dev bash
|
|
|
123
123
|
scripts/docker-run.sh npm ci # one-off command in a disposable container
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
-
The dev service preserves the complete `$DEV_HOME_PATH` bind at `/home/dev`, so dependencies, caches, settings, and `node_modules` persist naturally across runs. Install dependencies with the normal package commands inside the service (for example `docker compose exec dev npm ci`), never at image build time.
|
|
126
|
+
The dev service preserves the complete `$DEV_HOME_PATH` bind at `/home/dev`, so dependencies, lane-local caches, settings, and `node_modules` persist naturally across runs. Codex, Kimi, and OpenCode authentication survives lane recreation through the dedicated provider-runtime bind, while `/opt/hermes-agent-context` supplies one read-only reviewed guide/skills bundle. Install dependencies with the normal package commands inside the service (for example `docker compose exec dev npm ci`), never at image build time.
|
|
127
127
|
|
|
128
128
|
Concurrent isolated instances use the standard Compose project-name contract plus a distinct development home per instance:
|
|
129
129
|
|
|
@@ -132,7 +132,7 @@ COMPOSE_PROJECT_NAME=velocious-review DEV_HOME_PATH=/srv/dev-homes/review \
|
|
|
132
132
|
docker compose up --build --detach dev
|
|
133
133
|
```
|
|
134
134
|
|
|
135
|
-
|
|
135
|
+
The authorized credential boundaries are the writable provider runtime and the read-only GitHub CLI config. The normal dev service mounts no npm credentials, SSH keys, `/opt/data`, mutable agent-context discovery links, or broad shared roots. At startup, the provider bootstrap requires real `.local` and `.local/share` runtime directories, validates and preserves the provider runtime's canonical relative aliases, serializes shared provider-link migration, then creates exact lane-home provider and `/opt/hermes-agent-context` discovery links, preserving conflicts only at those managed targets under `~/.provider-runtime-migration-backups/<timestamp>-<unique-suffix>/`. The preflight rejects resolved provider-runtime and agent-context sources that contain one another. Threadwire remains parent orchestration, with its provider executable overrides pointed directly at `/usr/local/bin/codex`, `/usr/local/bin/kimi`, and `/usr/local/bin/opencode`. See the setup guide for source-path preflight and the exact lane-local OpenCode state contract.
|
|
136
136
|
|
|
137
137
|
After changing the Docker artifacts, run the checked-in static contract verifier:
|
|
138
138
|
|
|
@@ -239,6 +239,10 @@ npx velocious test --profile-json tmp/test-profile.json \
|
|
|
239
239
|
--timing-manifest-output tmp/test-timings.json
|
|
240
240
|
npx velocious test --groups=4 --group-number=1 \
|
|
241
241
|
--timing-manifest tmp/test-timings.json
|
|
242
|
+
|
|
243
|
+
# After every shard wrote rich JSON, merge the complete set for the next run
|
|
244
|
+
npx velocious test:timing-manifest:merge --output tmp/test-timings.json \
|
|
245
|
+
tmp/profile-1.json tmp/profile-2.json tmp/profile-3.json tmp/profile-4.json
|
|
242
246
|
```
|
|
243
247
|
|
|
244
248
|
See [test profiling](docs/test-profiling.md) for lifecycle accounting, custom
|
|
@@ -327,12 +331,17 @@ separators:
|
|
|
327
331
|
}
|
|
328
332
|
```
|
|
329
333
|
|
|
330
|
-
Files absent from the manifest
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
334
|
+
Files absent from the manifest and zero-duration entries use the existing
|
|
335
|
+
deterministic heuristic; stale entries are ignored. When `--timing-manifest` is
|
|
336
|
+
explicitly supplied, its file must be readable and contain a plain JSON object
|
|
337
|
+
with canonical relative paths and finite non-negative durations. Invalid input
|
|
338
|
+
fails the command even without sharding flags. A compact
|
|
339
|
+
measured/heuristic/stale summary reports coverage.
|
|
340
|
+
The heuristic weights files by spec directory (`system/` = 20,
|
|
341
|
+
`frontend-models/` = 10, `controller/` = 3, default = 1) with a 2x multiplier
|
|
342
|
+
for `.browser-spec.js` files. The heaviest files are assigned first to the group
|
|
343
|
+
with the least accumulated weight, producing balanced wall-clock times across
|
|
344
|
+
groups.
|
|
336
345
|
|
|
337
346
|
The algorithm is deterministic: the same file list always produces the same
|
|
338
347
|
group assignments.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import BaseCommand from "../../../base-command.js"
|
|
4
|
+
|
|
5
|
+
/** CLI command for merging complete rich test-profile shards into timing history. */
|
|
6
|
+
export default class TestTimingManifestMerge extends BaseCommand {
|
|
7
|
+
/**
|
|
8
|
+
* Runs execute.
|
|
9
|
+
* @returns {Promise<ReturnType<typeof JSON.parse>>} - Resolves with the merged manifest.
|
|
10
|
+
*/
|
|
11
|
+
async execute() {
|
|
12
|
+
return await this.getConfiguration().getEnvironmentHandler().cliCommandsTestTimingManifestMerge(this)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -406,6 +406,15 @@ export default class VelociousEnvironmentHandlerBase {
|
|
|
406
406
|
throw new Error("cliCommandsTest not implemented")
|
|
407
407
|
}
|
|
408
408
|
|
|
409
|
+
/**
|
|
410
|
+
* Runs cli commands test timing manifest merge.
|
|
411
|
+
* @param {import("../cli/base-command.js").default} _command - Command.
|
|
412
|
+
* @returns {Promise<ReturnType<typeof JSON.parse>>} - Resolves with the command result.
|
|
413
|
+
*/
|
|
414
|
+
async cliCommandsTestTimingManifestMerge(_command) {
|
|
415
|
+
throw new Error("cliCommandsTestTimingManifestMerge not implemented")
|
|
416
|
+
}
|
|
417
|
+
|
|
409
418
|
/**
|
|
410
419
|
* Runs cli commands background jobs main.
|
|
411
420
|
* @param {import("../cli/base-command.js").default} _command - Command.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import BaseCommand from "../../../../../../cli/base-command.js"
|
|
4
|
+
import fs from "node:fs/promises"
|
|
5
|
+
import path from "node:path"
|
|
6
|
+
import { writeTimingManifest } from "../../../../../../testing/test-profile-output.js"
|
|
7
|
+
import { mergeTestProfileTimingManifests } from "../../../../../../testing/timing-manifest.js"
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {object} TimingManifestMergeArguments
|
|
11
|
+
* @property {string[]} inputPaths - Rich profile input paths.
|
|
12
|
+
* @property {string} outputPath - Plain timing manifest output path.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/** Node implementation for timing-manifest aggregation. */
|
|
16
|
+
export default class TestTimingManifestMerge extends BaseCommand {
|
|
17
|
+
/**
|
|
18
|
+
* Runs execute.
|
|
19
|
+
* @returns {Promise<Record<string, number>>} - Complete merged timing manifest.
|
|
20
|
+
*/
|
|
21
|
+
async execute() {
|
|
22
|
+
const {inputPaths, outputPath} = parseTimingManifestMergeArguments(this.processArgs || [], process.cwd())
|
|
23
|
+
const inputs = []
|
|
24
|
+
|
|
25
|
+
for (const inputPath of inputPaths) {
|
|
26
|
+
let content
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
content = await fs.readFile(inputPath, "utf8")
|
|
30
|
+
} catch (error) {
|
|
31
|
+
throw new Error(`Failed to read test profile: ${inputPath}`, {cause: error})
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let profile
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
profile = JSON.parse(content)
|
|
38
|
+
} catch (error) {
|
|
39
|
+
throw new Error(`Failed to parse test profile: ${inputPath}`, {cause: error})
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
inputs.push({profile, source: inputPath})
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const timingManifest = mergeTestProfileTimingManifests(inputs)
|
|
46
|
+
|
|
47
|
+
await writeTimingManifest({outputPath, timingManifest})
|
|
48
|
+
console.log(`Merged ${inputPaths.length} test profile shards into ${outputPath} (${Object.keys(timingManifest).length} files)`)
|
|
49
|
+
|
|
50
|
+
return timingManifest
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Recognizes one output option spelling.
|
|
56
|
+
* @param {string} argument - Current argument.
|
|
57
|
+
* @param {string | undefined} nextArgument - Following argument.
|
|
58
|
+
* @returns {{matched: boolean, skipNext: boolean, value: string | undefined}} - Parsed output option.
|
|
59
|
+
*/
|
|
60
|
+
function timingManifestOutputArgument(argument, nextArgument) {
|
|
61
|
+
if (argument === "--output") {
|
|
62
|
+
return {matched: true, skipNext: true, value: nextArgument}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (argument.startsWith("--output=")) {
|
|
66
|
+
return {matched: true, skipNext: false, value: argument.slice("--output=".length)}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return {matched: false, skipNext: false, value: undefined}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Parses strict merge arguments and resolves their paths.
|
|
74
|
+
* @param {string[]} processArgs - Raw CLI arguments, including command name.
|
|
75
|
+
* @param {string} cwd - Command working directory.
|
|
76
|
+
* @returns {TimingManifestMergeArguments} - Validated resolved paths.
|
|
77
|
+
*/
|
|
78
|
+
export function parseTimingManifestMergeArguments(processArgs, cwd) {
|
|
79
|
+
const commandName = processArgs[0] || "test:timing-manifest:merge"
|
|
80
|
+
const inputPaths = []
|
|
81
|
+
let outputPath
|
|
82
|
+
|
|
83
|
+
for (let index = 1; index < processArgs.length; index++) {
|
|
84
|
+
const argument = processArgs[index]
|
|
85
|
+
const outputArgument = timingManifestOutputArgument(argument, processArgs[index + 1])
|
|
86
|
+
|
|
87
|
+
if (outputArgument.matched) {
|
|
88
|
+
if (!outputArgument.value || outputArgument.value.startsWith("-")) throw new Error("Missing value for --output")
|
|
89
|
+
if (outputPath) throw new Error("--output may only be provided once")
|
|
90
|
+
outputPath = path.resolve(cwd, outputArgument.value)
|
|
91
|
+
if (outputArgument.skipNext) index++
|
|
92
|
+
continue
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (argument.startsWith("-")) throw new Error(`Unknown argument for ${commandName}: ${argument}`)
|
|
96
|
+
inputPaths.push(path.resolve(cwd, argument))
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (!outputPath) throw new Error("--output is required")
|
|
100
|
+
if (inputPaths.length === 0) throw new Error("At least one rich test profile input is required")
|
|
101
|
+
|
|
102
|
+
const uniqueInputPaths = new Set(inputPaths)
|
|
103
|
+
|
|
104
|
+
if (uniqueInputPaths.size !== inputPaths.length) throw new Error("Each rich test profile input must be provided once")
|
|
105
|
+
if (uniqueInputPaths.has(outputPath)) throw new Error("Timing manifest output must not overwrite an input profile")
|
|
106
|
+
|
|
107
|
+
return {inputPaths, outputPath}
|
|
108
|
+
}
|
|
@@ -10,6 +10,11 @@ import { formatTestProfileSummary, writeTestProfileOutputs } from "../../../../t
|
|
|
10
10
|
import TestRunner from "../../../../testing/test-runner.js"
|
|
11
11
|
import TestSuiteSplitter from "../../../../testing/test-suite-splitter.js"
|
|
12
12
|
import { normalizeExamplePatterns, parseFilters } from "../../../../testing/test-filter-parser.js"
|
|
13
|
+
import {
|
|
14
|
+
canonicalTimingManifestPath,
|
|
15
|
+
timingManifestFileSetHash,
|
|
16
|
+
validateTimingManifest
|
|
17
|
+
} from "../../../../testing/timing-manifest.js"
|
|
13
18
|
import { prepareSourcePeerPackage } from "../../source-peer-package.js"
|
|
14
19
|
|
|
15
20
|
export default class VelociousCliCommandsTest extends BaseCommand {
|
|
@@ -95,14 +100,28 @@ export default class VelociousCliCommandsTest extends BaseCommand {
|
|
|
95
100
|
|
|
96
101
|
try {
|
|
97
102
|
const discoverTestFiles = async () => {
|
|
103
|
+
const timingManifest = await loadTimingManifest(profileOptions.timingManifestPath)
|
|
98
104
|
let discoveredTestFiles = await testFilesFinder.findTestFiles()
|
|
105
|
+
const lineFilters = testFilesFinder.getLineFiltersByFile()
|
|
106
|
+
|
|
107
|
+
if (profiler) {
|
|
108
|
+
const discoveredFilePaths = discoveredTestFiles.map((filePath) => {
|
|
109
|
+
return canonicalTimingManifestPath(path.relative(directory, filePath))
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
profiler.setSelection({
|
|
113
|
+
discoveredFileCount: discoveredTestFiles.length,
|
|
114
|
+
hasLineFilters: Object.keys(lineFilters).length > 0,
|
|
115
|
+
pathBase: process.env.VELOCIOUS_TEST_DIR ? "test-directory" : "configuration-directory",
|
|
116
|
+
testFileSetHash: timingManifestFileSetHash(discoveredFilePaths)
|
|
117
|
+
})
|
|
118
|
+
}
|
|
99
119
|
|
|
100
120
|
if (groups !== undefined || groupNumber !== undefined) {
|
|
101
121
|
if (groups === undefined || groupNumber === undefined) {
|
|
102
122
|
throw new Error("Both --groups and --group-number must be provided together")
|
|
103
123
|
}
|
|
104
124
|
|
|
105
|
-
const timingManifest = await loadTimingManifest(profileOptions.timingManifestPath)
|
|
106
125
|
const splitter = new TestSuiteSplitter({
|
|
107
126
|
groups,
|
|
108
127
|
groupNumber,
|
|
@@ -111,6 +130,15 @@ export default class VelociousCliCommandsTest extends BaseCommand {
|
|
|
111
130
|
timingManifest
|
|
112
131
|
})
|
|
113
132
|
|
|
133
|
+
if (profileOptions.timingManifestPath) {
|
|
134
|
+
const coverage = splitter.getTimingManifestCoverage()
|
|
135
|
+
|
|
136
|
+
console.log(picocolors.cyan(
|
|
137
|
+
`Timing manifest coverage: measured=${coverage.measuredFiles} ` +
|
|
138
|
+
`heuristic=${coverage.heuristicFiles} stale=${coverage.staleEntries}`
|
|
139
|
+
))
|
|
140
|
+
}
|
|
141
|
+
|
|
114
142
|
discoveredTestFiles = splitter.getGroupFiles()
|
|
115
143
|
console.log(picocolors.cyan(`Running group ${groupNumber} of ${groups} (${discoveredTestFiles.length} files)`))
|
|
116
144
|
}
|
|
@@ -158,6 +186,9 @@ export default class VelociousCliCommandsTest extends BaseCommand {
|
|
|
158
186
|
process.once("SIGTERM", () => { void handleSignal("SIGTERM") })
|
|
159
187
|
|
|
160
188
|
await testRunner.prepare()
|
|
189
|
+
const effectiveExcludeTagCount = testRunner.getExcludeTagSet().size
|
|
190
|
+
|
|
191
|
+
profiler?.setSelection({excludeTagCount: effectiveExcludeTagCount})
|
|
161
192
|
|
|
162
193
|
if (testRunner.getTestsCount() === 0) {
|
|
163
194
|
await finalizeProfile("no-tests")
|
|
@@ -170,7 +201,7 @@ export default class VelociousCliCommandsTest extends BaseCommand {
|
|
|
170
201
|
const lineFilters = testRunner.getLineFilters()
|
|
171
202
|
const hasLineFilters = Object.keys(lineFilters).length > 0
|
|
172
203
|
const hasExampleFilters = examplePatterns.length > 0
|
|
173
|
-
const hasTagFilters = includeTags.length > 0 ||
|
|
204
|
+
const hasTagFilters = includeTags.length > 0 || effectiveExcludeTagCount > 0
|
|
174
205
|
|
|
175
206
|
if ((hasTagFilters || hasLineFilters || hasExampleFilters) && executedTests === 0) {
|
|
176
207
|
console.error(picocolors.red("\nNo tests matched the provided filters"))
|
|
@@ -277,20 +308,30 @@ export function resolveTestProfileOptions({cwd, profile, profileJsonPath, timing
|
|
|
277
308
|
}
|
|
278
309
|
|
|
279
310
|
/**
|
|
280
|
-
* Loads an
|
|
311
|
+
* Loads and validates an explicitly supplied plain JSON timing manifest.
|
|
281
312
|
* @param {string | undefined} timingManifestPath - Timing manifest path.
|
|
282
|
-
* @returns {Promise<
|
|
313
|
+
* @returns {Promise<Record<string, number> | undefined>} - Canonical manifest, or undefined when not requested.
|
|
283
314
|
*/
|
|
284
315
|
export async function loadTimingManifest(timingManifestPath) {
|
|
285
316
|
if (!timingManifestPath) return undefined
|
|
286
317
|
|
|
318
|
+
let content
|
|
319
|
+
|
|
287
320
|
try {
|
|
288
|
-
|
|
321
|
+
content = await fs.readFile(timingManifestPath, "utf8")
|
|
289
322
|
} catch (error) {
|
|
290
|
-
|
|
323
|
+
throw new Error(`Failed to read timing manifest: ${timingManifestPath}`, {cause: error})
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
let parsed
|
|
291
327
|
|
|
292
|
-
|
|
328
|
+
try {
|
|
329
|
+
parsed = JSON.parse(content)
|
|
330
|
+
} catch (error) {
|
|
331
|
+
throw new Error(`Failed to parse timing manifest: ${timingManifestPath}`, {cause: error})
|
|
293
332
|
}
|
|
333
|
+
|
|
334
|
+
return validateTimingManifest(parsed, {source: `Timing manifest ${timingManifestPath}`})
|
|
294
335
|
}
|
|
295
336
|
|
|
296
337
|
/**
|
|
@@ -14,6 +14,7 @@ import CliCommandsLintRelationships from "./node/cli/commands/lint/relationships
|
|
|
14
14
|
import CliCommandsRoutes from "./node/cli/commands/routes.js"
|
|
15
15
|
import CliCommandsServer from "./node/cli/commands/server.js"
|
|
16
16
|
import CliCommandsTest from "./node/cli/commands/test.js"
|
|
17
|
+
import CliCommandsTestTimingManifestMerge from "./node/cli/commands/test/timing-manifest/merge.js"
|
|
17
18
|
import CliCommandsBackgroundJobsMain from "./node/cli/commands/background-jobs-main.js"
|
|
18
19
|
import CliCommandsBackgroundJobsWorker from "./node/cli/commands/background-jobs-worker.js"
|
|
19
20
|
import CliCommandsBackgroundJobsRunner from "./node/cli/commands/background-jobs-runner.js"
|
|
@@ -830,6 +831,15 @@ export default class VelociousEnvironmentHandlerNode extends Base{
|
|
|
830
831
|
return await this.forwardCommand(command, CliCommandsTest)
|
|
831
832
|
}
|
|
832
833
|
|
|
834
|
+
/**
|
|
835
|
+
* Runs cli commands test timing manifest merge.
|
|
836
|
+
* @param {import("../cli/base-command.js").default} command - Command.
|
|
837
|
+
* @returns {Promise<ReturnType<typeof JSON.parse>>} - Resolves with the command result.
|
|
838
|
+
*/
|
|
839
|
+
async cliCommandsTestTimingManifestMerge(command) {
|
|
840
|
+
return await this.forwardCommand(command, CliCommandsTestTimingManifestMerge)
|
|
841
|
+
}
|
|
842
|
+
|
|
833
843
|
/**
|
|
834
844
|
* Runs cli commands background jobs main.
|
|
835
845
|
* @param {import("../cli/base-command.js").default} command - Command.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import BaseCommand from "../../../base-command.js";
|
|
2
|
+
/** CLI command for merging complete rich test-profile shards into timing history. */
|
|
3
|
+
export default class TestTimingManifestMerge extends BaseCommand {
|
|
4
|
+
/**
|
|
5
|
+
* Runs execute.
|
|
6
|
+
* @returns {Promise<ReturnType<typeof JSON.parse>>} - Resolves with the merged manifest.
|
|
7
|
+
*/
|
|
8
|
+
execute(): Promise<ReturnType<typeof JSON.parse>>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/commands/test/timing-manifest/merge.js"],"names":[],"mappings":"AAEA,OAAO,WAAW,MAAM,0BAA0B,CAAA;AAElD,qFAAqF;AACrF,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,WAAW;IAC9D;;;OAGG;IACG,OAAO,IAFA,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAIlD;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import BaseCommand from "../../../base-command.js";
|
|
3
|
+
/** CLI command for merging complete rich test-profile shards into timing history. */
|
|
4
|
+
export default class TestTimingManifestMerge extends BaseCommand {
|
|
5
|
+
/**
|
|
6
|
+
* Runs execute.
|
|
7
|
+
* @returns {Promise<ReturnType<typeof JSON.parse>>} - Resolves with the merged manifest.
|
|
8
|
+
*/
|
|
9
|
+
async execute() {
|
|
10
|
+
return await this.getConfiguration().getEnvironmentHandler().cliCommandsTestTimingManifestMerge(this);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL3Rlc3QvdGltaW5nLW1hbmlmZXN0L21lcmdlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFdBQVcsTUFBTSwwQkFBMEIsQ0FBQTtBQUVsRCxxRkFBcUY7QUFDckYsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBd0IsU0FBUSxXQUFXO0lBQzlEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1gsT0FBTyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdkcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlQ29tbWFuZCBmcm9tIFwiLi4vLi4vLi4vYmFzZS1jb21tYW5kLmpzXCJcblxuLyoqIENMSSBjb21tYW5kIGZvciBtZXJnaW5nIGNvbXBsZXRlIHJpY2ggdGVzdC1wcm9maWxlIHNoYXJkcyBpbnRvIHRpbWluZyBoaXN0b3J5LiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdFRpbWluZ01hbmlmZXN0TWVyZ2UgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIC8qKlxuICAgKiBSdW5zIGV4ZWN1dGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBtZXJnZWQgbWFuaWZlc3QuXG4gICAqL1xuICBhc3luYyBleGVjdXRlKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKS5jbGlDb21tYW5kc1Rlc3RUaW1pbmdNYW5pZmVzdE1lcmdlKHRoaXMpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -286,6 +286,12 @@ export default class VelociousEnvironmentHandlerBase {
|
|
|
286
286
|
* @returns {Promise<ReturnType<typeof JSON.parse>>} - Resolves with the command result.
|
|
287
287
|
*/
|
|
288
288
|
cliCommandsTest(_command: import("../cli/base-command.js").default): Promise<ReturnType<typeof JSON.parse>>;
|
|
289
|
+
/**
|
|
290
|
+
* Runs cli commands test timing manifest merge.
|
|
291
|
+
* @param {import("../cli/base-command.js").default} _command - Command.
|
|
292
|
+
* @returns {Promise<ReturnType<typeof JSON.parse>>} - Resolves with the command result.
|
|
293
|
+
*/
|
|
294
|
+
cliCommandsTestTimingManifestMerge(_command: import("../cli/base-command.js").default): Promise<ReturnType<typeof JSON.parse>>;
|
|
289
295
|
/**
|
|
290
296
|
* Runs cli commands background jobs main.
|
|
291
297
|
* @param {import("../cli/base-command.js").default} _command - Command.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/base.js"],"names":[],"mappings":"AAOG,YAAkB,qBAAqB,GACvC;;;;IAAmB,IAAI,EAAZ,MAAM,CACjB;;;;IAAmB,IAAI,EAAZ,MAAM,CACnB;CAAA,CAAA;AAIE,YAAkB,mBAAmB,GACrC;;;;IAAmB,IAAI,EAAZ,MAAM,CACjB;;;;IAAoB,QAAQ,AAA5B,CACA,EADW,MAAM,CACjB;;;;IAAmB,kBAAkB,EAA1B,MAAM,CACjB;;;;IAAmB,IAAI,EAAZ,MAAM,CACnB;CAAA,CAAA;AAdD;;;;;GAKG;AAEH;;;;;;;GAOG;AAEH,MAAM,CAAC,OAAO,OAAO,+BAA+B;IAwM3C,qBAAqB;IAwBrB,eAAe;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/base.js"],"names":[],"mappings":"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"}
|