@git.zone/tsrust 1.10.4 → 1.12.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/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/mod_cli/classes.tsrustcli.js +4 -1
- package/dist_ts/mod_matrix/classes.nativematrixbuilder.d.ts +2 -0
- package/dist_ts/mod_matrix/classes.nativematrixbuilder.js +48 -10
- package/dist_ts/mod_matrix/helpers.matrixconfig.d.ts +4 -0
- package/dist_ts/mod_matrix/helpers.matrixconfig.js +14 -2
- package/dist_ts/mod_matrix/helpers.pnpmpolicy.d.ts +12 -0
- package/dist_ts/mod_matrix/helpers.pnpmpolicy.js +61 -0
- package/package.json +2 -2
- package/readme.hints.md +2 -1
- package/readme.md +20 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/mod_cli/classes.tsrustcli.ts +3 -0
- package/ts/mod_matrix/classes.nativematrixbuilder.ts +55 -5
- package/ts/mod_matrix/helpers.matrixconfig.ts +17 -1
- package/ts/mod_matrix/helpers.pnpmpolicy.ts +78 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tsrust',
|
|
6
|
-
version: '1.
|
|
6
|
+
version: '1.12.0',
|
|
7
7
|
description: 'A tool for compiling Rust projects, detecting Cargo workspaces, building with cargo, and placing binaries in a conventional dist_rust directory.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLGtKQUFrSjtDQUNoSyxDQUFBIn0=
|
|
@@ -400,6 +400,9 @@ export class TsRustCli {
|
|
|
400
400
|
}
|
|
401
401
|
if (operation === 'build') {
|
|
402
402
|
const result = await matrixBuilder.build();
|
|
403
|
+
if (result.verifiedWorkers.length > 0) {
|
|
404
|
+
console.log(`Verified native workers: ${result.verifiedWorkers.join(', ')}`);
|
|
405
|
+
}
|
|
403
406
|
console.log(`Built and assembled ${result.assembly.artifactCount} artifacts for ${result.targets.join(', ')}`);
|
|
404
407
|
return;
|
|
405
408
|
}
|
|
@@ -475,4 +478,4 @@ export const runCli = async () => {
|
|
|
475
478
|
const cli = new TsRustCli();
|
|
476
479
|
cli.run();
|
|
477
480
|
};
|
|
478
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50c3J1c3RjbGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY2xpL2NsYXNzZXMudHNydXN0Y2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsc0JBQXNCLEdBQ3ZCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBeUIsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixrQkFBa0IsRUFDbEIsZUFBZSxHQUVoQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQixtQkFBbUIsR0FFcEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUseUJB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
|
|
481
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50c3J1c3RjbGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY2xpL2NsYXNzZXMudHNydXN0Y2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsc0JBQXNCLEdBQ3ZCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBeUIsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixrQkFBa0IsRUFDbEIsZUFBZSxHQUVoQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQixtQkFBbUIsR0FFcEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUseUJB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
|
|
@@ -15,6 +15,8 @@ export interface INativeMatrixCheckResult {
|
|
|
15
15
|
export interface INativeMatrixBuildResult extends INativeMatrixCheckResult {
|
|
16
16
|
gitCommit: string;
|
|
17
17
|
assembly: IArtifactAssemblyResult;
|
|
18
|
+
/** Workers whose configured verification command completed successfully. */
|
|
19
|
+
verifiedWorkers: TMatrixHost[];
|
|
18
20
|
}
|
|
19
21
|
export declare class NativeMatrixBuilder {
|
|
20
22
|
private readonly workspace;
|
|
@@ -9,6 +9,7 @@ import { friendlyTargetName } from '../mod_cli/helpers.targets.js';
|
|
|
9
9
|
import { commitinfo } from '../00_commitinfo_data.js';
|
|
10
10
|
import { MatrixCommandRunner, } from './classes.matrixcommandrunner.js';
|
|
11
11
|
import { resolveMatrixPlan, } from './helpers.matrixconfig.js';
|
|
12
|
+
import { matrixPnpmPolicyEnvironment, matrixPnpmPolicyFields, matrixPnpmPolicyVerificationSource, readMatrixPnpmPolicy, } from './helpers.pnpmpolicy.js';
|
|
12
13
|
const capabilityCommandTimeoutMs = 5 * 60 * 1000;
|
|
13
14
|
const buildCommandTimeoutMs = 60 * 60 * 1000;
|
|
14
15
|
const maximumRetainedDiagnosticRuns = 3;
|
|
@@ -169,6 +170,10 @@ export class NativeMatrixBuilder {
|
|
|
169
170
|
timeoutMs: capabilityCommandTimeoutMs,
|
|
170
171
|
});
|
|
171
172
|
await this.assertInstalledTsrustVersion(this.workspace);
|
|
173
|
+
await readMatrixPnpmPolicy(this.commandRunner, {
|
|
174
|
+
cwd: this.workspace,
|
|
175
|
+
timeoutMs: capabilityCommandTimeoutMs,
|
|
176
|
+
});
|
|
172
177
|
for (const worker of this.plan.workers) {
|
|
173
178
|
if (worker.config.transport === 'local') {
|
|
174
179
|
await this.checkLocalWorker(worker);
|
|
@@ -189,6 +194,10 @@ export class NativeMatrixBuilder {
|
|
|
189
194
|
}
|
|
190
195
|
await this.assertPlanMatchesCommit(gitBefore.commit);
|
|
191
196
|
await this.check();
|
|
197
|
+
const pnpmPolicy = await readMatrixPnpmPolicy(this.commandRunner, {
|
|
198
|
+
cwd: this.workspace,
|
|
199
|
+
timeoutMs: capabilityCommandTimeoutMs,
|
|
200
|
+
});
|
|
192
201
|
assertGitSnapshotUnchanged(gitBefore, await captureGitSnapshot(this.workspace));
|
|
193
202
|
await this.assertBundleCompatibleSource();
|
|
194
203
|
assertGitSnapshotUnchanged(gitBefore, await captureGitSnapshot(this.workspace));
|
|
@@ -214,13 +223,13 @@ export class NativeMatrixBuilder {
|
|
|
214
223
|
assertGitSnapshotUnchanged(gitBefore, await captureGitSnapshot(this.workspace));
|
|
215
224
|
for (const worker of this.plan.workers) {
|
|
216
225
|
if (worker.config.transport === 'local') {
|
|
217
|
-
sourceDirectories.push(await this.buildLocalWorker(worker, bundlePath, runDirectory, gitBefore.commit, projectIdentity, binaries));
|
|
226
|
+
sourceDirectories.push(await this.buildLocalWorker(worker, bundlePath, runDirectory, gitBefore.commit, projectIdentity, binaries, pnpmPolicy));
|
|
218
227
|
}
|
|
219
228
|
else {
|
|
220
229
|
const remoteWorkspace = this.describeRemoteWorkspace(worker, this.resolveSshWorker(worker), gitBefore.commit);
|
|
221
230
|
remoteWorkspaces.push(remoteWorkspace);
|
|
222
231
|
await this.createRemoteWorkspace(remoteWorkspace, gitBefore.commit);
|
|
223
|
-
sourceDirectories.push(await this.buildSshWorker(remoteWorkspace, bundlePath, runDirectory, gitBefore.commit, projectIdentity, binaries));
|
|
232
|
+
sourceDirectories.push(await this.buildSshWorker(remoteWorkspace, bundlePath, runDirectory, gitBefore.commit, projectIdentity, binaries, pnpmPolicy));
|
|
224
233
|
}
|
|
225
234
|
}
|
|
226
235
|
const gitAfterWorkers = await captureGitSnapshot(this.workspace);
|
|
@@ -258,6 +267,7 @@ export class NativeMatrixBuilder {
|
|
|
258
267
|
...this.checkResult(),
|
|
259
268
|
gitCommit: gitBefore.commit,
|
|
260
269
|
assembly,
|
|
270
|
+
verifiedWorkers: this.plan.verificationCommand ? this.plan.workers.map((worker) => worker.host) : [],
|
|
261
271
|
};
|
|
262
272
|
}
|
|
263
273
|
finally {
|
|
@@ -286,6 +296,7 @@ export class NativeMatrixBuilder {
|
|
|
286
296
|
...transportEnvironmentNames,
|
|
287
297
|
'HOME',
|
|
288
298
|
'CARGO_HOME',
|
|
299
|
+
...matrixPnpmPolicyFields.map(([, name]) => name),
|
|
289
300
|
forwardEnvironmentGrantName,
|
|
290
301
|
]);
|
|
291
302
|
const forbidden = this.plan.forwardEnvironment.filter((name) => reserved.has(name) || !granted.has(name));
|
|
@@ -293,7 +304,7 @@ export class NativeMatrixBuilder {
|
|
|
293
304
|
throw new Error(`matrix.forwardEnvironment is not granted by ${forwardEnvironmentGrantName}: ${forbidden.join(', ')}`);
|
|
294
305
|
}
|
|
295
306
|
}
|
|
296
|
-
workerEnvironment(homeArg, cargoHomeArg) {
|
|
307
|
+
workerEnvironment(homeArg, cargoHomeArg, pnpmPolicy) {
|
|
297
308
|
const environment = {};
|
|
298
309
|
for (const name of [
|
|
299
310
|
...defaultWorkerEnvironmentNames,
|
|
@@ -307,6 +318,7 @@ export class NativeMatrixBuilder {
|
|
|
307
318
|
if (!environment.RUSTUP_HOME && this.environment.HOME) {
|
|
308
319
|
environment.RUSTUP_HOME = path.join(this.environment.HOME, '.rustup');
|
|
309
320
|
}
|
|
321
|
+
Object.assign(environment, matrixPnpmPolicyEnvironment(pnpmPolicy));
|
|
310
322
|
return environment;
|
|
311
323
|
}
|
|
312
324
|
transportEnvironment() {
|
|
@@ -344,11 +356,14 @@ export class NativeMatrixBuilder {
|
|
|
344
356
|
throw new Error('Matrix configuration does not match the exact Git commit');
|
|
345
357
|
}
|
|
346
358
|
}
|
|
347
|
-
remoteWorkerEnvironmentFunction(homeArg, cargoHomeArg) {
|
|
359
|
+
remoteWorkerEnvironmentFunction(homeArg, cargoHomeArg, pnpmPolicy) {
|
|
348
360
|
const names = [
|
|
349
361
|
...new Set([...defaultWorkerEnvironmentNames, ...this.plan.forwardEnvironment]),
|
|
350
362
|
];
|
|
351
|
-
const assignments =
|
|
363
|
+
const assignments = [
|
|
364
|
+
...names.map((name) => `${name}="\${${name}-}"`),
|
|
365
|
+
...Object.entries(matrixPnpmPolicyEnvironment(pnpmPolicy)).map(([name, value]) => `${name}=${shellQuote(value)}`),
|
|
366
|
+
].join(' ');
|
|
352
367
|
return `run_matrix_worker() { worker_rustup_home="\${RUSTUP_HOME:-\${HOME}/.rustup}"; env -i ${assignments} HOME=${shellQuote(homeArg)} CARGO_HOME=${shellQuote(cargoHomeArg)} RUSTUP_HOME="$worker_rustup_home" "$@"; }`;
|
|
353
368
|
}
|
|
354
369
|
async assertBundleCompatibleSource() {
|
|
@@ -693,7 +708,7 @@ export class NativeMatrixBuilder {
|
|
|
693
708
|
throw new Error(`tsrust matrix retains at most ${maximumRetainedDiagnosticRuns} failed local runs; inspect and remove the reported paths before retrying`);
|
|
694
709
|
}
|
|
695
710
|
}
|
|
696
|
-
async buildLocalWorker(workerArg, bundlePathArg, runDirectoryArg, gitCommitArg, identityArg, binariesArg) {
|
|
711
|
+
async buildLocalWorker(workerArg, bundlePathArg, runDirectoryArg, gitCommitArg, identityArg, binariesArg, pnpmPolicy) {
|
|
697
712
|
const workerParent = path.join(runDirectoryArg, workerArg.host);
|
|
698
713
|
const workerWorkspace = path.join(workerParent, 'workspace');
|
|
699
714
|
const workerHome = path.join(workerParent, 'home');
|
|
@@ -701,19 +716,33 @@ export class NativeMatrixBuilder {
|
|
|
701
716
|
await fs.promises.mkdir(workerParent, { mode: 0o700 });
|
|
702
717
|
await fs.promises.mkdir(workerHome, { mode: 0o700 });
|
|
703
718
|
await fs.promises.mkdir(workerCargoHome, { mode: 0o700 });
|
|
704
|
-
const workerEnvironment = this.workerEnvironment(workerHome, workerCargoHome);
|
|
719
|
+
const workerEnvironment = this.workerEnvironment(workerHome, workerCargoHome, pnpmPolicy);
|
|
705
720
|
const buildDeadline = Date.now() + buildCommandTimeoutMs;
|
|
706
721
|
await this.commandRunner.execute('git', ['-c', 'advice.detachedHead=false', 'clone', '--quiet', bundlePathArg, workerWorkspace], {
|
|
707
722
|
cwd: this.workspace,
|
|
708
723
|
timeoutMs: Math.min(capabilityCommandTimeoutMs, this.remainingBuildTimeout(buildDeadline, workerArg.host)),
|
|
709
724
|
});
|
|
710
725
|
await this.assertWorkerSource(workerWorkspace, gitCommitArg, buildDeadline, workerArg.host);
|
|
726
|
+
await this.commandRunner.execute('node', ['-e', matrixPnpmPolicyVerificationSource, JSON.stringify(pnpmPolicy)], {
|
|
727
|
+
cwd: workerWorkspace,
|
|
728
|
+
timeoutMs: Math.min(capabilityCommandTimeoutMs, this.remainingBuildTimeout(buildDeadline, workerArg.host)),
|
|
729
|
+
environment: workerEnvironment,
|
|
730
|
+
});
|
|
711
731
|
await this.commandRunner.execute('pnpm', ['install', '--frozen-lockfile'], {
|
|
712
732
|
cwd: workerWorkspace,
|
|
713
733
|
timeoutMs: this.remainingBuildTimeout(buildDeadline, workerArg.host),
|
|
714
734
|
environment: workerEnvironment,
|
|
715
735
|
});
|
|
716
736
|
await this.assertInstalledTsrustVersion(workerWorkspace);
|
|
737
|
+
if (this.plan.verificationCommand) {
|
|
738
|
+
const [command, ...args] = this.plan.verificationCommand;
|
|
739
|
+
await this.commandRunner.execute(command, args, {
|
|
740
|
+
cwd: workerWorkspace,
|
|
741
|
+
timeoutMs: this.remainingBuildTimeout(buildDeadline, workerArg.host),
|
|
742
|
+
environment: workerEnvironment,
|
|
743
|
+
});
|
|
744
|
+
await this.assertWorkerSource(workerWorkspace, gitCommitArg, buildDeadline, workerArg.host);
|
|
745
|
+
}
|
|
717
746
|
this.remainingBuildTimeout(buildDeadline, workerArg.host);
|
|
718
747
|
await this.commandRunner.execute('pnpm', this.workerTsrustArgs(workerArg), {
|
|
719
748
|
cwd: workerWorkspace,
|
|
@@ -857,7 +886,7 @@ export class NativeMatrixBuilder {
|
|
|
857
886
|
].join('\n');
|
|
858
887
|
await this.runRemoteLoginScript(remoteArg.worker, remoteArg.runtime, script, capabilityCommandTimeoutMs);
|
|
859
888
|
}
|
|
860
|
-
async buildSshWorker(remoteArg, bundlePathArg, runDirectoryArg, gitCommitArg, identityArg, binariesArg) {
|
|
889
|
+
async buildSshWorker(remoteArg, bundlePathArg, runDirectoryArg, gitCommitArg, identityArg, binariesArg, pnpmPolicy) {
|
|
861
890
|
const buildDeadline = Date.now() + buildCommandTimeoutMs;
|
|
862
891
|
const remoteBundle = `${remoteArg.directory}/source.bundle`;
|
|
863
892
|
const remoteWorkspace = `${remoteArg.directory}/workspace`;
|
|
@@ -891,7 +920,10 @@ export class NativeMatrixBuilder {
|
|
|
891
920
|
'test "$(git rev-parse HEAD)" = "$expected_commit"',
|
|
892
921
|
'test -z "$(git status --porcelain=v1 --untracked-files=all)"',
|
|
893
922
|
`test -z "$(git ls-files -v | grep -v '^H ' || true)"`,
|
|
894
|
-
this.remoteWorkerEnvironmentFunction(remoteHome, remoteCargoHome),
|
|
923
|
+
this.remoteWorkerEnvironmentFunction(remoteHome, remoteCargoHome, pnpmPolicy),
|
|
924
|
+
['run_matrix_worker', 'node', '-e', matrixPnpmPolicyVerificationSource, JSON.stringify(pnpmPolicy)]
|
|
925
|
+
.map(shellQuote)
|
|
926
|
+
.join(' '),
|
|
895
927
|
['run_matrix_worker', 'pnpm', 'install', '--frozen-lockfile']
|
|
896
928
|
.map(shellQuote)
|
|
897
929
|
.join(' '),
|
|
@@ -903,6 +935,12 @@ export class NativeMatrixBuilder {
|
|
|
903
935
|
]
|
|
904
936
|
.map(shellQuote)
|
|
905
937
|
.join(' '),
|
|
938
|
+
...(this.plan.verificationCommand ? [
|
|
939
|
+
['run_matrix_worker', ...this.plan.verificationCommand].map(shellQuote).join(' '),
|
|
940
|
+
'test "$(git rev-parse HEAD)" = "$expected_commit"',
|
|
941
|
+
'test -z "$(git status --porcelain=v1 --untracked-files=all)"',
|
|
942
|
+
`test -z "$(git ls-files -v | grep -v '^H ' || true)"`,
|
|
943
|
+
] : []),
|
|
906
944
|
['run_matrix_worker', 'pnpm', ...this.workerTsrustArgs(remoteArg.worker)]
|
|
907
945
|
.map(shellQuote)
|
|
908
946
|
.join(' '),
|
|
@@ -1080,4 +1118,4 @@ export class NativeMatrixBuilder {
|
|
|
1080
1118
|
});
|
|
1081
1119
|
}
|
|
1082
1120
|
}
|
|
1083
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5uYXRpdmVtYXRyaXhidWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbW9kX21hdHJpeC9jbGFzc2VzLm5hdGl2ZW1hdHJpeGJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsd0JBQXdCLEdBRXpCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsa0JBQWtCLEVBQ2xCLDRCQUE0QixFQUM1Qix5QkFBeUIsRUFDekIsZUFBZSxHQUNoQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBc0IsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUNMLG1CQUFtQixHQUdwQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFDTCxpQkFBaUIsR0FJbEIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2pELE1BQU0scUJBQXFCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDN0MsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLENBQUM7QUFDeEMsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixJQUFJO0lBQ0osd0JBQXdCO0lBQ3hCLElBQUk7SUFD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
|
|
1121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5uYXRpdmVtYXRyaXhidWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbW9kX21hdHJpeC9jbGFzc2VzLm5hdGl2ZW1hdHJpeGJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsd0JBQXdCLEdBRXpCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsa0JBQWtCLEVBQ2xCLDRCQUE0QixFQUM1Qix5QkFBeUIsRUFDekIsZUFBZSxHQUNoQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBc0IsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUNMLG1CQUFtQixHQUdwQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFDTCxpQkFBaUIsR0FJbEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHNCQUFzQixFQUN0QixrQ0FBa0MsRUFDbEMsb0JBQW9CLEdBRXJCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqRCxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzdDLE1B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
|
|
@@ -13,6 +13,9 @@ export type TTsrustMatrixBuilderConfig = ITsrustLocalMatrixBuilderConfig | ITsru
|
|
|
13
13
|
export interface ITsrustMatrixConfig {
|
|
14
14
|
builders: Partial<Record<TMatrixHost, TTsrustMatrixBuilderConfig>>;
|
|
15
15
|
smokeTestArgs?: string[];
|
|
16
|
+
/** Executable and arguments, run in each isolated checkout after install and
|
|
17
|
+
* before its artifact build. Shares the worker deadline and environment. */
|
|
18
|
+
verificationCommand?: string[];
|
|
16
19
|
forwardEnvironment?: string[];
|
|
17
20
|
}
|
|
18
21
|
export interface IResolvedMatrixWorker {
|
|
@@ -25,6 +28,7 @@ export interface IResolvedMatrixPlan {
|
|
|
25
28
|
workers: IResolvedMatrixWorker[];
|
|
26
29
|
expectedTargets: INormalizedTarget[];
|
|
27
30
|
smokeTestArgs?: string[];
|
|
31
|
+
verificationCommand?: string[];
|
|
28
32
|
forwardEnvironment: string[];
|
|
29
33
|
}
|
|
30
34
|
export declare const resolveMatrixPlan: (configArg: ITsrustConfig) => IResolvedMatrixPlan;
|
|
@@ -61,12 +61,23 @@ const validateForwardEnvironment = (valueArg) => {
|
|
|
61
61
|
}
|
|
62
62
|
return [...new Set(valueArg)];
|
|
63
63
|
};
|
|
64
|
+
const validateVerificationCommand = (valueArg) => {
|
|
65
|
+
if (valueArg === undefined)
|
|
66
|
+
return undefined;
|
|
67
|
+
if (!Array.isArray(valueArg) || valueArg.length === 0 || valueArg.length > 256
|
|
68
|
+
|| valueArg.some((argument) => typeof argument !== 'string' || /[\0\r\n]/.test(argument))
|
|
69
|
+
|| valueArg[0].length === 0
|
|
70
|
+
|| valueArg.reduce((bytes, argument) => bytes + Buffer.byteLength(argument, 'utf8') + 1, 0) > 64 * 1024) {
|
|
71
|
+
throw new Error('matrix.verificationCommand must contain an executable and single-line arguments within 256 entries and 64 KiB');
|
|
72
|
+
}
|
|
73
|
+
return [...valueArg];
|
|
74
|
+
};
|
|
64
75
|
export const resolveMatrixPlan = (configArg) => {
|
|
65
76
|
const matrixValue = configArg.matrix;
|
|
66
77
|
if (!isRecord(matrixValue)) {
|
|
67
78
|
throw new Error('tsrust matrix commands require a matrix configuration');
|
|
68
79
|
}
|
|
69
|
-
assertClosedKeys(matrixValue, ['builders', 'smokeTestArgs', 'forwardEnvironment'], 'matrix');
|
|
80
|
+
assertClosedKeys(matrixValue, ['builders', 'smokeTestArgs', 'verificationCommand', 'forwardEnvironment'], 'matrix');
|
|
70
81
|
if (!isRecord(matrixValue.builders) || Object.keys(matrixValue.builders).length === 0) {
|
|
71
82
|
throw new Error('matrix.builders must define at least one build worker');
|
|
72
83
|
}
|
|
@@ -123,7 +134,8 @@ export const resolveMatrixPlan = (configArg) => {
|
|
|
123
134
|
workers,
|
|
124
135
|
expectedTargets,
|
|
125
136
|
smokeTestArgs: validateSmokeTestArgs(matrixValue.smokeTestArgs),
|
|
137
|
+
verificationCommand: validateVerificationCommand(matrixValue.verificationCommand),
|
|
126
138
|
forwardEnvironment: validateForwardEnvironment(matrixValue.forwardEnvironment),
|
|
127
139
|
};
|
|
128
140
|
};
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5tYXRyaXhjb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfbWF0cml4L2hlbHBlcnMubWF0cml4Y29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLGNBQWMsR0FHZixNQUFNLCtCQUErQixDQUFDO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUM1QixhQUFhO0lBQ2IsYUFBYTtJQUNiLGFBQWE7SUFDYixhQUFhO0NBQ0wsQ0FBQztBQTBDWCxNQUFNLHNCQUFzQixHQUFHLDBCQUEwQixDQUFDO0FBQzFELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQVMsY0FBYyxDQUFDLENBQUM7QUFFekQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFpQixFQUF1QyxFQUFFLENBQzFFLENBQUMsQ0FBQyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUV6RSxNQUFNLGdCQUFnQixHQUFHLENBQ3ZCLFFBQWlDLEVBQ2pDLGNBQXdCLEVBQ3hCLFFBQWdCLEVBQ1YsRUFBRTtJQUNSLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRixJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFFBQVEsK0JBQStCLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxD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
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IMatrixCommandOptions, IMatrixCommandRunner } from './classes.matrixcommandrunner.js';
|
|
2
|
+
export declare const matrixPnpmPolicyFields: readonly [readonly ["minimumReleaseAge", "PNPM_CONFIG_MINIMUM_RELEASE_AGE"], readonly ["minimumReleaseAgeStrict", "PNPM_CONFIG_MINIMUM_RELEASE_AGE_STRICT"], readonly ["minimumReleaseAgeExclude", "PNPM_CONFIG_MINIMUM_RELEASE_AGE_EXCLUDE"]];
|
|
3
|
+
export interface IMatrixPnpmPolicy {
|
|
4
|
+
readonly minimumReleaseAge: number | null;
|
|
5
|
+
readonly minimumReleaseAgeStrict: boolean | null;
|
|
6
|
+
readonly minimumReleaseAgeExclude: readonly string[] | null;
|
|
7
|
+
}
|
|
8
|
+
/** Capture only nonsecret package-age policy; never enumerate registry or auth configuration. */
|
|
9
|
+
export declare function readMatrixPnpmPolicy(runner: IMatrixCommandRunner, options: IMatrixCommandOptions): Promise<IMatrixPnpmPolicy>;
|
|
10
|
+
export declare function matrixPnpmPolicyEnvironment(policy: IMatrixPnpmPolicy): Record<string, string>;
|
|
11
|
+
/** The same bounded readback executes inside local and SSH worker environments. */
|
|
12
|
+
export declare const matrixPnpmPolicyVerificationSource: string;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export const matrixPnpmPolicyFields = [
|
|
2
|
+
['minimumReleaseAge', 'PNPM_CONFIG_MINIMUM_RELEASE_AGE'],
|
|
3
|
+
['minimumReleaseAgeStrict', 'PNPM_CONFIG_MINIMUM_RELEASE_AGE_STRICT'],
|
|
4
|
+
['minimumReleaseAgeExclude', 'PNPM_CONFIG_MINIMUM_RELEASE_AGE_EXCLUDE'],
|
|
5
|
+
];
|
|
6
|
+
const maximumPolicyBytes = 32 * 1024;
|
|
7
|
+
/** Capture only nonsecret package-age policy; never enumerate registry or auth configuration. */
|
|
8
|
+
export async function readMatrixPnpmPolicy(runner, options) {
|
|
9
|
+
const values = await Promise.all(matrixPnpmPolicyFields.map(async ([key]) => {
|
|
10
|
+
const result = await runner.execute('pnpm', ['config', 'get', key, '--json'], {
|
|
11
|
+
...options,
|
|
12
|
+
capture: true,
|
|
13
|
+
});
|
|
14
|
+
if (Buffer.byteLength(result.stdout) > maximumPolicyBytes) {
|
|
15
|
+
throw new Error(`Matrix pnpm ${key} policy exceeds the supported byte limit`);
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(result.stdout);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
throw new Error(`Matrix pnpm ${key} policy is not valid JSON`);
|
|
22
|
+
}
|
|
23
|
+
}));
|
|
24
|
+
const [age, strict, exclude] = values;
|
|
25
|
+
if (age !== null && (typeof age !== 'number' || !Number.isSafeInteger(age) || age < 0)) {
|
|
26
|
+
throw new Error('Matrix pnpm minimumReleaseAge must be a nonnegative safe integer or unset');
|
|
27
|
+
}
|
|
28
|
+
if (strict !== null && typeof strict !== 'boolean') {
|
|
29
|
+
throw new Error('Matrix pnpm minimumReleaseAgeStrict must be boolean or unset');
|
|
30
|
+
}
|
|
31
|
+
if (exclude !== null && (!Array.isArray(exclude) || exclude.length > 512 || exclude.some((value) => typeof value !== 'string' || value.length === 0 || value.length > 1024 || /[\x00-\x1f\x7f]/.test(value)))) {
|
|
32
|
+
throw new Error('Matrix pnpm minimumReleaseAgeExclude must be a bounded string array or unset');
|
|
33
|
+
}
|
|
34
|
+
const policy = {
|
|
35
|
+
minimumReleaseAge: age,
|
|
36
|
+
minimumReleaseAgeStrict: strict,
|
|
37
|
+
minimumReleaseAgeExclude: exclude === null ? null : Object.freeze([...exclude]),
|
|
38
|
+
};
|
|
39
|
+
if (Buffer.byteLength(JSON.stringify(policy)) > maximumPolicyBytes) {
|
|
40
|
+
throw new Error('Matrix pnpm policy exceeds the supported byte limit');
|
|
41
|
+
}
|
|
42
|
+
return Object.freeze(policy);
|
|
43
|
+
}
|
|
44
|
+
export function matrixPnpmPolicyEnvironment(policy) {
|
|
45
|
+
return Object.fromEntries(matrixPnpmPolicyFields.flatMap(([key, name]) => policy[key] === null ? [] : [[name, JSON.stringify(policy[key])]]));
|
|
46
|
+
}
|
|
47
|
+
/** The same bounded readback executes inside local and SSH worker environments. */
|
|
48
|
+
export const matrixPnpmPolicyVerificationSource = [
|
|
49
|
+
"const { execFileSync } = require('node:child_process');",
|
|
50
|
+
'const expected = JSON.parse(process.argv[1]);',
|
|
51
|
+
`for (const [key] of ${JSON.stringify(matrixPnpmPolicyFields)}) {`,
|
|
52
|
+
' let actual;',
|
|
53
|
+
' try {',
|
|
54
|
+
" actual = JSON.parse(execFileSync('pnpm', ['config', 'get', key, '--json'], { encoding: 'utf8', maxBuffer: 32768, timeout: 60000 }));",
|
|
55
|
+
' } catch { throw new Error(`Matrix worker cannot verify pnpm ${key} policy`); }',
|
|
56
|
+
' if (JSON.stringify(actual) !== JSON.stringify(expected[key])) {',
|
|
57
|
+
' throw new Error(`Matrix worker pnpm ${key} policy differs from the coordinator`);',
|
|
58
|
+
' }',
|
|
59
|
+
'}',
|
|
60
|
+
].join('\n');
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5wbnBtcG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbW9kX21hdHJpeC9oZWxwZXJzLnBucG1wb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUc7SUFDcEMsQ0FBQyxtQkFBbUIsRUFBRSxpQ0FBaUMsQ0FBQztJQUN4RCxDQUFDLHlCQUF5QixFQUFFLHdDQUF3QyxDQUFDO0lBQ3JFLENBQUMsMEJBQTBCLEVBQUUseUNBQXlDLENBQUM7Q0FDL0QsQ0FBQztBQVFYLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUVyQyxpR0FBaUc7QUFDakcsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsTUFBNEIsRUFDNUIsT0FBOEI7SUFFOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQzFFLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUM1RSxHQUFHLE9BQU87WUFDVixPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsR0FBRywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBWSxDQUFDO1FBQzlDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFN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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/tsrust",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A tool for compiling Rust projects, detecting Cargo workspaces, building with cargo, and placing binaries in a conventional dist_rust directory.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"@git.zone/tsbuild": "^4.4.2",
|
|
42
42
|
"@git.zone/tsrun": "^2.0.6",
|
|
43
43
|
"@git.zone/tstest": "^4.0.0",
|
|
44
|
-
"@types/node": "
|
|
44
|
+
"@types/node": "26.4.0"
|
|
45
45
|
},
|
|
46
46
|
"files": [
|
|
47
47
|
"ts/**/*",
|
package/readme.hints.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
- Follows tsbuild patterns for the `cli.js` entry point and TypeScript module layout.
|
|
5
5
|
- Uses smartcli for CLI dispatch, smartshell for Cargo execution, native `child_process.execFile` for Git snapshots, and smol-toml for TOML parsing.
|
|
6
6
|
- `mod_artifact` owns strict multi-host assembly; `mod_provenance` owns byte-preserving, hash-bound sidecars and Git source snapshots.
|
|
7
|
-
- `mod_matrix` owns local/SSH worker scheduling, exact Git-bundle transport, capability checks, smoke execution, and artifact collection. It delegates final publication to `mod_artifact`.
|
|
7
|
+
- `mod_matrix` owns local/SSH worker scheduling, exact Git-bundle transport, capability checks, configured verification commands, smoke execution, and artifact collection. It delegates final publication to `mod_artifact`.
|
|
8
8
|
|
|
9
9
|
## Key patterns
|
|
10
10
|
- smartshell `.exec()` streams output to terminal (non-silent)
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
- Project-controlled worker commands run with synthetic per-run home directories and a restricted baseline. Committed `matrix.forwardEnvironment` requests must be granted separately through operator-owned `TSRUST_MATRIX_ALLOWED_ENVIRONMENT`; never expose transport-only `HOME` or `SSH_AUTH_SOCK` to workload commands.
|
|
19
19
|
- Exact-commit bundle transport accepts regular self-contained files only. Reject submodules, tracked symlinks, checkout filters, and external-content pointer records before cloning workers.
|
|
20
20
|
- Matrix workers build isolated exact-commit clones. Failed local and remote workspaces are retained for diagnostics, capped at three runs per root; successful remote cleanup requires the exact path, commit, token, and regular owner marker.
|
|
21
|
+
- Optional `matrix.verificationCommand` runs as literal executable/arguments after frozen installation and before each worker's artifact build. It shares the worker deadline, environment restrictions and process-group lifecycle; failure or tracked-source mutation prevents assembly. Successful build results report `verifiedWorkers`; capability-only checks do not run verification.
|
|
21
22
|
- SSH builds use login shells for builder PATH setup and a heartbeat watchdog that kills the owned remote process group if the coordinator disconnects. Commands that deliberately create a new session or process group are outside that ownership boundary.
|
|
22
23
|
- SSH transport uses stdin/stdout streams, not scp. Artifact output is byte-bounded both remotely and locally; bundle input is streamed under the shared worker deadline. Every transfer validates expected architecture and the exact random workspace owner marker in the same connection.
|
|
23
24
|
- Matrix execution assumes the reviewed commit, dependency graph, lifecycle scripts, builders, toolchains, registries, and SSH configuration are trusted. Correctness checks are not same-UID sandboxing.
|
package/readme.md
CHANGED
|
@@ -225,12 +225,29 @@ The transaction records a boot-scoped host identity, process, owner token, publi
|
|
|
225
225
|
}
|
|
226
226
|
},
|
|
227
227
|
"smokeTestArgs": ["--version"],
|
|
228
|
+
"verificationCommand": ["cargo", "test", "--manifest-path", "rust/Cargo.toml", "--workspace", "--locked"],
|
|
228
229
|
"forwardEnvironment": ["NPM_TOKEN"]
|
|
229
230
|
}
|
|
230
231
|
}
|
|
231
232
|
}
|
|
232
233
|
```
|
|
233
234
|
|
|
235
|
+
`matrix.verificationCommand` is optional. It is an executable followed by literal
|
|
236
|
+
arguments, with no shell expansion. It runs once per configured worker in that
|
|
237
|
+
worker's exact-commit checkout, after frozen dependency installation and before
|
|
238
|
+
the artifact build. Use `['pnpm', 'run', 'verify-native']` for a reviewed project
|
|
239
|
+
script that combines Rust and public API qualification. A test failure, timeout,
|
|
240
|
+
interruption or tracked-source mutation prevents artifact assembly and preserves
|
|
241
|
+
the prior output. Verification inherits the restricted worker environment, pnpm
|
|
242
|
+
age policy, shared one-hour worker deadline and owned process-group cleanup;
|
|
243
|
+
SSH workers also retain the disconnect watchdog. Arguments are limited to 256
|
|
244
|
+
entries and 64 KiB total, with no NUL or line breaks. Keep credentials out of
|
|
245
|
+
committed commands and test output.
|
|
246
|
+
|
|
247
|
+
Successful `NativeMatrixBuilder.build()` results include `verifiedWorkers`, the
|
|
248
|
+
host keys on which verification completed; it is empty when no command was
|
|
249
|
+
configured. `matrix check` checks capabilities only and does not run verification.
|
|
250
|
+
|
|
234
251
|
Set the referenced values outside the repository. The SSH destination may be an OpenSSH alias or `user@host`; the temporary root must be a dedicated absolute path owned by the remote account:
|
|
235
252
|
|
|
236
253
|
```bash
|
|
@@ -243,7 +260,9 @@ Builder keys are limited to `linux_amd64`, `linux_arm64`, `macos_amd64`, and `ma
|
|
|
243
260
|
|
|
244
261
|
Environment-variable names must match `[A-Za-z_][A-Za-z0-9_]*`. Committed `forwardEnvironment` entries are requests, not grants: every requested name must also appear in the operator-owned comma-separated `TSRUST_MATRIX_ALLOWED_ENVIRONMENT` value or matrix construction fails. Built-in worker and transport names cannot be requested, including `PATH`, `HOME`, `CI`, `RUSTUP_HOME`, `CARGO_HOME`, SSH agent variables, and the grant variable itself. Worker lifecycle commands receive only a small execution baseline, synthetic per-run `HOME` and `CARGO_HOME` directories, and operator-granted names; unrelated coordinator credentials are omitted. For SSH workers, granted values are made available to the SSH client and admitted into project commands only when the remote login environment supplies them, such as through deliberate OpenSSH `SendEnv`/`AcceptEnv` configuration. Values are never placed in the remote command line. SSH destinations are ASCII single aliases or `user@host` values without embedded options, ports, whitespace, or IPv6 syntax. Put ports, identity files, proxy jumps, host-key policy, credentials, and agent selection in OpenSSH configuration or an SSH agent. Temporary roots use an ASCII path whitelist and must be normalized, space-free, multi-component absolute paths whose physical resolution contains no symlink traversal. When present, `smokeTestArgs` must be a non-empty array of single-line, NUL-free strings and must not contain secrets.
|
|
245
262
|
|
|
246
|
-
|
|
263
|
+
Matrix builds capture the coordinator repository's effective `minimumReleaseAge`, `minimumReleaseAgeStrict`, and `minimumReleaseAgeExclude` values using individual `pnpm config get <key> --json` calls. These three nonsecret policy values travel to every local and SSH worker through tSRust-owned `PNPM_CONFIG_MINIMUM_RELEASE_AGE`, `PNPM_CONFIG_MINIMUM_RELEASE_AGE_STRICT`, and `PNPM_CONFIG_MINIMUM_RELEASE_AGE_EXCLUDE` environment variables. These names cannot be requested through `forwardEnvironment`. Global scope exclusions and repository overrides therefore survive the synthetic worker home. SSH transport shell-quotes the policy values; unlike granted credentials, these nonsecret values are included in the remote command. Registry and authentication configuration is never enumerated or copied, and the coordinator process environment remains unchanged. Values must be valid JSON with a nonnegative integer age, boolean strictness, and a string-array exclusion list; unset values remain unset. The policy is limited to 32 KiB, at most 512 exclusions, and 1,024 characters per exclusion. Each worker reads all three values back before installation and fails if they differ from the captured policy. There is no age-gate bypass or fallback policy.
|
|
264
|
+
|
|
265
|
+
`matrix check` validates the coordinator's package-age policy and verifies the exact project-local tsrust package version without executing its binary, the native linker, system Cargo plus rustup with an active default toolchain and readable target manifest or the complete securely resolved bundled pair with cargo, rustc, and target-manifest readiness bound to that worker's exact managed stable toolchain, worker identity, emulation or cross-execution, and remote-root ownership and permissions. It is a capability-only command: it does not require a clean worktree or compare the working configuration with the committed plan. If usable system Cargo is unavailable and the bundled executables are either absent or securely resolved but not ready, it verifies only that `curl` is available for tsrust bootstrap or clean reinstall; it does not prove network access, install targets, or compile the project. The check creates the dedicated remote root with restrictive permissions when it is absent. Capability and cleanup commands have a five-minute limit. Dependency installation, configured verification, compilation, per-binary smoke execution, bundle upload, and bounded artifact retrieval share each worker's one-hour build limit.
|
|
247
266
|
|
|
248
267
|
Run the capability-only check before release metadata is created:
|
|
249
268
|
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tsrust',
|
|
6
|
-
version: '1.
|
|
6
|
+
version: '1.12.0',
|
|
7
7
|
description: 'A tool for compiling Rust projects, detecting Cargo workspaces, building with cargo, and placing binaries in a conventional dist_rust directory.'
|
|
8
8
|
}
|
|
@@ -511,6 +511,9 @@ export class TsRustCli {
|
|
|
511
511
|
}
|
|
512
512
|
if (operation === 'build') {
|
|
513
513
|
const result = await matrixBuilder.build();
|
|
514
|
+
if (result.verifiedWorkers.length > 0) {
|
|
515
|
+
console.log(`Verified native workers: ${result.verifiedWorkers.join(', ')}`);
|
|
516
|
+
}
|
|
514
517
|
console.log(
|
|
515
518
|
`Built and assembled ${result.assembly.artifactCount} artifacts for ${result.targets.join(', ')}`,
|
|
516
519
|
);
|
|
@@ -29,6 +29,13 @@ import {
|
|
|
29
29
|
type IResolvedMatrixWorker,
|
|
30
30
|
type TMatrixHost,
|
|
31
31
|
} from './helpers.matrixconfig.js';
|
|
32
|
+
import {
|
|
33
|
+
matrixPnpmPolicyEnvironment,
|
|
34
|
+
matrixPnpmPolicyFields,
|
|
35
|
+
matrixPnpmPolicyVerificationSource,
|
|
36
|
+
readMatrixPnpmPolicy,
|
|
37
|
+
type IMatrixPnpmPolicy,
|
|
38
|
+
} from './helpers.pnpmpolicy.js';
|
|
32
39
|
|
|
33
40
|
const capabilityCommandTimeoutMs = 5 * 60 * 1000;
|
|
34
41
|
const buildCommandTimeoutMs = 60 * 60 * 1000;
|
|
@@ -160,6 +167,8 @@ export interface INativeMatrixCheckResult {
|
|
|
160
167
|
export interface INativeMatrixBuildResult extends INativeMatrixCheckResult {
|
|
161
168
|
gitCommit: string;
|
|
162
169
|
assembly: IArtifactAssemblyResult;
|
|
170
|
+
/** Workers whose configured verification command completed successfully. */
|
|
171
|
+
verifiedWorkers: TMatrixHost[];
|
|
163
172
|
}
|
|
164
173
|
|
|
165
174
|
const shellQuote = (valueArg: string): string => `'${valueArg.replace(/'/g, `'"'"'`)}'`;
|
|
@@ -235,6 +244,10 @@ export class NativeMatrixBuilder {
|
|
|
235
244
|
timeoutMs: capabilityCommandTimeoutMs,
|
|
236
245
|
});
|
|
237
246
|
await this.assertInstalledTsrustVersion(this.workspace);
|
|
247
|
+
await readMatrixPnpmPolicy(this.commandRunner, {
|
|
248
|
+
cwd: this.workspace,
|
|
249
|
+
timeoutMs: capabilityCommandTimeoutMs,
|
|
250
|
+
});
|
|
238
251
|
for (const worker of this.plan.workers) {
|
|
239
252
|
if (worker.config.transport === 'local') {
|
|
240
253
|
await this.checkLocalWorker(worker);
|
|
@@ -255,6 +268,10 @@ export class NativeMatrixBuilder {
|
|
|
255
268
|
}
|
|
256
269
|
await this.assertPlanMatchesCommit(gitBefore.commit);
|
|
257
270
|
await this.check();
|
|
271
|
+
const pnpmPolicy = await readMatrixPnpmPolicy(this.commandRunner, {
|
|
272
|
+
cwd: this.workspace,
|
|
273
|
+
timeoutMs: capabilityCommandTimeoutMs,
|
|
274
|
+
});
|
|
258
275
|
assertGitSnapshotUnchanged(gitBefore, await captureGitSnapshot(this.workspace));
|
|
259
276
|
await this.assertBundleCompatibleSource();
|
|
260
277
|
assertGitSnapshotUnchanged(gitBefore, await captureGitSnapshot(this.workspace));
|
|
@@ -292,6 +309,7 @@ export class NativeMatrixBuilder {
|
|
|
292
309
|
gitBefore.commit,
|
|
293
310
|
projectIdentity,
|
|
294
311
|
binaries,
|
|
312
|
+
pnpmPolicy,
|
|
295
313
|
),
|
|
296
314
|
);
|
|
297
315
|
} else {
|
|
@@ -310,6 +328,7 @@ export class NativeMatrixBuilder {
|
|
|
310
328
|
gitBefore.commit,
|
|
311
329
|
projectIdentity,
|
|
312
330
|
binaries,
|
|
331
|
+
pnpmPolicy,
|
|
313
332
|
),
|
|
314
333
|
);
|
|
315
334
|
}
|
|
@@ -353,6 +372,7 @@ export class NativeMatrixBuilder {
|
|
|
353
372
|
...this.checkResult(),
|
|
354
373
|
gitCommit: gitBefore.commit,
|
|
355
374
|
assembly,
|
|
375
|
+
verifiedWorkers: this.plan.verificationCommand ? this.plan.workers.map((worker) => worker.host) : [],
|
|
356
376
|
};
|
|
357
377
|
} finally {
|
|
358
378
|
if (!completed) {
|
|
@@ -386,6 +406,7 @@ export class NativeMatrixBuilder {
|
|
|
386
406
|
...transportEnvironmentNames,
|
|
387
407
|
'HOME',
|
|
388
408
|
'CARGO_HOME',
|
|
409
|
+
...matrixPnpmPolicyFields.map(([, name]) => name),
|
|
389
410
|
forwardEnvironmentGrantName,
|
|
390
411
|
]);
|
|
391
412
|
const forbidden = this.plan.forwardEnvironment.filter(
|
|
@@ -398,7 +419,7 @@ export class NativeMatrixBuilder {
|
|
|
398
419
|
}
|
|
399
420
|
}
|
|
400
421
|
|
|
401
|
-
private workerEnvironment(homeArg: string, cargoHomeArg: string): NodeJS.ProcessEnv {
|
|
422
|
+
private workerEnvironment(homeArg: string, cargoHomeArg: string, pnpmPolicy: IMatrixPnpmPolicy): NodeJS.ProcessEnv {
|
|
402
423
|
const environment: NodeJS.ProcessEnv = {};
|
|
403
424
|
for (const name of [
|
|
404
425
|
...defaultWorkerEnvironmentNames,
|
|
@@ -411,6 +432,7 @@ export class NativeMatrixBuilder {
|
|
|
411
432
|
if (!environment.RUSTUP_HOME && this.environment.HOME) {
|
|
412
433
|
environment.RUSTUP_HOME = path.join(this.environment.HOME, '.rustup');
|
|
413
434
|
}
|
|
435
|
+
Object.assign(environment, matrixPnpmPolicyEnvironment(pnpmPolicy));
|
|
414
436
|
return environment;
|
|
415
437
|
}
|
|
416
438
|
|
|
@@ -467,11 +489,14 @@ export class NativeMatrixBuilder {
|
|
|
467
489
|
}
|
|
468
490
|
}
|
|
469
491
|
|
|
470
|
-
private remoteWorkerEnvironmentFunction(homeArg: string, cargoHomeArg: string): string {
|
|
492
|
+
private remoteWorkerEnvironmentFunction(homeArg: string, cargoHomeArg: string, pnpmPolicy: IMatrixPnpmPolicy): string {
|
|
471
493
|
const names = [
|
|
472
494
|
...new Set([...defaultWorkerEnvironmentNames, ...this.plan.forwardEnvironment]),
|
|
473
495
|
];
|
|
474
|
-
const assignments =
|
|
496
|
+
const assignments = [
|
|
497
|
+
...names.map((name) => `${name}="\${${name}-}"`),
|
|
498
|
+
...Object.entries(matrixPnpmPolicyEnvironment(pnpmPolicy)).map(([name, value]) => `${name}=${shellQuote(value)}`),
|
|
499
|
+
].join(' ');
|
|
475
500
|
return `run_matrix_worker() { worker_rustup_home="\${RUSTUP_HOME:-\${HOME}/.rustup}"; env -i ${assignments} HOME=${shellQuote(homeArg)} CARGO_HOME=${shellQuote(cargoHomeArg)} RUSTUP_HOME="$worker_rustup_home" "$@"; }`;
|
|
476
501
|
}
|
|
477
502
|
|
|
@@ -909,6 +934,7 @@ export class NativeMatrixBuilder {
|
|
|
909
934
|
gitCommitArg: string,
|
|
910
935
|
identityArg: { projectName: string; projectVersion: string },
|
|
911
936
|
binariesArg: string[],
|
|
937
|
+
pnpmPolicy: IMatrixPnpmPolicy,
|
|
912
938
|
): Promise<string> {
|
|
913
939
|
const workerParent = path.join(runDirectoryArg, workerArg.host);
|
|
914
940
|
const workerWorkspace = path.join(workerParent, 'workspace');
|
|
@@ -917,7 +943,7 @@ export class NativeMatrixBuilder {
|
|
|
917
943
|
await fs.promises.mkdir(workerParent, { mode: 0o700 });
|
|
918
944
|
await fs.promises.mkdir(workerHome, { mode: 0o700 });
|
|
919
945
|
await fs.promises.mkdir(workerCargoHome, { mode: 0o700 });
|
|
920
|
-
const workerEnvironment = this.workerEnvironment(workerHome, workerCargoHome);
|
|
946
|
+
const workerEnvironment = this.workerEnvironment(workerHome, workerCargoHome, pnpmPolicy);
|
|
921
947
|
const buildDeadline = Date.now() + buildCommandTimeoutMs;
|
|
922
948
|
await this.commandRunner.execute(
|
|
923
949
|
'git',
|
|
@@ -931,12 +957,26 @@ export class NativeMatrixBuilder {
|
|
|
931
957
|
},
|
|
932
958
|
);
|
|
933
959
|
await this.assertWorkerSource(workerWorkspace, gitCommitArg, buildDeadline, workerArg.host);
|
|
960
|
+
await this.commandRunner.execute('node', ['-e', matrixPnpmPolicyVerificationSource, JSON.stringify(pnpmPolicy)], {
|
|
961
|
+
cwd: workerWorkspace,
|
|
962
|
+
timeoutMs: Math.min(capabilityCommandTimeoutMs, this.remainingBuildTimeout(buildDeadline, workerArg.host)),
|
|
963
|
+
environment: workerEnvironment,
|
|
964
|
+
});
|
|
934
965
|
await this.commandRunner.execute('pnpm', ['install', '--frozen-lockfile'], {
|
|
935
966
|
cwd: workerWorkspace,
|
|
936
967
|
timeoutMs: this.remainingBuildTimeout(buildDeadline, workerArg.host),
|
|
937
968
|
environment: workerEnvironment,
|
|
938
969
|
});
|
|
939
970
|
await this.assertInstalledTsrustVersion(workerWorkspace);
|
|
971
|
+
if (this.plan.verificationCommand) {
|
|
972
|
+
const [command, ...args] = this.plan.verificationCommand;
|
|
973
|
+
await this.commandRunner.execute(command, args, {
|
|
974
|
+
cwd: workerWorkspace,
|
|
975
|
+
timeoutMs: this.remainingBuildTimeout(buildDeadline, workerArg.host),
|
|
976
|
+
environment: workerEnvironment,
|
|
977
|
+
});
|
|
978
|
+
await this.assertWorkerSource(workerWorkspace, gitCommitArg, buildDeadline, workerArg.host);
|
|
979
|
+
}
|
|
940
980
|
this.remainingBuildTimeout(buildDeadline, workerArg.host);
|
|
941
981
|
await this.commandRunner.execute('pnpm', this.workerTsrustArgs(workerArg), {
|
|
942
982
|
cwd: workerWorkspace,
|
|
@@ -1162,6 +1202,7 @@ export class NativeMatrixBuilder {
|
|
|
1162
1202
|
gitCommitArg: string,
|
|
1163
1203
|
identityArg: { projectName: string; projectVersion: string },
|
|
1164
1204
|
binariesArg: string[],
|
|
1205
|
+
pnpmPolicy: IMatrixPnpmPolicy,
|
|
1165
1206
|
): Promise<string> {
|
|
1166
1207
|
const buildDeadline = Date.now() + buildCommandTimeoutMs;
|
|
1167
1208
|
const remoteBundle = `${remoteArg.directory}/source.bundle`;
|
|
@@ -1200,7 +1241,10 @@ export class NativeMatrixBuilder {
|
|
|
1200
1241
|
'test "$(git rev-parse HEAD)" = "$expected_commit"',
|
|
1201
1242
|
'test -z "$(git status --porcelain=v1 --untracked-files=all)"',
|
|
1202
1243
|
`test -z "$(git ls-files -v | grep -v '^H ' || true)"`,
|
|
1203
|
-
this.remoteWorkerEnvironmentFunction(remoteHome, remoteCargoHome),
|
|
1244
|
+
this.remoteWorkerEnvironmentFunction(remoteHome, remoteCargoHome, pnpmPolicy),
|
|
1245
|
+
['run_matrix_worker', 'node', '-e', matrixPnpmPolicyVerificationSource, JSON.stringify(pnpmPolicy)]
|
|
1246
|
+
.map(shellQuote)
|
|
1247
|
+
.join(' '),
|
|
1204
1248
|
['run_matrix_worker', 'pnpm', 'install', '--frozen-lockfile']
|
|
1205
1249
|
.map(shellQuote)
|
|
1206
1250
|
.join(' '),
|
|
@@ -1212,6 +1256,12 @@ export class NativeMatrixBuilder {
|
|
|
1212
1256
|
]
|
|
1213
1257
|
.map(shellQuote)
|
|
1214
1258
|
.join(' '),
|
|
1259
|
+
...(this.plan.verificationCommand ? [
|
|
1260
|
+
['run_matrix_worker', ...this.plan.verificationCommand].map(shellQuote).join(' '),
|
|
1261
|
+
'test "$(git rev-parse HEAD)" = "$expected_commit"',
|
|
1262
|
+
'test -z "$(git status --porcelain=v1 --untracked-files=all)"',
|
|
1263
|
+
`test -z "$(git ls-files -v | grep -v '^H ' || true)"`,
|
|
1264
|
+
] : []),
|
|
1215
1265
|
['run_matrix_worker', 'pnpm', ...this.workerTsrustArgs(remoteArg.worker)]
|
|
1216
1266
|
.map(shellQuote)
|
|
1217
1267
|
.join(' '),
|
|
@@ -32,6 +32,9 @@ export type TTsrustMatrixBuilderConfig =
|
|
|
32
32
|
export interface ITsrustMatrixConfig {
|
|
33
33
|
builders: Partial<Record<TMatrixHost, TTsrustMatrixBuilderConfig>>;
|
|
34
34
|
smokeTestArgs?: string[];
|
|
35
|
+
/** Executable and arguments, run in each isolated checkout after install and
|
|
36
|
+
* before its artifact build. Shares the worker deadline and environment. */
|
|
37
|
+
verificationCommand?: string[];
|
|
35
38
|
forwardEnvironment?: string[];
|
|
36
39
|
}
|
|
37
40
|
|
|
@@ -46,6 +49,7 @@ export interface IResolvedMatrixPlan {
|
|
|
46
49
|
workers: IResolvedMatrixWorker[];
|
|
47
50
|
expectedTargets: INormalizedTarget[];
|
|
48
51
|
smokeTestArgs?: string[];
|
|
52
|
+
verificationCommand?: string[];
|
|
49
53
|
forwardEnvironment: string[];
|
|
50
54
|
}
|
|
51
55
|
|
|
@@ -139,6 +143,17 @@ const validateForwardEnvironment = (valueArg: unknown): string[] => {
|
|
|
139
143
|
return [...new Set(valueArg)];
|
|
140
144
|
};
|
|
141
145
|
|
|
146
|
+
const validateVerificationCommand = (valueArg: unknown): string[] | undefined => {
|
|
147
|
+
if (valueArg === undefined) return undefined;
|
|
148
|
+
if (!Array.isArray(valueArg) || valueArg.length === 0 || valueArg.length > 256
|
|
149
|
+
|| valueArg.some((argument) => typeof argument !== 'string' || /[\0\r\n]/.test(argument))
|
|
150
|
+
|| valueArg[0].length === 0
|
|
151
|
+
|| valueArg.reduce((bytes, argument) => bytes + Buffer.byteLength(argument, 'utf8') + 1, 0) > 64 * 1024) {
|
|
152
|
+
throw new Error('matrix.verificationCommand must contain an executable and single-line arguments within 256 entries and 64 KiB');
|
|
153
|
+
}
|
|
154
|
+
return [...valueArg];
|
|
155
|
+
};
|
|
156
|
+
|
|
142
157
|
export const resolveMatrixPlan = (configArg: ITsrustConfig): IResolvedMatrixPlan => {
|
|
143
158
|
const matrixValue = configArg.matrix as unknown;
|
|
144
159
|
if (!isRecord(matrixValue)) {
|
|
@@ -146,7 +161,7 @@ export const resolveMatrixPlan = (configArg: ITsrustConfig): IResolvedMatrixPlan
|
|
|
146
161
|
}
|
|
147
162
|
assertClosedKeys(
|
|
148
163
|
matrixValue,
|
|
149
|
-
['builders', 'smokeTestArgs', 'forwardEnvironment'],
|
|
164
|
+
['builders', 'smokeTestArgs', 'verificationCommand', 'forwardEnvironment'],
|
|
150
165
|
'matrix',
|
|
151
166
|
);
|
|
152
167
|
if (!isRecord(matrixValue.builders) || Object.keys(matrixValue.builders).length === 0) {
|
|
@@ -217,6 +232,7 @@ export const resolveMatrixPlan = (configArg: ITsrustConfig): IResolvedMatrixPlan
|
|
|
217
232
|
workers,
|
|
218
233
|
expectedTargets,
|
|
219
234
|
smokeTestArgs: validateSmokeTestArgs(matrixValue.smokeTestArgs),
|
|
235
|
+
verificationCommand: validateVerificationCommand(matrixValue.verificationCommand),
|
|
220
236
|
forwardEnvironment: validateForwardEnvironment(matrixValue.forwardEnvironment),
|
|
221
237
|
};
|
|
222
238
|
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { IMatrixCommandOptions, IMatrixCommandRunner } from './classes.matrixcommandrunner.js';
|
|
2
|
+
|
|
3
|
+
export const matrixPnpmPolicyFields = [
|
|
4
|
+
['minimumReleaseAge', 'PNPM_CONFIG_MINIMUM_RELEASE_AGE'],
|
|
5
|
+
['minimumReleaseAgeStrict', 'PNPM_CONFIG_MINIMUM_RELEASE_AGE_STRICT'],
|
|
6
|
+
['minimumReleaseAgeExclude', 'PNPM_CONFIG_MINIMUM_RELEASE_AGE_EXCLUDE'],
|
|
7
|
+
] as const;
|
|
8
|
+
|
|
9
|
+
export interface IMatrixPnpmPolicy {
|
|
10
|
+
readonly minimumReleaseAge: number | null;
|
|
11
|
+
readonly minimumReleaseAgeStrict: boolean | null;
|
|
12
|
+
readonly minimumReleaseAgeExclude: readonly string[] | null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const maximumPolicyBytes = 32 * 1024;
|
|
16
|
+
|
|
17
|
+
/** Capture only nonsecret package-age policy; never enumerate registry or auth configuration. */
|
|
18
|
+
export async function readMatrixPnpmPolicy(
|
|
19
|
+
runner: IMatrixCommandRunner,
|
|
20
|
+
options: IMatrixCommandOptions,
|
|
21
|
+
): Promise<IMatrixPnpmPolicy> {
|
|
22
|
+
const values = await Promise.all(matrixPnpmPolicyFields.map(async ([key]) => {
|
|
23
|
+
const result = await runner.execute('pnpm', ['config', 'get', key, '--json'], {
|
|
24
|
+
...options,
|
|
25
|
+
capture: true,
|
|
26
|
+
});
|
|
27
|
+
if (Buffer.byteLength(result.stdout) > maximumPolicyBytes) {
|
|
28
|
+
throw new Error(`Matrix pnpm ${key} policy exceeds the supported byte limit`);
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(result.stdout) as unknown;
|
|
32
|
+
} catch {
|
|
33
|
+
throw new Error(`Matrix pnpm ${key} policy is not valid JSON`);
|
|
34
|
+
}
|
|
35
|
+
}));
|
|
36
|
+
const [age, strict, exclude] = values;
|
|
37
|
+
if (age !== null && (typeof age !== 'number' || !Number.isSafeInteger(age) || age < 0)) {
|
|
38
|
+
throw new Error('Matrix pnpm minimumReleaseAge must be a nonnegative safe integer or unset');
|
|
39
|
+
}
|
|
40
|
+
if (strict !== null && typeof strict !== 'boolean') {
|
|
41
|
+
throw new Error('Matrix pnpm minimumReleaseAgeStrict must be boolean or unset');
|
|
42
|
+
}
|
|
43
|
+
if (exclude !== null && (!Array.isArray(exclude) || exclude.length > 512 || exclude.some(
|
|
44
|
+
(value) => typeof value !== 'string' || value.length === 0 || value.length > 1024 || /[\x00-\x1f\x7f]/.test(value),
|
|
45
|
+
))) {
|
|
46
|
+
throw new Error('Matrix pnpm minimumReleaseAgeExclude must be a bounded string array or unset');
|
|
47
|
+
}
|
|
48
|
+
const policy: IMatrixPnpmPolicy = {
|
|
49
|
+
minimumReleaseAge: age as number | null,
|
|
50
|
+
minimumReleaseAgeStrict: strict as boolean | null,
|
|
51
|
+
minimumReleaseAgeExclude: exclude === null ? null : Object.freeze([...(exclude as string[])]),
|
|
52
|
+
};
|
|
53
|
+
if (Buffer.byteLength(JSON.stringify(policy)) > maximumPolicyBytes) {
|
|
54
|
+
throw new Error('Matrix pnpm policy exceeds the supported byte limit');
|
|
55
|
+
}
|
|
56
|
+
return Object.freeze(policy);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function matrixPnpmPolicyEnvironment(policy: IMatrixPnpmPolicy): Record<string, string> {
|
|
60
|
+
return Object.fromEntries(matrixPnpmPolicyFields.flatMap(([key, name]) =>
|
|
61
|
+
policy[key] === null ? [] : [[name, JSON.stringify(policy[key])]],
|
|
62
|
+
));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** The same bounded readback executes inside local and SSH worker environments. */
|
|
66
|
+
export const matrixPnpmPolicyVerificationSource = [
|
|
67
|
+
"const { execFileSync } = require('node:child_process');",
|
|
68
|
+
'const expected = JSON.parse(process.argv[1]);',
|
|
69
|
+
`for (const [key] of ${JSON.stringify(matrixPnpmPolicyFields)}) {`,
|
|
70
|
+
' let actual;',
|
|
71
|
+
' try {',
|
|
72
|
+
" actual = JSON.parse(execFileSync('pnpm', ['config', 'get', key, '--json'], { encoding: 'utf8', maxBuffer: 32768, timeout: 60000 }));",
|
|
73
|
+
' } catch { throw new Error(`Matrix worker cannot verify pnpm ${key} policy`); }',
|
|
74
|
+
' if (JSON.stringify(actual) !== JSON.stringify(expected[key])) {',
|
|
75
|
+
' throw new Error(`Matrix worker pnpm ${key} policy differs from the coordinator`);',
|
|
76
|
+
' }',
|
|
77
|
+
'}',
|
|
78
|
+
].join('\n');
|