@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.
Files changed (131) hide show
  1. package/README.md +161 -32
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +110 -10
  4. package/dist/devenv/index.d.ts +10 -0
  5. package/dist/devenv/index.d.ts.map +1 -0
  6. package/dist/devenv/index.js +27 -0
  7. package/dist/generate/index.d.ts +20 -0
  8. package/dist/generate/index.d.ts.map +1 -0
  9. package/dist/generate/index.js +47 -0
  10. package/dist/lib/cli-package.d.ts +4 -0
  11. package/dist/lib/cli-package.d.ts.map +1 -0
  12. package/dist/lib/cli-package.js +15 -0
  13. package/dist/lib/run.d.ts +6 -0
  14. package/dist/lib/run.d.ts.map +1 -1
  15. package/dist/lib/run.js +32 -0
  16. package/dist/lib/workspace.d.ts +25 -1
  17. package/dist/lib/workspace.d.ts.map +1 -1
  18. package/dist/lib/workspace.js +79 -17
  19. package/dist/monorepo/commit-msg.d.ts +8 -1
  20. package/dist/monorepo/commit-msg.d.ts.map +1 -1
  21. package/dist/monorepo/commit-msg.js +85 -7
  22. package/dist/monorepo/index.d.ts +19 -2
  23. package/dist/monorepo/index.d.ts.map +1 -1
  24. package/dist/monorepo/index.js +104 -16
  25. package/dist/monorepo/lockfile.d.ts.map +1 -1
  26. package/dist/monorepo/lockfile.js +9 -0
  27. package/dist/monorepo/managed-files.js +1 -1
  28. package/dist/monorepo/nx-sync.d.ts +2 -1
  29. package/dist/monorepo/nx-sync.d.ts.map +1 -1
  30. package/dist/monorepo/nx-sync.js +8 -2
  31. package/dist/monorepo/package-hygiene.d.ts +6 -2
  32. package/dist/monorepo/package-hygiene.d.ts.map +1 -1
  33. package/dist/monorepo/package-hygiene.js +12 -4
  34. package/dist/monorepo/package-policy.d.ts +13 -4
  35. package/dist/monorepo/package-policy.d.ts.map +1 -1
  36. package/dist/monorepo/package-policy.js +208 -113
  37. package/dist/monorepo/packed-package.d.ts +3 -0
  38. package/dist/monorepo/packed-package.d.ts.map +1 -1
  39. package/dist/monorepo/packed-package.js +68 -36
  40. package/dist/monorepo/packs/index.d.ts +20 -1
  41. package/dist/monorepo/packs/index.d.ts.map +1 -1
  42. package/dist/monorepo/packs/index.js +238 -19
  43. package/dist/monorepo/publish-workflow.d.ts +0 -4
  44. package/dist/monorepo/publish-workflow.d.ts.map +1 -1
  45. package/dist/monorepo/publish-workflow.js +7 -15
  46. package/dist/monorepo/tool-validation.d.ts +22 -0
  47. package/dist/monorepo/tool-validation.d.ts.map +1 -0
  48. package/dist/monorepo/tool-validation.js +399 -0
  49. package/dist/nx/index.d.ts +25 -0
  50. package/dist/nx/index.d.ts.map +1 -0
  51. package/dist/nx/index.js +112 -0
  52. package/dist/release/bootstrap-npm-packages.d.ts +19 -0
  53. package/dist/release/bootstrap-npm-packages.d.ts.map +1 -0
  54. package/dist/release/bootstrap-npm-packages.js +58 -0
  55. package/dist/release/candidates.d.ts +11 -0
  56. package/dist/release/candidates.d.ts.map +1 -0
  57. package/dist/release/candidates.js +181 -0
  58. package/dist/release/core.d.ts +4 -1
  59. package/dist/release/core.d.ts.map +1 -1
  60. package/dist/release/core.js +76 -9
  61. package/dist/release/github-release.d.ts +1 -0
  62. package/dist/release/github-release.d.ts.map +1 -1
  63. package/dist/release/github-release.js +3 -3
  64. package/dist/release/index.d.ts +32 -1
  65. package/dist/release/index.d.ts.map +1 -1
  66. package/dist/release/index.js +488 -64
  67. package/dist/release/npm-auth.d.ts +0 -1
  68. package/dist/release/npm-auth.d.ts.map +1 -1
  69. package/dist/release/npm-auth.js +4 -16
  70. package/dist/release/orchestration.d.ts +11 -2
  71. package/dist/release/orchestration.d.ts.map +1 -1
  72. package/dist/release/orchestration.js +41 -3
  73. package/dist/release/publish-plan.js +1 -1
  74. package/managed/raw/git-format-staged.yml +54 -0
  75. package/managed/raw/tooling/git-hooks/commit-msg.sh +1 -1
  76. package/managed/templates/github/actions/setup-devenv/action.yml +1 -7
  77. package/managed/templates/github/workflows/ci.yml +4 -2
  78. package/package.json +15 -8
  79. package/src/cli.ts +153 -22
  80. package/src/devenv/index.test.ts +49 -0
  81. package/src/devenv/index.ts +38 -0
  82. package/src/generate/index.ts +92 -0
  83. package/src/lib/cli-package.ts +18 -0
  84. package/src/lib/run.ts +44 -0
  85. package/src/lib/workspace.ts +112 -17
  86. package/src/monorepo/__tests__/publish-workflow.test.ts +16 -9
  87. package/src/monorepo/commit-msg.test.ts +45 -0
  88. package/src/monorepo/commit-msg.ts +107 -7
  89. package/src/monorepo/index.ts +142 -16
  90. package/src/monorepo/lockfile.ts +9 -0
  91. package/src/monorepo/managed-files.ts +1 -1
  92. package/src/monorepo/nx-sync.ts +9 -2
  93. package/src/monorepo/package-hygiene.test.ts +34 -0
  94. package/src/monorepo/package-hygiene.ts +26 -4
  95. package/src/monorepo/package-policy.test.ts +1130 -0
  96. package/src/monorepo/package-policy.ts +237 -114
  97. package/src/monorepo/packed-package.ts +89 -37
  98. package/src/monorepo/packs/index.test.ts +189 -0
  99. package/src/monorepo/packs/index.ts +311 -20
  100. package/src/monorepo/publish-workflow.ts +10 -19
  101. package/src/monorepo/setup-test-tracing.test.ts +120 -0
  102. package/src/monorepo/tool-validation.test.ts +261 -0
  103. package/src/monorepo/tool-validation.ts +462 -0
  104. package/src/nx/index.test.ts +73 -0
  105. package/src/nx/index.ts +139 -0
  106. package/src/release/__tests__/bootstrap-npm-packages.test.ts +127 -0
  107. package/src/release/__tests__/candidates.test.ts +262 -0
  108. package/src/release/__tests__/core-properties.test.ts +6 -6
  109. package/src/release/__tests__/core-scenarios.test.ts +27 -20
  110. package/src/release/__tests__/core.test.ts +52 -5
  111. package/src/release/__tests__/fixture-repo.test.ts +90 -31
  112. package/src/release/__tests__/github-release.test.ts +22 -24
  113. package/src/release/__tests__/helpers/fixture-repo.ts +1 -0
  114. package/src/release/__tests__/npm-auth.test.ts +12 -21
  115. package/src/release/__tests__/orchestration.test.ts +142 -12
  116. package/src/release/__tests__/publish-plan.test.ts +9 -3
  117. package/src/release/__tests__/retag-unpublished.test.ts +10 -10
  118. package/src/release/__tests__/trust-publisher.test.ts +165 -0
  119. package/src/release/bootstrap-npm-packages.ts +88 -0
  120. package/src/release/candidates.ts +225 -0
  121. package/src/release/core.ts +96 -10
  122. package/src/release/github-release.ts +3 -3
  123. package/src/release/index.ts +658 -74
  124. package/src/release/npm-auth.ts +4 -33
  125. package/src/release/orchestration.ts +60 -5
  126. package/src/release/publish-plan.ts +1 -1
  127. package/dist/nx-version-actions.cjs +0 -25
  128. package/dist/nx-version-actions.d.cts +0 -6
  129. package/dist/nx-version-actions.d.cts.map +0 -1
  130. package/managed/raw/.git-format-staged.yml +0 -47
  131. 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 { validateBunLockfileVersions } from '../lockfile.js';
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 { validatePackedPublicPackages } from '../packed-package.js';
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 validate(ctx) {
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
- validate(ctx) {
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
- async init(ctx) {
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 validate(ctx) {
47
- return validateWorkspaceDependencies(ctx.root) + (await validatePackageHygiene(ctx.root));
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-packages',
52
- validate(ctx) {
53
- return validatePackedPublicPackages(ctx.root);
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
- for (const pack of packs) {
66
- if (!pack.validate) {
138
+ let hasPrinted = printedBefore;
139
+ for (const pack of selectedPacks) {
140
+ const validate = pack[method];
141
+ if (!validate) {
67
142
  continue;
68
143
  }
69
- console.log(`${checkedPacks === 0 ? '' : '\n'}== ${pack.name} ==`);
144
+ const label = `${pack.name} (${phase})`;
145
+ if (options.verbose) {
146
+ printCheckHeading(label, hasPrinted || checkedPacks > 0);
147
+ }
148
+ hasPrinted = true;
70
149
  checkedPacks++;
71
- const packFailures = await pack.validate(ctx);
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":"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"}
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 === '@smoothbricks/codebase') {
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, but Nx release loads',
273
- ' # @smoothbricks/cli/nx-version-actions through the built package export.',
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@v4',
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; first publishes use NODE_AUTH_TOKEN',
318
- ' # because npm trust can only be configured after a package exists.',
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"}