putitoutthere 0.1.3 → 0.1.5
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/cli.d.ts.map +1 -1
- package/dist/cli.js +57 -2
- package/dist/cli.js.map +1 -1
- package/dist/completeness.d.ts +6 -0
- package/dist/completeness.d.ts.map +1 -1
- package/dist/completeness.js +24 -0
- package/dist/completeness.js.map +1 -1
- package/dist/doctor.d.ts +15 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +54 -4
- package/dist/doctor.js.map +1 -1
- package/dist/preflight-run.d.ts +47 -0
- package/dist/preflight-run.d.ts.map +1 -0
- package/dist/preflight-run.js +197 -0
- package/dist/preflight-run.js.map +1 -0
- package/package.json +1 -1
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;AAsFH,wBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgKlE"}
|
package/dist/cli.js
CHANGED
|
@@ -17,9 +17,10 @@ import pkg from '../package.json' with { type: 'json' };
|
|
|
17
17
|
import { doctor } from './doctor.js';
|
|
18
18
|
import { init } from './init.js';
|
|
19
19
|
import { plan } from './plan.js';
|
|
20
|
+
import { runPreflight } from './preflight-run.js';
|
|
20
21
|
import { publish } from './publish.js';
|
|
21
22
|
const VERSION = pkg.version;
|
|
22
|
-
const COMMANDS = ['init', 'plan', 'publish', 'doctor', 'version'];
|
|
23
|
+
const COMMANDS = ['init', 'plan', 'publish', 'doctor', 'preflight', 'version'];
|
|
23
24
|
function isCommand(value) {
|
|
24
25
|
return COMMANDS.includes(value);
|
|
25
26
|
}
|
|
@@ -32,6 +33,7 @@ function printUsage() {
|
|
|
32
33
|
' plan Compute and emit the release plan',
|
|
33
34
|
' publish Execute the plan',
|
|
34
35
|
' doctor Validate config + handlers + auth (#23)',
|
|
36
|
+
' preflight Run every pre-publish check without side effects (#93)',
|
|
35
37
|
' version Print CLI version',
|
|
36
38
|
'',
|
|
37
39
|
'Options:',
|
|
@@ -40,6 +42,8 @@ function printUsage() {
|
|
|
40
42
|
' --dry-run publish without side effects',
|
|
41
43
|
' --json emit machine-readable output (plan only)',
|
|
42
44
|
' --force overwrite putitoutthere.toml on init',
|
|
45
|
+
' --artifacts doctor: also check artifact completeness',
|
|
46
|
+
' --all preflight: include non-cascaded packages too',
|
|
43
47
|
' --cadence <mode> init: immediate (default) or scheduled',
|
|
44
48
|
'',
|
|
45
49
|
'See https://github.com/thekevinscott/put-it-out-there for docs.',
|
|
@@ -47,7 +51,14 @@ function printUsage() {
|
|
|
47
51
|
].join('\n'));
|
|
48
52
|
}
|
|
49
53
|
function parseFlags(argv) {
|
|
50
|
-
const out = {
|
|
54
|
+
const out = {
|
|
55
|
+
cwd: process.cwd(),
|
|
56
|
+
dryRun: false,
|
|
57
|
+
json: false,
|
|
58
|
+
force: false,
|
|
59
|
+
artifacts: false,
|
|
60
|
+
all: false,
|
|
61
|
+
};
|
|
51
62
|
for (let i = 0; i < argv.length; i++) {
|
|
52
63
|
const a = argv[i];
|
|
53
64
|
/* v8 ignore next -- ?? fallback is for malformed argv; tests always pass the value */
|
|
@@ -61,6 +72,10 @@ function parseFlags(argv) {
|
|
|
61
72
|
out.json = true;
|
|
62
73
|
else if (a === '--force')
|
|
63
74
|
out.force = true;
|
|
75
|
+
else if (a === '--artifacts')
|
|
76
|
+
out.artifacts = true;
|
|
77
|
+
else if (a === '--all')
|
|
78
|
+
out.all = true;
|
|
64
79
|
else if (a === '--cadence') {
|
|
65
80
|
const v = argv[++i];
|
|
66
81
|
/* v8 ignore next -- invalid cadence is caught by the type system for legit callers */
|
|
@@ -141,6 +156,7 @@ export async function run(argv) {
|
|
|
141
156
|
cwd: flags.cwd,
|
|
142
157
|
/* v8 ignore next -- --config test covered via plan arm */
|
|
143
158
|
...(flags.config !== undefined ? { configPath: flags.config } : {}),
|
|
159
|
+
checkArtifacts: flags.artifacts,
|
|
144
160
|
});
|
|
145
161
|
if (flags.json) {
|
|
146
162
|
process.stdout.write(JSON.stringify(report) + '\n');
|
|
@@ -150,6 +166,14 @@ export async function run(argv) {
|
|
|
150
166
|
const badge = p.auth === 'missing' ? '✗' : '✓';
|
|
151
167
|
process.stdout.write(` ${badge} ${p.name} (${p.kind}) — auth: ${p.auth}\n`);
|
|
152
168
|
}
|
|
169
|
+
if (report.artifacts && report.artifacts.length > 0) {
|
|
170
|
+
process.stdout.write('\nArtifacts:\n');
|
|
171
|
+
for (const a of report.artifacts) {
|
|
172
|
+
const badge = a.present ? '✓' : '✗';
|
|
173
|
+
const suffix = a.present ? '' : ` (expected: ${a.expected})`;
|
|
174
|
+
process.stdout.write(` ${badge} ${a.artifact_name} (${a.target})${suffix}\n`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
153
177
|
if (report.issues.length > 0) {
|
|
154
178
|
process.stdout.write('\nIssues:\n');
|
|
155
179
|
for (const i of report.issues) {
|
|
@@ -162,6 +186,37 @@ export async function run(argv) {
|
|
|
162
186
|
}
|
|
163
187
|
return report.ok ? 0 : 1;
|
|
164
188
|
}
|
|
189
|
+
case 'preflight': {
|
|
190
|
+
const report = await runPreflight({
|
|
191
|
+
cwd: flags.cwd,
|
|
192
|
+
/* v8 ignore next -- --config already covered via plan arm */
|
|
193
|
+
...(flags.config !== undefined ? { configPath: flags.config } : {}),
|
|
194
|
+
all: flags.all,
|
|
195
|
+
});
|
|
196
|
+
if (flags.json) {
|
|
197
|
+
process.stdout.write(JSON.stringify(report) + '\n');
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
if (report.checks.length === 0) {
|
|
201
|
+
process.stdout.write('preflight: no packages in scope\n');
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
for (const c of report.checks) {
|
|
205
|
+
const badge = c.status === 'ok' ? '✓' : c.status === 'skip' ? '·' : '✗';
|
|
206
|
+
const detail = c.detail ? ` — ${c.detail}` : '';
|
|
207
|
+
process.stdout.write(` ${badge} ${c.package} (${c.kind}) ${c.check}${detail}\n`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (report.issues.length > 0) {
|
|
211
|
+
process.stdout.write('\nIssues:\n');
|
|
212
|
+
for (const i of report.issues) {
|
|
213
|
+
process.stdout.write(` - ${i}\n`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
process.stdout.write(report.ok ? '\npreflight: ok\n' : '\npreflight: fail\n');
|
|
217
|
+
}
|
|
218
|
+
return report.ok ? 0 : 1;
|
|
219
|
+
}
|
|
165
220
|
case 'init': {
|
|
166
221
|
const r = init({
|
|
167
222
|
cwd: flags.cwd,
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;AAEH,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AAE5B,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/completeness.d.ts
CHANGED
|
@@ -21,6 +21,12 @@ export interface MatrixRow {
|
|
|
21
21
|
target: string;
|
|
22
22
|
artifact_name: string;
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Human-facing hint for where a row's artifact is expected to live.
|
|
26
|
+
* Lives alongside error messages so users don't have to cross-reference
|
|
27
|
+
* plan.md §12.4 to figure out the naming contract.
|
|
28
|
+
*/
|
|
29
|
+
export declare function expectedLayout(row: MatrixRow): string;
|
|
24
30
|
export interface MissingArtifact {
|
|
25
31
|
row: MatrixRow;
|
|
26
32
|
reason: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completeness.d.ts","sourceRoot":"","sources":["../src/completeness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,aAAa,EAAE,MAAM,GACpB,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAclC;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,aAAa,EAAE,MAAM,GACpB,IAAI,
|
|
1
|
+
{"version":3,"file":"completeness.d.ts","sourceRoot":"","sources":["../src/completeness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAgBrD;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,aAAa,EAAE,MAAM,GACpB,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAclC;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,aAAa,EAAE,MAAM,GACpB,IAAI,CAiBN"}
|
package/dist/completeness.js
CHANGED
|
@@ -15,6 +15,28 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
17
17
|
import { join } from 'node:path';
|
|
18
|
+
/**
|
|
19
|
+
* Human-facing hint for where a row's artifact is expected to live.
|
|
20
|
+
* Lives alongside error messages so users don't have to cross-reference
|
|
21
|
+
* plan.md §12.4 to figure out the naming contract.
|
|
22
|
+
*/
|
|
23
|
+
export function expectedLayout(row) {
|
|
24
|
+
const dir = `artifacts/${row.artifact_name}`;
|
|
25
|
+
switch (row.kind) {
|
|
26
|
+
case 'crates':
|
|
27
|
+
return `${dir}/${row.name}-${row.version}.crate`;
|
|
28
|
+
case 'pypi':
|
|
29
|
+
if (row.target === 'sdist') {
|
|
30
|
+
return `${dir}/${row.name}-${row.version}.tar.gz`;
|
|
31
|
+
}
|
|
32
|
+
return `${dir}/${row.name}-${row.version}-<python-tags>.whl`;
|
|
33
|
+
case 'npm':
|
|
34
|
+
if (row.target === 'main' || row.target === 'noarch') {
|
|
35
|
+
return `${dir}/package.json`;
|
|
36
|
+
}
|
|
37
|
+
return `${dir}/<binary-or-bundle>`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
18
40
|
export function checkCompleteness(matrix, artifactsRoot) {
|
|
19
41
|
const byPackage = new Map();
|
|
20
42
|
for (const row of matrix) {
|
|
@@ -38,9 +60,11 @@ export function requireCompleteness(matrix, artifactsRoot) {
|
|
|
38
60
|
lines.push(` ${pkg}:`);
|
|
39
61
|
for (const m of result.missing) {
|
|
40
62
|
lines.push(` - target=${m.row.target} artifact=${m.row.artifact_name}: ${m.reason}`);
|
|
63
|
+
lines.push(` expected: ${expectedLayout(m.row)}`);
|
|
41
64
|
}
|
|
42
65
|
}
|
|
43
66
|
lines.push('');
|
|
67
|
+
lines.push('Naming contract: plan.md §12.4 (artifacts/{artifact_name}/).');
|
|
44
68
|
lines.push('No side effects performed. Fix the build and re-run.');
|
|
45
69
|
throw new Error(lines.join('\n'));
|
|
46
70
|
}
|
package/dist/completeness.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completeness.js","sourceRoot":"","sources":["../src/completeness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"completeness.js","sourceRoot":"","sources":["../src/completeness.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts
CHANGED
|
@@ -6,12 +6,19 @@
|
|
|
6
6
|
* structured report rather than throwing so the CLI can render it as
|
|
7
7
|
* a table.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* When `checkArtifacts` is on, also walks the plan and checks each
|
|
10
|
+
* expected artifact directory. Silent-skips when plan can't run (no
|
|
11
|
+
* git state / no commits) so `doctor` stays useful in contexts that
|
|
12
|
+
* don't have a release history yet.
|
|
13
|
+
*
|
|
14
|
+
* Issue #23. Plan: §21.1, §16.4.7. Artifact check: #89.
|
|
10
15
|
*/
|
|
11
16
|
import { type AuthResult } from './preflight.js';
|
|
12
17
|
export interface DoctorOptions {
|
|
13
18
|
cwd: string;
|
|
14
19
|
configPath?: string;
|
|
20
|
+
/** When true, walks the plan and checks each artifact dir exists. */
|
|
21
|
+
checkArtifacts?: boolean;
|
|
15
22
|
}
|
|
16
23
|
export interface DoctorReport {
|
|
17
24
|
ok: boolean;
|
|
@@ -21,6 +28,13 @@ export interface DoctorReport {
|
|
|
21
28
|
kind: string;
|
|
22
29
|
auth: AuthResult['via'];
|
|
23
30
|
}>;
|
|
31
|
+
artifacts?: Array<{
|
|
32
|
+
package: string;
|
|
33
|
+
target: string;
|
|
34
|
+
artifact_name: string;
|
|
35
|
+
present: boolean;
|
|
36
|
+
expected: string;
|
|
37
|
+
}>;
|
|
24
38
|
}
|
|
25
39
|
export declare function doctor(opts: DoctorOptions): Promise<DoctorReport>;
|
|
26
40
|
//# sourceMappingURL=doctor.d.ts.map
|
package/dist/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;KACzB,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA6CvE"}
|
package/dist/doctor.js
CHANGED
|
@@ -6,11 +6,20 @@
|
|
|
6
6
|
* structured report rather than throwing so the CLI can render it as
|
|
7
7
|
* a table.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* When `checkArtifacts` is on, also walks the plan and checks each
|
|
10
|
+
* expected artifact directory. Silent-skips when plan can't run (no
|
|
11
|
+
* git state / no commits) so `doctor` stays useful in contexts that
|
|
12
|
+
* don't have a release history yet.
|
|
13
|
+
*
|
|
14
|
+
* Issue #23. Plan: §21.1, §16.4.7. Artifact check: #89.
|
|
10
15
|
*/
|
|
16
|
+
import { existsSync } from 'node:fs';
|
|
17
|
+
import { join } from 'node:path';
|
|
18
|
+
import { expectedLayout } from './completeness.js';
|
|
11
19
|
import { loadConfig } from './config.js';
|
|
20
|
+
import { plan } from './plan.js';
|
|
12
21
|
import { checkAuth } from './preflight.js';
|
|
13
|
-
export function doctor(opts) {
|
|
22
|
+
export async function doctor(opts) {
|
|
14
23
|
const issues = [];
|
|
15
24
|
let config = null;
|
|
16
25
|
/* v8 ignore next -- tests always pass an explicit cwd */
|
|
@@ -36,10 +45,51 @@ export function doctor(opts) {
|
|
|
36
45
|
}
|
|
37
46
|
}
|
|
38
47
|
}
|
|
39
|
-
|
|
48
|
+
const artifacts = opts.checkArtifacts && config
|
|
49
|
+
? await checkArtifacts(opts, cfgPath, issues)
|
|
50
|
+
: undefined;
|
|
51
|
+
return {
|
|
40
52
|
ok: issues.length === 0,
|
|
41
53
|
issues,
|
|
42
54
|
packages,
|
|
43
|
-
|
|
55
|
+
...(artifacts !== undefined ? { artifacts } : {}),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async function checkArtifacts(opts, cfgPath, issues) {
|
|
59
|
+
let matrix;
|
|
60
|
+
try {
|
|
61
|
+
matrix = (await plan({ cwd: opts.cwd, configPath: cfgPath }));
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
// Plan needs a git repo with at least one commit. In a scratch
|
|
65
|
+
// checkout (no git state yet) we can't walk the plan at all, so
|
|
66
|
+
// we note it as a soft issue and move on.
|
|
67
|
+
/* v8 ignore next -- non-Error catch fallback path */
|
|
68
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
69
|
+
issues.push(`artifacts: cannot walk plan (${message})`);
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
const root = join(opts.cwd, 'artifacts');
|
|
73
|
+
const rows = [];
|
|
74
|
+
for (const row of matrix) {
|
|
75
|
+
// Vanilla npm publishes from the source tree; there's no separate
|
|
76
|
+
// artifact dir to check. Mirrors completeness.ts's carve-out.
|
|
77
|
+
if (row.kind === 'npm' && row.target === 'noarch')
|
|
78
|
+
continue;
|
|
79
|
+
const dir = join(root, row.artifact_name);
|
|
80
|
+
const present = existsSync(dir);
|
|
81
|
+
const expected = expectedLayout(row);
|
|
82
|
+
rows.push({
|
|
83
|
+
package: row.name,
|
|
84
|
+
target: row.target,
|
|
85
|
+
artifact_name: row.artifact_name,
|
|
86
|
+
present,
|
|
87
|
+
expected,
|
|
88
|
+
});
|
|
89
|
+
if (!present) {
|
|
90
|
+
issues.push(`artifacts: ${row.name} (${row.target}) missing; expected ${expected}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return rows;
|
|
44
94
|
}
|
|
45
95
|
//# sourceMappingURL=doctor.js.map
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `putitoutthere preflight` — run every pre-publish check against every
|
|
3
|
+
* package, without side effects.
|
|
4
|
+
*
|
|
5
|
+
* Lives alongside (not inside) `preflight.ts` because that module is
|
|
6
|
+
* scoped to auth-only checks that handlers delegate to. This one is
|
|
7
|
+
* the cross-cutting orchestrator that `doctor` and `publish` each use
|
|
8
|
+
* pieces of.
|
|
9
|
+
*
|
|
10
|
+
* Issue #93. Plan: §16.4.7.
|
|
11
|
+
*
|
|
12
|
+
* Check catalogue:
|
|
13
|
+
* - path: pkg.path exists on disk (resolved against opts.cwd).
|
|
14
|
+
* - manifest: the per-kind manifest file exists under pkg.path.
|
|
15
|
+
* - auth: OIDC or the per-kind token env var is set.
|
|
16
|
+
* - repository: package.json has `repository` (npm --provenance requirement).
|
|
17
|
+
* - artifact: when the package is in the cascaded plan, its artifact
|
|
18
|
+
* dir exists.
|
|
19
|
+
*
|
|
20
|
+
* Default scope is "packages cascaded by the plan". `--all` widens to
|
|
21
|
+
* every configured package (useful pre-commit or when plan can't run
|
|
22
|
+
* in a scratch checkout).
|
|
23
|
+
*/
|
|
24
|
+
import type { Kind } from './types.js';
|
|
25
|
+
export interface PreflightOptions {
|
|
26
|
+
cwd: string;
|
|
27
|
+
configPath?: string;
|
|
28
|
+
/** When true, widen scope from cascaded-only to every configured package. */
|
|
29
|
+
all?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export type CheckStatus = 'ok' | 'fail' | 'skip';
|
|
32
|
+
export type CheckName = 'path' | 'manifest' | 'auth' | 'repository' | 'artifact';
|
|
33
|
+
export interface PreflightCheck {
|
|
34
|
+
package: string;
|
|
35
|
+
kind: Kind;
|
|
36
|
+
check: CheckName;
|
|
37
|
+
status: CheckStatus;
|
|
38
|
+
detail?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface PreflightReport {
|
|
41
|
+
ok: boolean;
|
|
42
|
+
checks: PreflightCheck[];
|
|
43
|
+
/** Top-level issues not scoped to a package (e.g. config parse failure). */
|
|
44
|
+
issues: string[];
|
|
45
|
+
}
|
|
46
|
+
export declare function runPreflight(opts: PreflightOptions): Promise<PreflightReport>;
|
|
47
|
+
//# sourceMappingURL=preflight-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight-run.d.ts","sourceRoot":"","sources":["../src/preflight-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AACjD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgEnF"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `putitoutthere preflight` — run every pre-publish check against every
|
|
3
|
+
* package, without side effects.
|
|
4
|
+
*
|
|
5
|
+
* Lives alongside (not inside) `preflight.ts` because that module is
|
|
6
|
+
* scoped to auth-only checks that handlers delegate to. This one is
|
|
7
|
+
* the cross-cutting orchestrator that `doctor` and `publish` each use
|
|
8
|
+
* pieces of.
|
|
9
|
+
*
|
|
10
|
+
* Issue #93. Plan: §16.4.7.
|
|
11
|
+
*
|
|
12
|
+
* Check catalogue:
|
|
13
|
+
* - path: pkg.path exists on disk (resolved against opts.cwd).
|
|
14
|
+
* - manifest: the per-kind manifest file exists under pkg.path.
|
|
15
|
+
* - auth: OIDC or the per-kind token env var is set.
|
|
16
|
+
* - repository: package.json has `repository` (npm --provenance requirement).
|
|
17
|
+
* - artifact: when the package is in the cascaded plan, its artifact
|
|
18
|
+
* dir exists.
|
|
19
|
+
*
|
|
20
|
+
* Default scope is "packages cascaded by the plan". `--all` widens to
|
|
21
|
+
* every configured package (useful pre-commit or when plan can't run
|
|
22
|
+
* in a scratch checkout).
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
25
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
26
|
+
import { expectedLayout } from './completeness.js';
|
|
27
|
+
import { loadConfig } from './config.js';
|
|
28
|
+
import { plan } from './plan.js';
|
|
29
|
+
import { checkAuth } from './preflight.js';
|
|
30
|
+
export async function runPreflight(opts) {
|
|
31
|
+
const issues = [];
|
|
32
|
+
const checks = [];
|
|
33
|
+
/* v8 ignore next -- tests always pass an explicit configPath or cwd */
|
|
34
|
+
const cfgPath = opts.configPath ?? `${opts.cwd.replace(/\/+$/, '')}/putitoutthere.toml`;
|
|
35
|
+
let config;
|
|
36
|
+
try {
|
|
37
|
+
config = loadConfig(cfgPath);
|
|
38
|
+
/* v8 ignore start -- non-Error catch fallback path */
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
42
|
+
issues.push(`config: ${message}`);
|
|
43
|
+
return { ok: false, checks, issues };
|
|
44
|
+
}
|
|
45
|
+
/* v8 ignore stop */
|
|
46
|
+
// Anchor pkg.path to opts.cwd so every downstream fs op points at the
|
|
47
|
+
// right tree (mirror src/publish.ts).
|
|
48
|
+
for (const p of config.packages) {
|
|
49
|
+
if (!isAbsolute(p.path))
|
|
50
|
+
p.path = resolve(opts.cwd, p.path);
|
|
51
|
+
}
|
|
52
|
+
let matrix = [];
|
|
53
|
+
try {
|
|
54
|
+
matrix = (await plan({ cwd: opts.cwd, configPath: cfgPath }));
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
/* v8 ignore next -- non-Error catch fallback path */
|
|
58
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
59
|
+
issues.push(`plan: cannot compute matrix (${message})`);
|
|
60
|
+
}
|
|
61
|
+
const cascaded = new Set(matrix.map((r) => r.name));
|
|
62
|
+
const scope = opts.all
|
|
63
|
+
? config.packages
|
|
64
|
+
: config.packages.filter((p) => cascaded.has(p.name));
|
|
65
|
+
const auth = checkAuth(scope);
|
|
66
|
+
for (const pkg of scope) {
|
|
67
|
+
checks.push(pathCheck(pkg));
|
|
68
|
+
checks.push(manifestCheck(pkg));
|
|
69
|
+
checks.push(authCheckFor(pkg, auth));
|
|
70
|
+
if (pkg.kind === 'npm') {
|
|
71
|
+
checks.push(repositoryCheck(pkg));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Artifact check runs only against matrix rows — non-cascaded packages
|
|
75
|
+
// have no rows, and adding a per-row check against them is misleading.
|
|
76
|
+
const artifactsRoot = join(opts.cwd, 'artifacts');
|
|
77
|
+
for (const row of matrix) {
|
|
78
|
+
// Vanilla npm publishes from source; no artifact dir exists.
|
|
79
|
+
if (row.kind === 'npm' && row.target === 'noarch')
|
|
80
|
+
continue;
|
|
81
|
+
// If the cascaded row's package isn't in scope (unusual but possible
|
|
82
|
+
// with external filters), still report — artifact issues block
|
|
83
|
+
// publish regardless of `--all`.
|
|
84
|
+
checks.push(artifactCheck(row, artifactsRoot));
|
|
85
|
+
}
|
|
86
|
+
const ok = issues.length === 0 && checks.every((c) => c.status !== 'fail');
|
|
87
|
+
return { ok, checks, issues };
|
|
88
|
+
}
|
|
89
|
+
/* ----------------------------- internals ----------------------------- */
|
|
90
|
+
function pathCheck(pkg) {
|
|
91
|
+
if (existsSync(pkg.path)) {
|
|
92
|
+
return { package: pkg.name, kind: pkg.kind, check: 'path', status: 'ok', detail: pkg.path };
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
package: pkg.name,
|
|
96
|
+
kind: pkg.kind,
|
|
97
|
+
check: 'path',
|
|
98
|
+
status: 'fail',
|
|
99
|
+
detail: `pkg.path does not exist: ${pkg.path}`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function manifestFor(kind) {
|
|
103
|
+
switch (kind) {
|
|
104
|
+
case 'crates': return 'Cargo.toml';
|
|
105
|
+
case 'pypi': return 'pyproject.toml';
|
|
106
|
+
case 'npm': return 'package.json';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function manifestCheck(pkg) {
|
|
110
|
+
const manifest = manifestFor(pkg.kind);
|
|
111
|
+
const full = join(pkg.path, manifest);
|
|
112
|
+
if (existsSync(full)) {
|
|
113
|
+
return { package: pkg.name, kind: pkg.kind, check: 'manifest', status: 'ok', detail: manifest };
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
package: pkg.name,
|
|
117
|
+
kind: pkg.kind,
|
|
118
|
+
check: 'manifest',
|
|
119
|
+
status: 'fail',
|
|
120
|
+
detail: `missing ${manifest} at ${full}`,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function authCheckFor(pkg, auth) {
|
|
124
|
+
const row = auth.results.find((r) => r.package === pkg.name);
|
|
125
|
+
/* v8 ignore start -- every scoped package gets a row in checkAuth */
|
|
126
|
+
if (row === undefined) {
|
|
127
|
+
return { package: pkg.name, kind: pkg.kind, check: 'auth', status: 'skip', detail: 'no auth row' };
|
|
128
|
+
}
|
|
129
|
+
/* v8 ignore stop */
|
|
130
|
+
if (row.via === 'missing') {
|
|
131
|
+
return {
|
|
132
|
+
package: pkg.name,
|
|
133
|
+
kind: pkg.kind,
|
|
134
|
+
check: 'auth',
|
|
135
|
+
status: 'fail',
|
|
136
|
+
detail: `needs ${row.envVar} or OIDC`,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return { package: pkg.name, kind: pkg.kind, check: 'auth', status: 'ok', detail: row.via };
|
|
140
|
+
}
|
|
141
|
+
function repositoryCheck(pkg) {
|
|
142
|
+
const pkgJsonPath = join(pkg.path, 'package.json');
|
|
143
|
+
if (!existsSync(pkgJsonPath)) {
|
|
144
|
+
return {
|
|
145
|
+
package: pkg.name,
|
|
146
|
+
kind: pkg.kind,
|
|
147
|
+
check: 'repository',
|
|
148
|
+
status: 'skip',
|
|
149
|
+
detail: 'no package.json',
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
let parsed;
|
|
153
|
+
try {
|
|
154
|
+
parsed = JSON.parse(readFileSync(pkgJsonPath, 'utf8'));
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
/* v8 ignore next -- non-Error catch fallback */
|
|
158
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
159
|
+
return {
|
|
160
|
+
package: pkg.name,
|
|
161
|
+
kind: pkg.kind,
|
|
162
|
+
check: 'repository',
|
|
163
|
+
status: 'fail',
|
|
164
|
+
detail: `package.json parse error: ${message}`,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
if (!parsed.repository) {
|
|
168
|
+
return {
|
|
169
|
+
package: pkg.name,
|
|
170
|
+
kind: pkg.kind,
|
|
171
|
+
check: 'repository',
|
|
172
|
+
status: 'fail',
|
|
173
|
+
detail: '`repository` field required for `npm publish --provenance`',
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return { package: pkg.name, kind: pkg.kind, check: 'repository', status: 'ok' };
|
|
177
|
+
}
|
|
178
|
+
function artifactCheck(row, artifactsRoot) {
|
|
179
|
+
const dir = join(artifactsRoot, row.artifact_name);
|
|
180
|
+
if (existsSync(dir)) {
|
|
181
|
+
return {
|
|
182
|
+
package: row.name,
|
|
183
|
+
kind: row.kind,
|
|
184
|
+
check: 'artifact',
|
|
185
|
+
status: 'ok',
|
|
186
|
+
detail: row.artifact_name,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
package: row.name,
|
|
191
|
+
kind: row.kind,
|
|
192
|
+
check: 'artifact',
|
|
193
|
+
status: 'fail',
|
|
194
|
+
detail: `missing ${row.artifact_name}/; expected ${expectedLayout(row)}`,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=preflight-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight-run.js","sourceRoot":"","sources":["../src/preflight-run.ts"],"names":[],"mappings":"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"}
|