@quenty/nevermore-cli 4.19.0 → 4.19.1-canary.664.c5fd0e8.0
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/CHANGELOG.md +17 -0
- package/build-scripts/combine-test-places.luau +121 -0
- package/dist/commands/batch-command/batch-test-command.d.ts +3 -0
- package/dist/commands/batch-command/batch-test-command.d.ts.map +1 -1
- package/dist/commands/batch-command/batch-test-command.js +27 -5
- package/dist/commands/batch-command/batch-test-command.js.map +1 -1
- package/dist/utils/batch/batch-runner.js +1 -1
- package/dist/utils/batch/batch-runner.js.map +1 -1
- package/dist/utils/job-context/batch-script-job-context.d.ts +44 -0
- package/dist/utils/job-context/batch-script-job-context.d.ts.map +1 -0
- package/dist/utils/job-context/batch-script-job-context.js +196 -0
- package/dist/utils/job-context/batch-script-job-context.js.map +1 -0
- package/dist/utils/job-context/cloud-job-context.d.ts.map +1 -1
- package/dist/utils/job-context/cloud-job-context.js +5 -2
- package/dist/utils/job-context/cloud-job-context.js.map +1 -1
- package/dist/utils/job-context/index.d.ts +1 -0
- package/dist/utils/job-context/index.d.ts.map +1 -1
- package/dist/utils/job-context/index.js +1 -0
- package/dist/utils/job-context/index.js.map +1 -1
- package/dist/utils/testing/parsers/batch-log-parser.d.ts +21 -0
- package/dist/utils/testing/parsers/batch-log-parser.d.ts.map +1 -0
- package/dist/utils/testing/parsers/batch-log-parser.js +115 -0
- package/dist/utils/testing/parsers/batch-log-parser.js.map +1 -0
- package/dist/utils/testing/runner/combined-project-generator.d.ts +27 -0
- package/dist/utils/testing/runner/combined-project-generator.d.ts.map +1 -0
- package/dist/utils/testing/runner/combined-project-generator.js +99 -0
- package/dist/utils/testing/runner/combined-project-generator.js.map +1 -0
- package/package.json +2 -2
- package/src/commands/batch-command/batch-test-command.ts +37 -5
- package/src/utils/batch/batch-runner.ts +1 -1
- package/src/utils/job-context/batch-script-job-context.ts +299 -0
- package/src/utils/job-context/cloud-job-context.ts +7 -7
- package/src/utils/job-context/index.ts +1 -0
- package/src/utils/testing/parsers/batch-log-parser.ts +158 -0
- package/src/utils/testing/runner/combined-project-generator.ts +176 -0
- package/templates/batch-test-runner.luau +130 -0
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,23 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [4.19.1-canary.664.c5fd0e8.0](https://github.com/Quenty/Nevermore/compare/@quenty/nevermore-cli@4.19.0...@quenty/nevermore-cli@4.19.1-canary.664.c5fd0e8.0) (2026-02-19)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* Fix test execution and parsing ([d744687](https://github.com/Quenty/Nevermore/commit/d744687e0ecf92dafc5b3315341d666ed378f535))
|
|
12
|
+
* Infinite concurrency is default ([83ae3f7](https://github.com/Quenty/Nevermore/commit/83ae3f7c4787f98f4b69cf2ccdcff5566c6e7339))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* **cli:** add aggregated batch test execution ([f984a43](https://github.com/Quenty/Nevermore/commit/f984a43d3f51526ab96cb11107e761d73de05b63))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
6
23
|
# [4.19.0](https://github.com/Quenty/Nevermore/compare/@quenty/nevermore-cli@4.18.0...@quenty/nevermore-cli@4.19.0) (2026-02-18)
|
|
7
24
|
|
|
8
25
|
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
-- combine-test-places.luau
|
|
2
|
+
-- Merges individually-built test .rbxl files into a single combined place.
|
|
3
|
+
--
|
|
4
|
+
-- Usage: lune run combine-test-places.luau <outputPath> <slug1> <rbxl1> <scriptPath1> [<slug2> <rbxl2> <scriptPath2> ...]
|
|
5
|
+
--
|
|
6
|
+
-- For each triple (slug, rbxl, scriptPath):
|
|
7
|
+
-- 1. Deserializes the .rbxl
|
|
8
|
+
-- 2. Reparents SSS children (the package root) into the combined SSS
|
|
9
|
+
-- 3. Reads the test script file and creates a Script under RS._BatchScripts
|
|
10
|
+
|
|
11
|
+
local fs = require("@lune/fs")
|
|
12
|
+
local process = require("@lune/process")
|
|
13
|
+
local roblox = require("@lune/roblox")
|
|
14
|
+
|
|
15
|
+
local outputPath = process.args[1]
|
|
16
|
+
if not outputPath then
|
|
17
|
+
print("Usage: lune run combine-test-places.luau <outputPath> <slug> <rbxl> <scriptPath> ...")
|
|
18
|
+
process.exit(1)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
-- Parse remaining args as triples: slug, rbxlPath, scriptPath
|
|
22
|
+
local packages = {}
|
|
23
|
+
local i = 2
|
|
24
|
+
while i + 2 <= #process.args do
|
|
25
|
+
table.insert(packages, {
|
|
26
|
+
slug = process.args[i],
|
|
27
|
+
rbxlPath = process.args[i + 1],
|
|
28
|
+
scriptPath = process.args[i + 2],
|
|
29
|
+
})
|
|
30
|
+
i = i + 3
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
if #packages == 0 then
|
|
34
|
+
print("No packages specified")
|
|
35
|
+
process.exit(1)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
-- Use the first package's place as the base (preserves DataModel properties)
|
|
39
|
+
local baseContents = fs.readFile(packages[1].rbxlPath)
|
|
40
|
+
local game = roblox.deserializePlace(baseContents)
|
|
41
|
+
local sss = game:GetService("ServerScriptService")
|
|
42
|
+
|
|
43
|
+
-- Enable LoadStringEnabled on SSS
|
|
44
|
+
sss:SetAttribute("LoadStringEnabled", true)
|
|
45
|
+
|
|
46
|
+
-- Create _BatchScripts folder in ReplicatedStorage
|
|
47
|
+
local rs = game:GetService("ReplicatedStorage")
|
|
48
|
+
local batchScriptsFolder = roblox.Instance.new("Folder")
|
|
49
|
+
batchScriptsFolder.Name = "_BatchScripts"
|
|
50
|
+
batchScriptsFolder.Parent = rs
|
|
51
|
+
|
|
52
|
+
-- Process the first package (already loaded as the base)
|
|
53
|
+
do
|
|
54
|
+
local pkg = packages[1]
|
|
55
|
+
|
|
56
|
+
-- SSS children are already in place from the base build.
|
|
57
|
+
-- Read the test script and add to _BatchScripts.
|
|
58
|
+
local scriptSource = fs.readFile(pkg.scriptPath)
|
|
59
|
+
local scriptInst = roblox.Instance.new("Script")
|
|
60
|
+
scriptInst.Name = pkg.slug
|
|
61
|
+
scriptInst:AddTag("_BatchTest_" .. pkg.slug)
|
|
62
|
+
local ok, err = pcall(function()
|
|
63
|
+
(scriptInst :: any).Source = scriptSource
|
|
64
|
+
end)
|
|
65
|
+
if not ok then
|
|
66
|
+
warn("[CombinePlaces] Cannot set Source on " .. pkg.slug .. ": " .. tostring(err))
|
|
67
|
+
scriptInst:SetAttribute("ScriptSource", scriptSource)
|
|
68
|
+
end
|
|
69
|
+
scriptInst.Parent = batchScriptsFolder
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
-- Process remaining packages: deserialize each and reparent SSS children.
|
|
73
|
+
-- NOTE: ObjectValues (links) within each package's subtree are preserved when the
|
|
74
|
+
-- whole subtree is reparented as a unit. This works because all ObjectValue targets
|
|
75
|
+
-- are siblings within the same tree. If this breaks in a future Lune version, the
|
|
76
|
+
-- fallback is to resolve ObjectValues after reparenting via Name/path lookups.
|
|
77
|
+
-- See docs/gotchas/tooling.md for details.
|
|
78
|
+
for idx = 2, #packages do
|
|
79
|
+
local pkg = packages[idx]
|
|
80
|
+
|
|
81
|
+
local contents = fs.readFile(pkg.rbxlPath)
|
|
82
|
+
local pkgGame = roblox.deserializePlace(contents)
|
|
83
|
+
local pkgSSS = pkgGame:GetService("ServerScriptService")
|
|
84
|
+
|
|
85
|
+
-- Reparent all SSS children (non-recursively, just move the roots)
|
|
86
|
+
for _, child in pkgSSS:GetChildren() do
|
|
87
|
+
-- Skip Script instances (these are test entry points, not package roots)
|
|
88
|
+
if child.ClassName == "Script" and child.Name == "Script" then
|
|
89
|
+
continue
|
|
90
|
+
end
|
|
91
|
+
child.Parent = sss
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
-- Read the test script and add to _BatchScripts
|
|
95
|
+
local scriptSource = fs.readFile(pkg.scriptPath)
|
|
96
|
+
local scriptInst = roblox.Instance.new("Script")
|
|
97
|
+
scriptInst.Name = pkg.slug
|
|
98
|
+
scriptInst:AddTag("_BatchTest_" .. pkg.slug)
|
|
99
|
+
local ok, err = pcall(function()
|
|
100
|
+
(scriptInst :: any).Source = scriptSource
|
|
101
|
+
end)
|
|
102
|
+
if not ok then
|
|
103
|
+
warn("[CombinePlaces] Cannot set Source on " .. pkg.slug .. ": " .. tostring(err))
|
|
104
|
+
scriptInst:SetAttribute("ScriptSource", scriptSource)
|
|
105
|
+
end
|
|
106
|
+
scriptInst.Parent = batchScriptsFolder
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
-- Also remove any Script instances from the base build's SSS
|
|
110
|
+
-- (the batch runner uses loadstring, not auto-executed scripts)
|
|
111
|
+
for _, child in sss:GetChildren() do
|
|
112
|
+
if child.ClassName == "Script" and child.Name == "Script" then
|
|
113
|
+
child.Parent = nil
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
-- Serialize and write
|
|
118
|
+
local output = roblox.serializePlace(game)
|
|
119
|
+
fs.writeFile(outputPath, output)
|
|
120
|
+
|
|
121
|
+
print("[CombinePlaces] Combined " .. #packages .. " packages into " .. outputPath)
|
|
@@ -9,6 +9,9 @@ interface BatchTestArgs extends NevermoreGlobalArgs {
|
|
|
9
9
|
output?: string;
|
|
10
10
|
limit?: number;
|
|
11
11
|
logs?: boolean;
|
|
12
|
+
aggregated?: boolean;
|
|
13
|
+
batchPlaceId?: number;
|
|
14
|
+
batchUniverseId?: number;
|
|
12
15
|
}
|
|
13
16
|
export declare const batchTestCommand: CommandModule<NevermoreGlobalArgs, BatchTestArgs>;
|
|
14
17
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-test-command.d.ts","sourceRoot":"","sources":["../../../src/commands/batch-command/batch-test-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"batch-test-command.d.ts","sourceRoot":"","sources":["../../../src/commands/batch-command/batch-test-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAmChE,UAAU,aAAc,SAAQ,mBAAmB;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAC1C,mBAAmB,EACnB,aAAa,CAoEd,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { OutputHelper } from '@quenty/cli-output-helpers';
|
|
2
2
|
import { getApiKeyAsync } from '../../utils/auth/credential-store.js';
|
|
3
3
|
import { runBatchAsync } from '../../utils/batch/batch-runner.js';
|
|
4
|
-
import { CloudJobContext, LocalJobContext, } from '../../utils/job-context/index.js';
|
|
4
|
+
import { BatchScriptJobContext, CloudJobContext, LocalJobContext, } from '../../utils/job-context/index.js';
|
|
5
5
|
import { OpenCloudClient } from '../../utils/open-cloud/open-cloud-client.js';
|
|
6
6
|
import { RateLimiter } from '../../utils/open-cloud/rate-limiter.js';
|
|
7
7
|
import { discoverAllTestablePackagesAsync, discoverChangedTestablePackagesAsync, } from '../../utils/batch/changed-packages-utils.js';
|
|
@@ -33,7 +33,7 @@ export const batchTestCommand = {
|
|
|
33
33
|
default: 'origin/main',
|
|
34
34
|
})
|
|
35
35
|
.option('concurrency', {
|
|
36
|
-
describe: 'Max parallel tests (
|
|
36
|
+
describe: 'Max parallel tests (0 = unlimited, default: unlimited)',
|
|
37
37
|
type: 'number',
|
|
38
38
|
})
|
|
39
39
|
.option('output', {
|
|
@@ -48,6 +48,19 @@ export const batchTestCommand = {
|
|
|
48
48
|
describe: 'Show execution logs for all packages (not just failures)',
|
|
49
49
|
type: 'boolean',
|
|
50
50
|
default: false,
|
|
51
|
+
})
|
|
52
|
+
.option('aggregated', {
|
|
53
|
+
describe: 'Build all packages into a single place and execute one batch script',
|
|
54
|
+
type: 'boolean',
|
|
55
|
+
default: true,
|
|
56
|
+
})
|
|
57
|
+
.option('batch-place-id', {
|
|
58
|
+
describe: 'Override placeId for the aggregated batch upload (--aggregated only)',
|
|
59
|
+
type: 'number',
|
|
60
|
+
})
|
|
61
|
+
.option('batch-universe-id', {
|
|
62
|
+
describe: 'Override universeId for the aggregated batch upload (--aggregated only)',
|
|
63
|
+
type: 'number',
|
|
51
64
|
});
|
|
52
65
|
},
|
|
53
66
|
handler: async (args) => {
|
|
@@ -78,7 +91,9 @@ async function _runAsync(args) {
|
|
|
78
91
|
return;
|
|
79
92
|
}
|
|
80
93
|
const cloud = args.cloud ?? false;
|
|
81
|
-
const concurrency = args.concurrency
|
|
94
|
+
const concurrency = args.concurrency === undefined || args.concurrency === 0
|
|
95
|
+
? Infinity
|
|
96
|
+
: args.concurrency;
|
|
82
97
|
const isGrouped = !process.stdout.isTTY || args.verbose || isCI();
|
|
83
98
|
const packageNames = packages.map((p) => p.name);
|
|
84
99
|
const reporter = new CompositeReporter(packageNames, (state) => {
|
|
@@ -107,11 +122,18 @@ async function _runAsync(args) {
|
|
|
107
122
|
const apiKey = await getApiKeyAsync(args);
|
|
108
123
|
client = new OpenCloudClient({ apiKey, rateLimiter: new RateLimiter() });
|
|
109
124
|
}
|
|
110
|
-
const
|
|
125
|
+
const timeoutMs = 120_000;
|
|
126
|
+
const innerContext = client
|
|
111
127
|
? new CloudJobContext(client)
|
|
112
128
|
: new LocalJobContext();
|
|
129
|
+
const context = args.aggregated
|
|
130
|
+
? new BatchScriptJobContext(innerContext, packages, {
|
|
131
|
+
batchPlaceId: args.batchPlaceId,
|
|
132
|
+
batchUniverseId: args.batchUniverseId,
|
|
133
|
+
perPackageTimeoutMs: timeoutMs,
|
|
134
|
+
})
|
|
135
|
+
: innerContext;
|
|
113
136
|
await reporter.startAsync();
|
|
114
|
-
const timeoutMs = 120_000;
|
|
115
137
|
let results;
|
|
116
138
|
try {
|
|
117
139
|
results = await runBatchAsync({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-test-command.js","sourceRoot":"","sources":["../../../src/commands/batch-command/batch-test-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAEL,eAAe,EACf,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EACL,gCAAgC,EAChC,oCAAoC,GAErC,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAIL,iBAAiB,EACjB,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,kBAAkB,GAEnB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"batch-test-command.js","sourceRoot":"","sources":["../../../src/commands/batch-command/batch-test-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { OutputHelper } from '@quenty/cli-output-helpers';
|
|
2
2
|
export async function runBatchAsync(options) {
|
|
3
|
-
const { packages, concurrency =
|
|
3
|
+
const { packages, concurrency = Infinity, reporter, bufferOutput = false, executeAsync, } = options;
|
|
4
4
|
const results = [];
|
|
5
5
|
let runningCount = 0;
|
|
6
6
|
let nextIndex = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-runner.js","sourceRoot":"","sources":["../../../src/utils/batch/batch-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAmB1D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA8B;IAE9B,MAAM,EACJ,QAAQ,EACR,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"batch-runner.js","sourceRoot":"","sources":["../../../src/utils/batch/batch-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type Reporter } from '@quenty/cli-output-helpers/reporting';
|
|
2
|
+
import { type BuiltPlace, type Deployment, type DeployPlaceOptions, type JobContext, type RunScriptOptions, type ScriptRunResult } from './job-context.js';
|
|
3
|
+
import { type BuildPlaceOptions } from '../build/build.js';
|
|
4
|
+
import { type TargetPackage } from '../batch/changed-packages-utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* JobContext wrapper that batches all packages into a single build, upload, and
|
|
7
|
+
* execution. Wraps an inner context (cloud or local) and intercepts all methods
|
|
8
|
+
* using the lazy-promise pattern: the first concurrent call triggers the shared
|
|
9
|
+
* operation, all others await the same promise.
|
|
10
|
+
*/
|
|
11
|
+
export declare class BatchScriptJobContext implements JobContext {
|
|
12
|
+
private _inner;
|
|
13
|
+
private _packages;
|
|
14
|
+
private _repoRoot;
|
|
15
|
+
private _batchPlaceId?;
|
|
16
|
+
private _batchUniverseId?;
|
|
17
|
+
private _perPackageTimeoutMs;
|
|
18
|
+
private _combinedBuildPromise?;
|
|
19
|
+
private _deployPromise?;
|
|
20
|
+
private _executionPromise?;
|
|
21
|
+
private _packageTargets;
|
|
22
|
+
private _combinedBuildContext?;
|
|
23
|
+
private _sharedDeployment?;
|
|
24
|
+
constructor(inner: JobContext, packages: TargetPackage[], options?: {
|
|
25
|
+
repoRoot?: string;
|
|
26
|
+
batchPlaceId?: number;
|
|
27
|
+
batchUniverseId?: number;
|
|
28
|
+
perPackageTimeoutMs?: number;
|
|
29
|
+
});
|
|
30
|
+
buildPlaceAsync(options: BuildPlaceOptions): Promise<BuiltPlace>;
|
|
31
|
+
deployBuiltPlaceAsync(reporter: Reporter, options: DeployPlaceOptions): Promise<Deployment>;
|
|
32
|
+
runScriptAsync(deployment: Deployment, _reporter: Reporter, options: RunScriptOptions): Promise<ScriptRunResult>;
|
|
33
|
+
getLogsAsync(deployment: Deployment): Promise<string>;
|
|
34
|
+
releaseAsync(_deployment: Deployment): Promise<void>;
|
|
35
|
+
releaseBuiltPlaceAsync(_builtPlace: BuiltPlace): Promise<void>;
|
|
36
|
+
disposeAsync(): Promise<void>;
|
|
37
|
+
private _getCombinedBuildAsync;
|
|
38
|
+
private _doCombinedBuildAsync;
|
|
39
|
+
private _getSharedDeploymentAsync;
|
|
40
|
+
private _doSharedDeployAsync;
|
|
41
|
+
private _getBatchExecutionAsync;
|
|
42
|
+
private _doBatchExecutionAsync;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=batch-script-job-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-script-job-context.d.ts","sourceRoot":"","sources":["../../../src/utils/job-context/batch-script-job-context.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAO3D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAuBxE;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,UAAU;IACtD,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,oBAAoB,CAAS;IAGrC,OAAO,CAAC,qBAAqB,CAAC,CAA8B;IAC5D,OAAO,CAAC,cAAc,CAAC,CAAsB;IAC7C,OAAO,CAAC,iBAAiB,CAAC,CAA2C;IACrE,OAAO,CAAC,eAAe,CAAmC;IAG1D,OAAO,CAAC,qBAAqB,CAAC,CAAe;IAC7C,OAAO,CAAC,iBAAiB,CAAC,CAAa;gBAGrC,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B;IAUG,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAsBhE,qBAAqB,CACzB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,UAAU,CAAC;IAMhB,cAAc,CAClB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,QAAQ,EACnB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;IAYrB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQrD,YAAY,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,sBAAsB,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBnC,OAAO,CAAC,sBAAsB;YAOhB,qBAAqB;IAenC,OAAO,CAAC,yBAAyB;YAOnB,oBAAoB;IAsBlC,OAAO,CAAC,uBAAuB;YAWjB,sBAAsB;CAmDrC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { resolveTemplatePath, } from '@quenty/nevermore-template-helpers';
|
|
4
|
+
import { OutputHelper } from '@quenty/cli-output-helpers';
|
|
5
|
+
import { loadDeployConfigAsync, resolveDeployConfigPath, resolveDeployTarget, } from '../build/deploy-config.js';
|
|
6
|
+
import { generateCombinedProjectAsync, } from '../testing/runner/combined-project-generator.js';
|
|
7
|
+
import { parseBatchTestLogs, } from '../testing/parsers/batch-log-parser.js';
|
|
8
|
+
/** Per-package deployment handle. Wraps a shared inner deployment. */
|
|
9
|
+
class BatchDeployment {
|
|
10
|
+
packageName;
|
|
11
|
+
inner;
|
|
12
|
+
constructor(packageName, inner) {
|
|
13
|
+
this.packageName = packageName;
|
|
14
|
+
this.inner = inner;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* JobContext wrapper that batches all packages into a single build, upload, and
|
|
19
|
+
* execution. Wraps an inner context (cloud or local) and intercepts all methods
|
|
20
|
+
* using the lazy-promise pattern: the first concurrent call triggers the shared
|
|
21
|
+
* operation, all others await the same promise.
|
|
22
|
+
*/
|
|
23
|
+
export class BatchScriptJobContext {
|
|
24
|
+
_inner;
|
|
25
|
+
_packages;
|
|
26
|
+
_repoRoot;
|
|
27
|
+
_batchPlaceId;
|
|
28
|
+
_batchUniverseId;
|
|
29
|
+
_perPackageTimeoutMs;
|
|
30
|
+
// Lazy-promise state
|
|
31
|
+
_combinedBuildPromise;
|
|
32
|
+
_deployPromise;
|
|
33
|
+
_executionPromise;
|
|
34
|
+
_packageTargets = new Map();
|
|
35
|
+
// State for cleanup
|
|
36
|
+
_combinedBuildContext;
|
|
37
|
+
_sharedDeployment;
|
|
38
|
+
constructor(inner, packages, options) {
|
|
39
|
+
this._inner = inner;
|
|
40
|
+
this._packages = packages;
|
|
41
|
+
this._repoRoot = options?.repoRoot ?? process.cwd();
|
|
42
|
+
this._batchPlaceId = options?.batchPlaceId;
|
|
43
|
+
this._batchUniverseId = options?.batchUniverseId;
|
|
44
|
+
this._perPackageTimeoutMs = options?.perPackageTimeoutMs ?? 120_000;
|
|
45
|
+
}
|
|
46
|
+
async buildPlaceAsync(options) {
|
|
47
|
+
const buildState = await this._getCombinedBuildAsync();
|
|
48
|
+
const packageName = options.packageName ?? path.basename(options.packagePath ?? '');
|
|
49
|
+
// Load per-package target for the BuiltPlace.target field
|
|
50
|
+
// (runSingleTestAsync reads scriptTemplate from it, but we ignore the script content)
|
|
51
|
+
let target = this._packageTargets.get(packageName);
|
|
52
|
+
if (!target) {
|
|
53
|
+
const packagePath = options.packagePath ?? process.cwd();
|
|
54
|
+
const configPath = resolveDeployConfigPath(packagePath);
|
|
55
|
+
const config = await loadDeployConfigAsync(configPath);
|
|
56
|
+
target = resolveDeployTarget(config, options.targetName);
|
|
57
|
+
this._packageTargets.set(packageName, target);
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
rbxlPath: buildState.rbxlPath,
|
|
61
|
+
target,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async deployBuiltPlaceAsync(reporter, options) {
|
|
65
|
+
const innerDeployment = await this._getSharedDeploymentAsync(reporter);
|
|
66
|
+
return new BatchDeployment(options.packageName, innerDeployment);
|
|
67
|
+
}
|
|
68
|
+
async runScriptAsync(deployment, _reporter, options) {
|
|
69
|
+
const batchDeployment = deployment;
|
|
70
|
+
const packageResults = await this._getBatchExecutionAsync();
|
|
71
|
+
const result = packageResults.get(batchDeployment.packageName);
|
|
72
|
+
if (!result) {
|
|
73
|
+
return { success: false };
|
|
74
|
+
}
|
|
75
|
+
return { success: result.success };
|
|
76
|
+
}
|
|
77
|
+
async getLogsAsync(deployment) {
|
|
78
|
+
const batchDeployment = deployment;
|
|
79
|
+
const packageResults = await this._getBatchExecutionAsync();
|
|
80
|
+
const result = packageResults.get(batchDeployment.packageName);
|
|
81
|
+
return result?.logs ?? '';
|
|
82
|
+
}
|
|
83
|
+
async releaseAsync(_deployment) {
|
|
84
|
+
// No-op — shared deployment released in disposeAsync
|
|
85
|
+
}
|
|
86
|
+
async releaseBuiltPlaceAsync(_builtPlace) {
|
|
87
|
+
// No-op — combined build cleaned up in disposeAsync
|
|
88
|
+
}
|
|
89
|
+
async disposeAsync() {
|
|
90
|
+
// Release shared inner deployment
|
|
91
|
+
if (this._sharedDeployment) {
|
|
92
|
+
try {
|
|
93
|
+
await this._inner.releaseAsync(this._sharedDeployment);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// best effort
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Clean up combined build context
|
|
100
|
+
if (this._combinedBuildContext) {
|
|
101
|
+
try {
|
|
102
|
+
await this._combinedBuildContext.cleanupAsync();
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// best effort
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
await this._inner.disposeAsync();
|
|
109
|
+
}
|
|
110
|
+
// ---- Lazy-promise internals ----
|
|
111
|
+
_getCombinedBuildAsync() {
|
|
112
|
+
if (!this._combinedBuildPromise) {
|
|
113
|
+
this._combinedBuildPromise = this._doCombinedBuildAsync();
|
|
114
|
+
}
|
|
115
|
+
return this._combinedBuildPromise;
|
|
116
|
+
}
|
|
117
|
+
async _doCombinedBuildAsync() {
|
|
118
|
+
OutputHelper.verbose('Building combined batch place...');
|
|
119
|
+
const combinedResult = await generateCombinedProjectAsync({
|
|
120
|
+
packages: this._packages,
|
|
121
|
+
repoRoot: this._repoRoot,
|
|
122
|
+
batchPlaceId: this._batchPlaceId,
|
|
123
|
+
batchUniverseId: this._batchUniverseId,
|
|
124
|
+
});
|
|
125
|
+
this._combinedBuildContext = combinedResult.buildContext;
|
|
126
|
+
return { combinedResult, rbxlPath: combinedResult.rbxlPath };
|
|
127
|
+
}
|
|
128
|
+
_getSharedDeploymentAsync(reporter) {
|
|
129
|
+
if (!this._deployPromise) {
|
|
130
|
+
this._deployPromise = this._doSharedDeployAsync(reporter);
|
|
131
|
+
}
|
|
132
|
+
return this._deployPromise;
|
|
133
|
+
}
|
|
134
|
+
async _doSharedDeployAsync(reporter) {
|
|
135
|
+
const buildState = await this._getCombinedBuildAsync();
|
|
136
|
+
const { primaryTarget } = buildState.combinedResult;
|
|
137
|
+
// Create a minimal reporter that doesn't emit per-package phases
|
|
138
|
+
const batchReporter = reporter ?? _noopReporter();
|
|
139
|
+
const builtPlace = {
|
|
140
|
+
rbxlPath: buildState.rbxlPath,
|
|
141
|
+
target: primaryTarget,
|
|
142
|
+
};
|
|
143
|
+
const deployment = await this._inner.deployBuiltPlaceAsync(batchReporter, {
|
|
144
|
+
builtPlace,
|
|
145
|
+
packageName: '_batch_',
|
|
146
|
+
packagePath: this._repoRoot,
|
|
147
|
+
});
|
|
148
|
+
this._sharedDeployment = deployment;
|
|
149
|
+
return deployment;
|
|
150
|
+
}
|
|
151
|
+
_getBatchExecutionAsync() {
|
|
152
|
+
if (!this._executionPromise) {
|
|
153
|
+
this._executionPromise = this._doBatchExecutionAsync();
|
|
154
|
+
// On rejection, clear the promise so that a retry re-triggers the batch
|
|
155
|
+
this._executionPromise.catch(() => {
|
|
156
|
+
this._executionPromise = undefined;
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
return this._executionPromise;
|
|
160
|
+
}
|
|
161
|
+
async _doBatchExecutionAsync() {
|
|
162
|
+
const buildState = await this._getCombinedBuildAsync();
|
|
163
|
+
const deployment = await this._getSharedDeploymentAsync();
|
|
164
|
+
const { slugMap } = buildState.combinedResult;
|
|
165
|
+
// Build the batch Luau script from the template
|
|
166
|
+
const templatePath = resolveTemplatePath(import.meta.url, 'batch-test-runner.luau');
|
|
167
|
+
const template = await fs.readFile(templatePath, 'utf-8');
|
|
168
|
+
const slugArray = [...slugMap.values()];
|
|
169
|
+
const batchScript = template.replaceAll('{{ PACKAGE_SLUGS_JSON }}', JSON.stringify(slugArray));
|
|
170
|
+
const totalTimeoutMs = this._packages.length * this._perPackageTimeoutMs;
|
|
171
|
+
OutputHelper.verbose(`Executing batch script for ${slugMap.size} packages (timeout: ${totalTimeoutMs / 1000}s)...`);
|
|
172
|
+
const result = await this._inner.runScriptAsync(deployment, _noopReporter(), {
|
|
173
|
+
scriptContent: batchScript,
|
|
174
|
+
packageName: '_batch_',
|
|
175
|
+
timeoutMs: totalTimeoutMs,
|
|
176
|
+
});
|
|
177
|
+
// Fetch the combined logs
|
|
178
|
+
const rawLogs = await this._inner.getLogsAsync(deployment);
|
|
179
|
+
if (!result.success) {
|
|
180
|
+
OutputHelper.warn('Batch execution task did not complete successfully — parsing partial results');
|
|
181
|
+
OutputHelper.verbose(`Raw batch logs:\n${rawLogs || '(empty)'}`);
|
|
182
|
+
}
|
|
183
|
+
// Parse into per-package results
|
|
184
|
+
return parseBatchTestLogs(rawLogs, slugMap);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function _noopReporter() {
|
|
188
|
+
return {
|
|
189
|
+
onPackageStart: () => { },
|
|
190
|
+
onPackagePhaseChange: () => { },
|
|
191
|
+
onPackageResult: () => { },
|
|
192
|
+
startAsync: async () => { },
|
|
193
|
+
stopAsync: async () => { },
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=batch-script-job-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-script-job-context.js","sourceRoot":"","sources":["../../../src/utils/job-context/batch-script-job-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAEL,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAW1D,OAAO,EAEL,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAEL,4BAA4B,GAC7B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAEL,kBAAkB,GACnB,MAAM,wCAAwC,CAAC;AAEhD,sEAAsE;AACtE,MAAM,eAAe;IAED;IACA;IAFlB,YACkB,WAAmB,EACnB,KAAiB;QADjB,gBAAW,GAAX,WAAW,CAAQ;QACnB,UAAK,GAAL,KAAK,CAAY;IAChC,CAAC;CACL;AAOD;;;;;GAKG;AACH,MAAM,OAAO,qBAAqB;IACxB,MAAM,CAAa;IACnB,SAAS,CAAkB;IAC3B,SAAS,CAAS;IAClB,aAAa,CAAU;IACvB,gBAAgB,CAAU;IAC1B,oBAAoB,CAAS;IAErC,qBAAqB;IACb,qBAAqB,CAA+B;IACpD,cAAc,CAAuB;IACrC,iBAAiB,CAA4C;IAC7D,eAAe,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE1D,oBAAoB;IACZ,qBAAqB,CAAgB;IACrC,iBAAiB,CAAc;IAEvC,YACE,KAAiB,EACjB,QAAyB,EACzB,OAKC;QAED,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACpD,IAAI,CAAC,aAAa,GAAG,OAAO,EAAE,YAAY,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,eAAe,CAAC;QACjD,IAAI,CAAC,oBAAoB,GAAG,OAAO,EAAE,mBAAmB,IAAI,OAAO,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA0B;QAC9C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACvD,MAAM,WAAW,GACf,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAElE,0DAA0D;QAC1D,sFAAsF;QACtF,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACzD,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC;YACvD,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,MAAM;SACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,QAAkB,EAClB,OAA2B;QAE3B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAEvE,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,UAAsB,EACtB,SAAmB,EACnB,OAAyB;QAEzB,MAAM,eAAe,GAAG,UAA6B,CAAC;QACtD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAE/D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAsB;QACvC,MAAM,eAAe,GAAG,UAA6B,CAAC;QACtD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAE/D,OAAO,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,WAAuB;QACxC,qDAAqD;IACvD,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,WAAuB;QAClD,oDAAoD;IACtD,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,kCAAkC;QAClC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACzD,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACnC,CAAC;IAED,mCAAmC;IAE3B,sBAAsB;QAC5B,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,YAAY,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAEzD,MAAM,cAAc,GAAG,MAAM,4BAA4B,CAAC;YACxD,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,eAAe,EAAE,IAAI,CAAC,gBAAgB;SACvC,CAAC,CAAC;QAEH,IAAI,CAAC,qBAAqB,GAAG,cAAc,CAAC,YAAY,CAAC;QAEzD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC;IAC/D,CAAC;IAEO,yBAAyB,CAAC,QAAmB;QACnD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,QAAmB;QACpD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACvD,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC;QAEpD,iEAAiE;QACjE,MAAM,aAAa,GAAG,QAAQ,IAAI,aAAa,EAAE,CAAC;QAElD,MAAM,UAAU,GAAe;YAC7B,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,MAAM,EAAE,aAAa;SACtB,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,aAAa,EAAE;YACxE,UAAU;YACV,WAAW,EAAE,SAAS;YACtB,WAAW,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;QACpC,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,uBAAuB;QAC7B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACvD,wEAAwE;YACxE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,EAAE;gBAChC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAGlC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC1D,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC;QAE9C,gDAAgD;QAChD,MAAM,YAAY,GAAG,mBAAmB,CACtC,MAAM,CAAC,IAAI,CAAC,GAAG,EACf,wBAAwB,CACzB,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CACrC,0BAA0B,EAC1B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAC1B,CAAC;QAEF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEzE,YAAY,CAAC,OAAO,CAClB,8BAA8B,OAAO,CAAC,IAAI,uBACxC,cAAc,GAAG,IACnB,OAAO,CACR,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAC7C,UAAU,EACV,aAAa,EAAE,EACf;YACE,aAAa,EAAE,WAAW;YAC1B,WAAW,EAAE,SAAS;YACtB,SAAS,EAAE,cAAc;SAC1B,CACF,CAAC;QAEF,0BAA0B;QAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAE3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CACf,8EAA8E,CAC/E,CAAC;YACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,iCAAiC;QACjC,OAAO,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF;AAED,SAAS,aAAa;IACpB,OAAO;QACL,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;QACxB,oBAAoB,EAAE,GAAG,EAAE,GAAE,CAAC;QAC9B,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;QACzB,UAAU,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QAC1B,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-job-context.d.ts","sourceRoot":"","sources":["../../../src/utils/job-context/cloud-job-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAEL,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-job-context.d.ts","sourceRoot":"","sources":["../../../src/utils/job-context/cloud-job-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAEL,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAkBvD,qBAAa,eAAgB,SAAQ,cAAc;IACjD,OAAO,CAAC,gBAAgB,CAAkB;gBAE9B,eAAe,EAAE,eAAe;IAKtC,qBAAqB,CACzB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,UAAU,CAAC;IAuBhB,cAAc,CAClB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;IA2BrB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBrD,YAAY,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { tryRenamePlaceAsync } from '../auth/roblox-auth/index.js';
|
|
2
2
|
import { buildPlaceNameAsync, timeoutAsync } from '../nevermore-cli-utils.js';
|
|
3
3
|
import { BaseJobContext } from './base-job-context.js';
|
|
4
|
+
const SKIP_RENAMING_PLACE = true;
|
|
4
5
|
class CloudDeployment {
|
|
5
6
|
universeId;
|
|
6
7
|
placeId;
|
|
@@ -27,8 +28,10 @@ export class CloudJobContext extends BaseJobContext {
|
|
|
27
28
|
// Eagerly release build artifacts after upload (disposeAsync is safety net)
|
|
28
29
|
await this.releaseBuiltPlaceAsync(builtPlace);
|
|
29
30
|
// Best-effort rename to reflect current package + commit
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
if (!SKIP_RENAMING_PLACE) {
|
|
32
|
+
const placeName = await buildPlaceNameAsync(packagePath);
|
|
33
|
+
await tryRenamePlaceAsync(target.placeId, placeName);
|
|
34
|
+
}
|
|
32
35
|
return new CloudDeployment(target.universeId, target.placeId, version);
|
|
33
36
|
}
|
|
34
37
|
async runScriptAsync(deployment, reporter, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-job-context.js","sourceRoot":"","sources":["../../../src/utils/job-context/cloud-job-context.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAO9E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,eAAe;IACnB,UAAU,CAAS;IACnB,OAAO,CAAS;IAChB,OAAO,CAAS;IAChB,QAAQ,CAAU;IAClB,SAAS,CAAqB;IAE9B,YAAY,UAAkB,EAAE,OAAe,EAAE,OAAe;QAC9D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACzC,gBAAgB,CAAkB;IAE1C,YAAY,eAAgC;QAC1C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,QAAkB,EAClB,OAA2B;QAE3B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QACzD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;QAExC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAC1D,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,OAAO,EACd,QAAQ,CACT,CAAC;QAEF,4EAA4E;QAC5E,MAAM,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAE9C,yDAAyD;QACzD,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-job-context.js","sourceRoot":"","sources":["../../../src/utils/job-context/cloud-job-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export type { BuiltPlace, Deployment, JobContext, DeployPlaceOptions, RunScriptOptions, ScriptRunResult, } from './job-context.js';
|
|
2
2
|
export { BaseJobContext } from './base-job-context.js';
|
|
3
|
+
export { BatchScriptJobContext } from './batch-script-job-context.js';
|
|
3
4
|
export { CloudJobContext } from './cloud-job-context.js';
|
|
4
5
|
export { LocalJobContext } from './local-job-context.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/job-context/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/job-context/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { BaseJobContext } from './base-job-context.js';
|
|
2
|
+
export { BatchScriptJobContext } from './batch-script-job-context.js';
|
|
2
3
|
export { CloudJobContext } from './cloud-job-context.js';
|
|
3
4
|
export { LocalJobContext } from './local-job-context.js';
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/job-context/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/job-context/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface BatchPackageResult {
|
|
2
|
+
slug: string;
|
|
3
|
+
success: boolean;
|
|
4
|
+
logs: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Parse the single batch execution's logs into per-package results.
|
|
8
|
+
*
|
|
9
|
+
* The batch Luau template prints structured markers around each package's output:
|
|
10
|
+
* ===BATCH_TEST_BEGIN <slug>===
|
|
11
|
+
* ... test output ...
|
|
12
|
+
* ===BATCH_TEST_END <slug> PASS|FAIL===
|
|
13
|
+
* ===BATCH_TEST_SUMMARY===
|
|
14
|
+
* [{"slug":"maid","success":true}, ...]
|
|
15
|
+
*
|
|
16
|
+
* Success is determined from the JSON summary (based on pcall results), which is
|
|
17
|
+
* immune to log reordering. The BEGIN/END markers are used only for splitting logs
|
|
18
|
+
* into per-package sections. Jest failure detection provides a secondary override.
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseBatchTestLogs(rawLogs: string, slugMap: Map<string, string>): Map<string, BatchPackageResult>;
|
|
21
|
+
//# sourceMappingURL=batch-log-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-log-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/batch-log-parser.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAYD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CA2GjC"}
|