@smoothbricks/cli 0.1.1 → 0.3.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/README.md +161 -32
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +110 -10
- package/dist/devenv/index.d.ts +10 -0
- package/dist/devenv/index.d.ts.map +1 -0
- package/dist/devenv/index.js +27 -0
- package/dist/generate/index.d.ts +20 -0
- package/dist/generate/index.d.ts.map +1 -0
- package/dist/generate/index.js +47 -0
- package/dist/lib/cli-package.d.ts +4 -0
- package/dist/lib/cli-package.d.ts.map +1 -0
- package/dist/lib/cli-package.js +15 -0
- package/dist/lib/run.d.ts +6 -0
- package/dist/lib/run.d.ts.map +1 -1
- package/dist/lib/run.js +32 -0
- package/dist/lib/workspace.d.ts +25 -1
- package/dist/lib/workspace.d.ts.map +1 -1
- package/dist/lib/workspace.js +79 -17
- package/dist/monorepo/commit-msg.d.ts +8 -1
- package/dist/monorepo/commit-msg.d.ts.map +1 -1
- package/dist/monorepo/commit-msg.js +85 -7
- package/dist/monorepo/index.d.ts +19 -2
- package/dist/monorepo/index.d.ts.map +1 -1
- package/dist/monorepo/index.js +104 -16
- package/dist/monorepo/lockfile.d.ts.map +1 -1
- package/dist/monorepo/lockfile.js +9 -0
- package/dist/monorepo/managed-files.js +1 -1
- package/dist/monorepo/nx-sync.d.ts +2 -1
- package/dist/monorepo/nx-sync.d.ts.map +1 -1
- package/dist/monorepo/nx-sync.js +8 -2
- package/dist/monorepo/package-hygiene.d.ts +6 -2
- package/dist/monorepo/package-hygiene.d.ts.map +1 -1
- package/dist/monorepo/package-hygiene.js +12 -4
- package/dist/monorepo/package-policy.d.ts +13 -4
- package/dist/monorepo/package-policy.d.ts.map +1 -1
- package/dist/monorepo/package-policy.js +208 -113
- package/dist/monorepo/packed-package.d.ts +3 -0
- package/dist/monorepo/packed-package.d.ts.map +1 -1
- package/dist/monorepo/packed-package.js +68 -36
- package/dist/monorepo/packs/index.d.ts +20 -1
- package/dist/monorepo/packs/index.d.ts.map +1 -1
- package/dist/monorepo/packs/index.js +238 -19
- package/dist/monorepo/publish-workflow.d.ts +0 -4
- package/dist/monorepo/publish-workflow.d.ts.map +1 -1
- package/dist/monorepo/publish-workflow.js +7 -15
- package/dist/monorepo/tool-validation.d.ts +22 -0
- package/dist/monorepo/tool-validation.d.ts.map +1 -0
- package/dist/monorepo/tool-validation.js +399 -0
- package/dist/nx/index.d.ts +25 -0
- package/dist/nx/index.d.ts.map +1 -0
- package/dist/nx/index.js +112 -0
- package/dist/release/bootstrap-npm-packages.d.ts +19 -0
- package/dist/release/bootstrap-npm-packages.d.ts.map +1 -0
- package/dist/release/bootstrap-npm-packages.js +58 -0
- package/dist/release/candidates.d.ts +11 -0
- package/dist/release/candidates.d.ts.map +1 -0
- package/dist/release/candidates.js +181 -0
- package/dist/release/core.d.ts +4 -1
- package/dist/release/core.d.ts.map +1 -1
- package/dist/release/core.js +76 -9
- package/dist/release/github-release.d.ts +1 -0
- package/dist/release/github-release.d.ts.map +1 -1
- package/dist/release/github-release.js +3 -3
- package/dist/release/index.d.ts +32 -1
- package/dist/release/index.d.ts.map +1 -1
- package/dist/release/index.js +488 -64
- package/dist/release/npm-auth.d.ts +0 -1
- package/dist/release/npm-auth.d.ts.map +1 -1
- package/dist/release/npm-auth.js +4 -16
- package/dist/release/orchestration.d.ts +11 -2
- package/dist/release/orchestration.d.ts.map +1 -1
- package/dist/release/orchestration.js +41 -3
- package/dist/release/publish-plan.js +1 -1
- package/managed/raw/git-format-staged.yml +54 -0
- package/managed/raw/tooling/git-hooks/commit-msg.sh +1 -1
- package/managed/templates/github/actions/setup-devenv/action.yml +1 -7
- package/managed/templates/github/workflows/ci.yml +4 -2
- package/package.json +15 -8
- package/src/cli.ts +153 -22
- package/src/devenv/index.test.ts +49 -0
- package/src/devenv/index.ts +38 -0
- package/src/generate/index.ts +92 -0
- package/src/lib/cli-package.ts +18 -0
- package/src/lib/run.ts +44 -0
- package/src/lib/workspace.ts +112 -17
- package/src/monorepo/__tests__/publish-workflow.test.ts +16 -9
- package/src/monorepo/commit-msg.test.ts +45 -0
- package/src/monorepo/commit-msg.ts +107 -7
- package/src/monorepo/index.ts +142 -16
- package/src/monorepo/lockfile.ts +9 -0
- package/src/monorepo/managed-files.ts +1 -1
- package/src/monorepo/nx-sync.ts +9 -2
- package/src/monorepo/package-hygiene.test.ts +34 -0
- package/src/monorepo/package-hygiene.ts +26 -4
- package/src/monorepo/package-policy.test.ts +1130 -0
- package/src/monorepo/package-policy.ts +237 -114
- package/src/monorepo/packed-package.ts +89 -37
- package/src/monorepo/packs/index.test.ts +189 -0
- package/src/monorepo/packs/index.ts +311 -20
- package/src/monorepo/publish-workflow.ts +10 -19
- package/src/monorepo/setup-test-tracing.test.ts +120 -0
- package/src/monorepo/tool-validation.test.ts +261 -0
- package/src/monorepo/tool-validation.ts +462 -0
- package/src/nx/index.test.ts +73 -0
- package/src/nx/index.ts +139 -0
- package/src/release/__tests__/bootstrap-npm-packages.test.ts +127 -0
- package/src/release/__tests__/candidates.test.ts +262 -0
- package/src/release/__tests__/core-properties.test.ts +6 -6
- package/src/release/__tests__/core-scenarios.test.ts +27 -20
- package/src/release/__tests__/core.test.ts +52 -5
- package/src/release/__tests__/fixture-repo.test.ts +90 -31
- package/src/release/__tests__/github-release.test.ts +22 -24
- package/src/release/__tests__/helpers/fixture-repo.ts +1 -0
- package/src/release/__tests__/npm-auth.test.ts +12 -21
- package/src/release/__tests__/orchestration.test.ts +142 -12
- package/src/release/__tests__/publish-plan.test.ts +9 -3
- package/src/release/__tests__/retag-unpublished.test.ts +10 -10
- package/src/release/__tests__/trust-publisher.test.ts +165 -0
- package/src/release/bootstrap-npm-packages.ts +88 -0
- package/src/release/candidates.ts +225 -0
- package/src/release/core.ts +96 -10
- package/src/release/github-release.ts +3 -3
- package/src/release/index.ts +658 -74
- package/src/release/npm-auth.ts +4 -33
- package/src/release/orchestration.ts +60 -5
- package/src/release/publish-plan.ts +1 -1
- package/dist/nx-version-actions.cjs +0 -25
- package/dist/nx-version-actions.d.cts +0 -6
- package/dist/nx-version-actions.d.cts.map +0 -1
- package/managed/raw/.git-format-staged.yml +0 -47
- package/src/nx-version-actions.cts +0 -36
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { chmodSync, existsSync, statSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
import {
|
|
3
|
+
import { runStatus } from '../../lib/run.js';
|
|
4
|
+
import { readProjectTargets } from '../../nx/index.js';
|
|
5
|
+
import { syncBunLockfileVersions, validateBunLockfileVersions } from '../lockfile.js';
|
|
4
6
|
import { validateManagedFiles } from '../managed-files.js';
|
|
5
|
-
import { validateNxSync } from '../nx-sync.js';
|
|
7
|
+
import { fixNxSync, validateNxSync } from '../nx-sync.js';
|
|
6
8
|
import { fixPackageHygiene, validatePackageHygiene } from '../package-hygiene.js';
|
|
7
|
-
import { applyNxReleaseDefaults, applyPublicPackageDefaults, applyWorkspaceDependencyDefaults, validateNxReleaseConfig, validatePublicPackageMetadata, validatePublicTags, validateRootPackagePolicy, validateWorkspaceDependencies, } from '../package-policy.js';
|
|
8
|
-
import {
|
|
9
|
+
import { applyFixableMonorepoDefaults, applyNxReleaseDefaults, applyPublicPackageDefaults, applyWorkspaceDependencyDefaults, validateNxProjectNames, validateNxReleaseConfig, validatePublicPackageMetadata, validatePublicTags, validateRootPackagePolicy, validateWorkspaceDependencies, } from '../package-policy.js';
|
|
10
|
+
import { validatePackedPublicPackageManifest, validatePackedPublicPackagePublint, validatePackedPublicPackageTypes, } from '../packed-package.js';
|
|
9
11
|
import { syncRootRuntimeVersions } from '../runtime.js';
|
|
12
|
+
import { applyToolConfigDefaults, validateToolConfig } from '../tool-validation.js';
|
|
10
13
|
const packs = [
|
|
11
14
|
{
|
|
12
15
|
name: 'core',
|
|
@@ -20,12 +23,21 @@ const packs = [
|
|
|
20
23
|
console.log('skip root runtime versions (outside devenv; pass --sync-runtime to force)');
|
|
21
24
|
}
|
|
22
25
|
},
|
|
23
|
-
async
|
|
26
|
+
async fixPreBuild(ctx) {
|
|
27
|
+
applyFixableMonorepoDefaults(ctx.root);
|
|
28
|
+
await applyToolConfigDefaults(ctx.root);
|
|
29
|
+
syncBunLockfileVersions(ctx.root);
|
|
30
|
+
await fixNxSync(ctx.root, ctx.verbose === true);
|
|
31
|
+
applyWorkspaceDependencyDefaults(ctx.root, { resolvedTargetsByProject: await readResolvedTargetsByProject(ctx) });
|
|
32
|
+
},
|
|
33
|
+
async validatePreBuild(ctx) {
|
|
24
34
|
return (validateManagedFiles(ctx.root) +
|
|
25
35
|
validateRootPackagePolicy(ctx.root) +
|
|
36
|
+
validateToolConfig(ctx.root) +
|
|
37
|
+
validateNxProjectNames(ctx.root) +
|
|
26
38
|
validateNxReleaseConfig(ctx.root) +
|
|
27
39
|
validateBunLockfileVersions(ctx.root) +
|
|
28
|
-
(await validateNxSync(ctx.root)));
|
|
40
|
+
(await validateNxSync(ctx.root, ctx.verbose === true)));
|
|
29
41
|
},
|
|
30
42
|
},
|
|
31
43
|
{
|
|
@@ -33,24 +45,55 @@ const packs = [
|
|
|
33
45
|
init(ctx) {
|
|
34
46
|
applyPublicPackageDefaults(ctx.root);
|
|
35
47
|
},
|
|
36
|
-
|
|
48
|
+
fixPreBuild(ctx) {
|
|
49
|
+
applyPublicPackageDefaults(ctx.root);
|
|
50
|
+
},
|
|
51
|
+
validatePreBuild(ctx) {
|
|
37
52
|
return validatePublicTags(ctx.root) + validatePublicPackageMetadata(ctx.root);
|
|
38
53
|
},
|
|
39
54
|
},
|
|
40
55
|
{
|
|
41
56
|
name: 'workspace-dependencies',
|
|
42
|
-
|
|
57
|
+
init(ctx) {
|
|
43
58
|
applyWorkspaceDependencyDefaults(ctx.root);
|
|
59
|
+
},
|
|
60
|
+
async fixPostBuild(ctx) {
|
|
61
|
+
applyWorkspaceDependencyDefaults(ctx.root, { resolvedTargetsByProject: await readResolvedTargetsByProject(ctx) });
|
|
62
|
+
},
|
|
63
|
+
async validatePostBuild(ctx) {
|
|
64
|
+
return validateWorkspaceDependencies(ctx.root, {
|
|
65
|
+
resolvedTargetsByProject: await readResolvedTargetsByProject(ctx),
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'package-hygiene',
|
|
71
|
+
async init(ctx) {
|
|
72
|
+
await fixPackageHygiene(ctx.root, ctx.verbose === true);
|
|
73
|
+
},
|
|
74
|
+
async fixPostBuild(ctx) {
|
|
44
75
|
await fixPackageHygiene(ctx.root);
|
|
45
76
|
},
|
|
46
|
-
async
|
|
47
|
-
return
|
|
77
|
+
async validatePostBuild(ctx) {
|
|
78
|
+
return validatePackageHygiene(ctx.root, ctx.verbose === true);
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'packed-package-publint',
|
|
83
|
+
validatePostBuild(ctx) {
|
|
84
|
+
return validatePackedPublicPackagePublint(ctx.root);
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'packed-package-manifest',
|
|
89
|
+
validatePostBuild(ctx) {
|
|
90
|
+
return validatePackedPublicPackageManifest(ctx.root);
|
|
48
91
|
},
|
|
49
92
|
},
|
|
50
93
|
{
|
|
51
|
-
name: 'packed-
|
|
52
|
-
|
|
53
|
-
return
|
|
94
|
+
name: 'packed-package-types',
|
|
95
|
+
validatePostBuild(ctx) {
|
|
96
|
+
return validatePackedPublicPackageTypes(ctx.root);
|
|
54
97
|
},
|
|
55
98
|
},
|
|
56
99
|
];
|
|
@@ -59,22 +102,198 @@ export async function runInitPacks(ctx) {
|
|
|
59
102
|
await pack.init?.(ctx);
|
|
60
103
|
}
|
|
61
104
|
}
|
|
62
|
-
export async function runValidatePacks(ctx, options = {}) {
|
|
105
|
+
export async function runValidatePacks(ctx, options = {}, hooks = {}) {
|
|
106
|
+
const selectedPacks = hooks.packs ?? packs;
|
|
107
|
+
const build = hooks.runBuild ?? runBuild;
|
|
108
|
+
if (options.fix) {
|
|
109
|
+
await runFixPhase(ctx, selectedPacks, 'pre-build', 'fixPreBuild');
|
|
110
|
+
const buildFailures = await build(ctx, options);
|
|
111
|
+
if (buildFailures > 0) {
|
|
112
|
+
return { failures: buildFailures, failedChecks: 1 };
|
|
113
|
+
}
|
|
114
|
+
await runFixPhase(ctx, selectedPacks, 'post-build', 'fixPostBuild');
|
|
115
|
+
return runValidationPhases(ctx, selectedPacks, options, false);
|
|
116
|
+
}
|
|
117
|
+
const preBuild = await runValidationPhase(ctx, selectedPacks, options, 'pre-build', 'validatePreBuild', false);
|
|
118
|
+
if (preBuild.failures > 0 && options.failFast) {
|
|
119
|
+
return preBuild;
|
|
120
|
+
}
|
|
121
|
+
const buildFailures = await build(ctx, options);
|
|
122
|
+
if (buildFailures > 0) {
|
|
123
|
+
return { failures: preBuild.failures + buildFailures, failedChecks: preBuild.failedChecks + 1 };
|
|
124
|
+
}
|
|
125
|
+
return sumResults(preBuild, await runValidationPhase(ctx, selectedPacks, options, 'post-build', 'validatePostBuild', true));
|
|
126
|
+
}
|
|
127
|
+
async function runValidationPhases(ctx, selectedPacks, options, printedBefore) {
|
|
128
|
+
const preBuild = await runValidationPhase(ctx, selectedPacks, options, 'pre-build', 'validatePreBuild', printedBefore);
|
|
129
|
+
if (preBuild.failures > 0 && options.failFast) {
|
|
130
|
+
return preBuild;
|
|
131
|
+
}
|
|
132
|
+
return sumResults(preBuild, await runValidationPhase(ctx, selectedPacks, options, 'post-build', 'validatePostBuild', true));
|
|
133
|
+
}
|
|
134
|
+
async function runValidationPhase(ctx, selectedPacks, options, phase, method, printedBefore) {
|
|
63
135
|
let failures = 0;
|
|
136
|
+
let failedChecks = 0;
|
|
64
137
|
let checkedPacks = 0;
|
|
65
|
-
|
|
66
|
-
|
|
138
|
+
let hasPrinted = printedBefore;
|
|
139
|
+
for (const pack of selectedPacks) {
|
|
140
|
+
const validate = pack[method];
|
|
141
|
+
if (!validate) {
|
|
67
142
|
continue;
|
|
68
143
|
}
|
|
69
|
-
|
|
144
|
+
const label = `${pack.name} (${phase})`;
|
|
145
|
+
if (options.verbose) {
|
|
146
|
+
printCheckHeading(label, hasPrinted || checkedPacks > 0);
|
|
147
|
+
}
|
|
148
|
+
hasPrinted = true;
|
|
70
149
|
checkedPacks++;
|
|
71
|
-
|
|
150
|
+
let packFailures;
|
|
151
|
+
let output = emptyCapturedOutput();
|
|
152
|
+
try {
|
|
153
|
+
if (options.verbose) {
|
|
154
|
+
packFailures = await validate(ctx);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const captured = await captureConsoleOutput(() => validate(ctx));
|
|
158
|
+
packFailures = captured.result;
|
|
159
|
+
output = captured.output;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
if (!options.verbose) {
|
|
164
|
+
printCheckHeading(label, true);
|
|
165
|
+
if (error instanceof CapturedConsoleError) {
|
|
166
|
+
output = error.output;
|
|
167
|
+
}
|
|
168
|
+
printCapturedOutput(output);
|
|
169
|
+
}
|
|
170
|
+
throw error instanceof CapturedConsoleError ? error.cause : error;
|
|
171
|
+
}
|
|
72
172
|
failures += packFailures;
|
|
173
|
+
if (packFailures > 0) {
|
|
174
|
+
failedChecks++;
|
|
175
|
+
}
|
|
176
|
+
if (!options.verbose && packFailures > 0) {
|
|
177
|
+
printCheckHeading(label, true);
|
|
178
|
+
printCapturedOutput(output);
|
|
179
|
+
}
|
|
180
|
+
printCheckStatus(label, packFailures);
|
|
73
181
|
if (packFailures > 0 && options.failFast) {
|
|
74
182
|
break;
|
|
75
183
|
}
|
|
76
184
|
}
|
|
77
|
-
return failures;
|
|
185
|
+
return { failures, failedChecks };
|
|
186
|
+
}
|
|
187
|
+
function sumResults(left, right) {
|
|
188
|
+
return { failures: left.failures + right.failures, failedChecks: left.failedChecks + right.failedChecks };
|
|
189
|
+
}
|
|
190
|
+
async function runFixPhase(ctx, selectedPacks, phase, method) {
|
|
191
|
+
let checkedPacks = 0;
|
|
192
|
+
for (const pack of selectedPacks) {
|
|
193
|
+
const fix = pack[method];
|
|
194
|
+
if (!fix) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const label = `${pack.name} (${phase} fix)`;
|
|
198
|
+
if (ctx.verbose) {
|
|
199
|
+
printCheckHeading(label, checkedPacks > 0);
|
|
200
|
+
}
|
|
201
|
+
checkedPacks++;
|
|
202
|
+
if (ctx.verbose) {
|
|
203
|
+
await fix(ctx);
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
let output = emptyCapturedOutput();
|
|
207
|
+
try {
|
|
208
|
+
output = (await captureConsoleOutput(() => fix(ctx))).output;
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
if (error instanceof CapturedConsoleError) {
|
|
212
|
+
output = error.output;
|
|
213
|
+
}
|
|
214
|
+
printCheckHeading(label, true);
|
|
215
|
+
printCapturedOutput(output);
|
|
216
|
+
throw error instanceof CapturedConsoleError ? error.cause : error;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async function runBuild(ctx, options = {}) {
|
|
221
|
+
if (options.verbose) {
|
|
222
|
+
printCheckHeading('build', true);
|
|
223
|
+
}
|
|
224
|
+
const status = await runStatus('nx', ['run-many', '-t', 'build'], ctx.root, options.verbose !== true);
|
|
225
|
+
if (status !== 0) {
|
|
226
|
+
if (!options.verbose) {
|
|
227
|
+
printCheckHeading('build', true);
|
|
228
|
+
}
|
|
229
|
+
console.error('nx run-many -t build failed');
|
|
230
|
+
printCheckStatus('build', 1);
|
|
231
|
+
return 1;
|
|
232
|
+
}
|
|
233
|
+
printCheckStatus('build', 0);
|
|
234
|
+
return 0;
|
|
235
|
+
}
|
|
236
|
+
function printCheckStatus(label, failures) {
|
|
237
|
+
if (failures === 0) {
|
|
238
|
+
console.log(`🆗 ${label}`);
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
const noun = failures === 1 ? 'problem' : 'problems';
|
|
242
|
+
console.log(`👎 ${label} (${failures} ${noun})\n`);
|
|
243
|
+
}
|
|
244
|
+
function printCheckHeading(label, separate) {
|
|
245
|
+
console.log(`${separate ? '\n' : ''}== ${label} ==`);
|
|
246
|
+
}
|
|
247
|
+
function emptyCapturedOutput() {
|
|
248
|
+
return { logs: [], errors: [] };
|
|
249
|
+
}
|
|
250
|
+
async function captureConsoleOutput(fn) {
|
|
251
|
+
const output = emptyCapturedOutput();
|
|
252
|
+
const originalLog = console.log;
|
|
253
|
+
const originalError = console.error;
|
|
254
|
+
console.log = (...args) => {
|
|
255
|
+
output.logs.push(args.join(' '));
|
|
256
|
+
};
|
|
257
|
+
console.error = (...args) => {
|
|
258
|
+
output.errors.push(args.join(' '));
|
|
259
|
+
};
|
|
260
|
+
try {
|
|
261
|
+
return { result: await fn(), output };
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
throw new CapturedConsoleError(error, output);
|
|
265
|
+
}
|
|
266
|
+
finally {
|
|
267
|
+
console.log = originalLog;
|
|
268
|
+
console.error = originalError;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
class CapturedConsoleError extends Error {
|
|
272
|
+
cause;
|
|
273
|
+
output;
|
|
274
|
+
constructor(cause, output) {
|
|
275
|
+
super(cause instanceof Error ? cause.message : String(cause));
|
|
276
|
+
this.cause = cause;
|
|
277
|
+
this.output = output;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function printCapturedOutput(output) {
|
|
281
|
+
for (const line of output.logs) {
|
|
282
|
+
console.log(line);
|
|
283
|
+
}
|
|
284
|
+
for (const line of output.errors) {
|
|
285
|
+
console.log(line);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
async function readResolvedTargetsByProject(ctx) {
|
|
289
|
+
const projects = await readProjectTargets(ctx.root);
|
|
290
|
+
return new Map(projects.map((project) => [
|
|
291
|
+
project.project,
|
|
292
|
+
{
|
|
293
|
+
targets: new Set(project.targets),
|
|
294
|
+
...(project.buildDependsOn ? { buildDependsOn: project.buildDependsOn } : {}),
|
|
295
|
+
},
|
|
296
|
+
]));
|
|
78
297
|
}
|
|
79
298
|
function ensureLocalSmooShim(root) {
|
|
80
299
|
const shim = join(root, 'tooling', 'smoo');
|
|
@@ -24,7 +24,6 @@ export interface PublishWorkflowStep {
|
|
|
24
24
|
id?: string;
|
|
25
25
|
condition?: PublishWorkflowCondition;
|
|
26
26
|
nxTarget?: PublishWorkflowNxTarget;
|
|
27
|
-
needsNodeAuthToken?: boolean;
|
|
28
27
|
}
|
|
29
28
|
export interface PublishWorkflowDefinition {
|
|
30
29
|
steps: PublishWorkflowStep[];
|
|
@@ -51,7 +50,6 @@ export interface PublishWorkflowCallbacks {
|
|
|
51
50
|
buildSelfHostedCli(): Promise<void>;
|
|
52
51
|
repairPendingReleases(input: {
|
|
53
52
|
dryRun: boolean;
|
|
54
|
-
nodeAuthToken: boolean;
|
|
55
53
|
}): Promise<void>;
|
|
56
54
|
versionRelease(input: {
|
|
57
55
|
bump: PublishWorkflowBump;
|
|
@@ -67,13 +65,11 @@ export interface PublishWorkflowCallbacks {
|
|
|
67
65
|
publishRelease(input: {
|
|
68
66
|
bump: PublishWorkflowBump;
|
|
69
67
|
dryRun: boolean;
|
|
70
|
-
nodeAuthToken: boolean;
|
|
71
68
|
}): Promise<void>;
|
|
72
69
|
saveNixDevenv(input: PublishWorkflowSetupOutputs): Promise<void>;
|
|
73
70
|
}
|
|
74
71
|
export interface PublishWorkflowRunContext {
|
|
75
72
|
inputs: PublishWorkflowInputs;
|
|
76
|
-
nodeAuthToken: boolean;
|
|
77
73
|
callbacks: PublishWorkflowCallbacks;
|
|
78
74
|
}
|
|
79
75
|
export interface PublishWorkflowRunResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-workflow.d.ts","sourceRoot":"","sources":["../../src/monorepo/publish-workflow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publish-workflow.d.ts","sourceRoot":"","sources":["../../src/monorepo/publish-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isSmoothBricksCodebasePackageName } from '../lib/cli-package.js';
|
|
1
2
|
export var PublishWorkflowStepKind;
|
|
2
3
|
(function (PublishWorkflowStepKind) {
|
|
3
4
|
PublishWorkflowStepKind["Checkout"] = "checkout";
|
|
@@ -22,7 +23,7 @@ export function definePublishWorkflow(options = {}) {
|
|
|
22
23
|
{ kind: PublishWorkflowStepKind.SetupDevenv, name: '🧱 Setup Nix/devenv', id: 'setup' },
|
|
23
24
|
{ kind: PublishWorkflowStepKind.ConfigureReleaseAuthor, name: '🤖 Configure release author' },
|
|
24
25
|
];
|
|
25
|
-
if (options.repoName
|
|
26
|
+
if (isSmoothBricksCodebasePackageName(options.repoName)) {
|
|
26
27
|
setupSteps.push({ kind: PublishWorkflowStepKind.BuildSelfHostedCli, name: '🏗️ Build self-hosted smoo' });
|
|
27
28
|
}
|
|
28
29
|
return {
|
|
@@ -31,7 +32,6 @@ export function definePublishWorkflow(options = {}) {
|
|
|
31
32
|
{
|
|
32
33
|
kind: PublishWorkflowStepKind.RepairPendingReleases,
|
|
33
34
|
name: '🧯 Repair pending releases',
|
|
34
|
-
needsNodeAuthToken: true,
|
|
35
35
|
},
|
|
36
36
|
{ kind: PublishWorkflowStepKind.VersionRelease, name: '🏷️ Version release', id: 'version' },
|
|
37
37
|
{
|
|
@@ -66,7 +66,6 @@ export function definePublishWorkflow(options = {}) {
|
|
|
66
66
|
{
|
|
67
67
|
kind: PublishWorkflowStepKind.PublishRelease,
|
|
68
68
|
name: `📦 Publish release (${versionMode})`,
|
|
69
|
-
needsNodeAuthToken: true,
|
|
70
69
|
},
|
|
71
70
|
{
|
|
72
71
|
kind: PublishWorkflowStepKind.SaveNixDevenv,
|
|
@@ -105,7 +104,6 @@ export async function runPublishWorkflow(workflow, context) {
|
|
|
105
104
|
case PublishWorkflowStepKind.RepairPendingReleases:
|
|
106
105
|
await context.callbacks.repairPendingReleases({
|
|
107
106
|
dryRun: context.inputs.dryRun,
|
|
108
|
-
nodeAuthToken: context.nodeAuthToken,
|
|
109
107
|
});
|
|
110
108
|
break;
|
|
111
109
|
case PublishWorkflowStepKind.VersionRelease:
|
|
@@ -132,7 +130,6 @@ export async function runPublishWorkflow(workflow, context) {
|
|
|
132
130
|
await context.callbacks.publishRelease({
|
|
133
131
|
bump: context.inputs.bump,
|
|
134
132
|
dryRun: context.inputs.dryRun,
|
|
135
|
-
nodeAuthToken: context.nodeAuthToken,
|
|
136
133
|
});
|
|
137
134
|
break;
|
|
138
135
|
case PublishWorkflowStepKind.SaveNixDevenv:
|
|
@@ -269,15 +266,12 @@ function yamlLinesForStep(step) {
|
|
|
269
266
|
case PublishWorkflowStepKind.BuildSelfHostedCli:
|
|
270
267
|
return [
|
|
271
268
|
` - name: ${step.name}`,
|
|
272
|
-
' # SmoothBricks self-hosts smoo from source
|
|
273
|
-
'
|
|
274
|
-
' run: nx build @smoothbricks/cli',
|
|
269
|
+
' # SmoothBricks self-hosts smoo from source for release commands.',
|
|
270
|
+
' run: nx build cli',
|
|
275
271
|
];
|
|
276
272
|
case PublishWorkflowStepKind.RepairPendingReleases:
|
|
277
273
|
return [
|
|
278
274
|
` - name: ${step.name}`,
|
|
279
|
-
' env:',
|
|
280
|
-
` NODE_AUTH_TOKEN: ${githubExpression('secrets.NPM_TOKEN')}`,
|
|
281
275
|
` run: smoo release repair-pending --dry-run "${githubExpression('inputs.dry_run')}"`,
|
|
282
276
|
];
|
|
283
277
|
case PublishWorkflowStepKind.VersionRelease:
|
|
@@ -300,7 +294,7 @@ function yamlLinesForStep(step) {
|
|
|
300
294
|
return [
|
|
301
295
|
` - name: ${step.name}`,
|
|
302
296
|
` if: ${githubExpression('failure()')}`,
|
|
303
|
-
' uses: actions/upload-artifact@
|
|
297
|
+
' uses: actions/upload-artifact@v7.0.1',
|
|
304
298
|
' with:',
|
|
305
299
|
` name: trace-results-${githubExpression('github.run_id')}`,
|
|
306
300
|
' path: packages/*/.trace-results.db',
|
|
@@ -314,10 +308,8 @@ function yamlLinesForStep(step) {
|
|
|
314
308
|
return [
|
|
315
309
|
` - name: ${step.name}`,
|
|
316
310
|
' # smoo packs with Bun, then publishes tarballs with npm. Existing',
|
|
317
|
-
' # packages use trusted publishing/OIDC
|
|
318
|
-
' #
|
|
319
|
-
' env:',
|
|
320
|
-
` NODE_AUTH_TOKEN: ${githubExpression('secrets.NPM_TOKEN')}`,
|
|
311
|
+
' # packages must already exist on npm and use trusted publishing/OIDC.',
|
|
312
|
+
' # Missing package names are bootstrapped locally before trust setup.',
|
|
321
313
|
` run: smoo release publish --bump "${githubExpression('inputs.bump')}" --dry-run "${githubExpression('inputs.dry_run')}"`,
|
|
322
314
|
];
|
|
323
315
|
case PublishWorkflowStepKind.SaveNixDevenv:
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type PackageJson } from '../lib/workspace.js';
|
|
2
|
+
export interface ToolPolicy {
|
|
3
|
+
isSmoothBricksCodebase: boolean;
|
|
4
|
+
toolingPackageName: string;
|
|
5
|
+
cliDependencyRange: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ToolContext {
|
|
8
|
+
rootPackage: PackageJson | null;
|
|
9
|
+
policy: ToolPolicy;
|
|
10
|
+
}
|
|
11
|
+
export declare function applyToolConfigDefaults(root: string): Promise<void>;
|
|
12
|
+
export declare function validateToolConfig(root: string): number;
|
|
13
|
+
export declare function applyRootDevDependencyDefaults(root: string, context: ToolContext): Promise<void>;
|
|
14
|
+
export declare function applyToolingPackageDefaults(root: string, policy: ToolPolicy): void;
|
|
15
|
+
export declare function applyToolingWorkspaceDefault(root: string): void;
|
|
16
|
+
export declare function applyDevenvPackageDefaults(root: string): void;
|
|
17
|
+
export declare function validateRootDevDependencies(policy: ToolPolicy, rootPackage: PackageJson | null): number;
|
|
18
|
+
export declare function validateToolingPackage(root: string, policy: ToolPolicy): number;
|
|
19
|
+
export declare function validateToolingWorkspace(rootPackage: PackageJson | null): number;
|
|
20
|
+
export declare function validateDevenvPackages(root: string): number;
|
|
21
|
+
export declare function readToolContext(root: string): ToolContext;
|
|
22
|
+
//# sourceMappingURL=tool-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-validation.d.ts","sourceRoot":"","sources":["../../src/monorepo/tool-validation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAyB,MAAM,qBAAqB,CAAC;AAU9E,MAAM,WAAW,UAAU;IACzB,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC;CACpB;AA8BD,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED,wBAAsB,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBtG;AAoCD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAkBlF;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAY/D;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA0B7D;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,CAyBvG;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAoB/E;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,CAWhF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmB3D;AA0DD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAGzD"}
|