@smoothbricks/cli 0.1.0 → 0.2.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 +338 -88
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +136 -22
- 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/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/devenv.d.ts +6 -0
- package/dist/lib/devenv.d.ts.map +1 -0
- package/dist/lib/devenv.js +82 -0
- package/dist/lib/run.d.ts +5 -0
- package/dist/lib/run.d.ts.map +1 -1
- package/dist/lib/run.js +13 -0
- package/dist/lib/workspace.d.ts +20 -1
- package/dist/lib/workspace.d.ts.map +1 -1
- package/dist/lib/workspace.js +87 -7
- 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 +24 -2
- package/dist/monorepo/index.d.ts.map +1 -1
- package/dist/monorepo/index.js +136 -15
- package/dist/monorepo/lockfile.d.ts +5 -1
- package/dist/monorepo/lockfile.d.ts.map +1 -1
- package/dist/monorepo/lockfile.js +45 -5
- package/dist/monorepo/managed-files.d.ts +1 -1
- package/dist/monorepo/managed-files.d.ts.map +1 -1
- package/dist/monorepo/managed-files.js +28 -11
- 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 +25 -2
- package/dist/monorepo/package-policy.d.ts.map +1 -1
- package/dist/monorepo/package-policy.js +1289 -27
- package/dist/monorepo/packed-manifest.d.ts +4 -0
- package/dist/monorepo/packed-manifest.d.ts.map +1 -0
- package/dist/monorepo/packed-manifest.js +51 -0
- 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 +69 -31
- 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 +240 -18
- package/dist/monorepo/publish-workflow.d.ts +82 -0
- package/dist/monorepo/publish-workflow.d.ts.map +1 -0
- package/dist/monorepo/publish-workflow.js +336 -0
- 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 +24 -0
- package/dist/nx/index.d.ts.map +1 -0
- package/dist/nx/index.js +94 -0
- package/dist/nx-version-actions.cjs +25 -0
- package/dist/nx-version-actions.d.cts +6 -0
- package/dist/nx-version-actions.d.cts.map +1 -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 +51 -0
- package/dist/release/core.d.ts.map +1 -0
- package/dist/release/core.js +97 -0
- package/dist/release/github-release.d.ts +46 -0
- package/dist/release/github-release.d.ts.map +1 -0
- package/dist/release/github-release.js +97 -0
- package/dist/release/index.d.ts +39 -5
- package/dist/release/index.d.ts.map +1 -1
- package/dist/release/index.js +763 -130
- package/dist/release/npm-auth.d.ts +16 -0
- package/dist/release/npm-auth.d.ts.map +1 -0
- package/dist/release/npm-auth.js +39 -0
- package/dist/release/orchestration.d.ts +49 -0
- package/dist/release/orchestration.d.ts.map +1 -0
- package/dist/release/orchestration.js +113 -0
- package/dist/release/publish-plan.d.ts +17 -0
- package/dist/release/publish-plan.d.ts.map +1 -0
- package/dist/release/publish-plan.js +15 -0
- package/dist/release/retag-unpublished.d.ts +34 -0
- package/dist/release/retag-unpublished.d.ts.map +1 -0
- package/dist/release/retag-unpublished.js +77 -0
- package/managed/raw/git-format-staged.yml +54 -0
- package/managed/raw/tooling/git-hooks/commit-msg.sh +1 -1
- package/managed/raw/tooling/git-hooks/pre-commit.sh +2 -7
- package/managed/templates/github/actions/setup-devenv/action.yml +1 -7
- package/managed/templates/github/workflows/ci.yml +3 -0
- package/package.json +37 -4
- package/src/cli.ts +193 -40
- package/src/devenv/index.test.ts +49 -0
- package/src/devenv/index.ts +38 -0
- package/src/lib/cli-package.ts +18 -0
- package/src/lib/devenv.test.ts +28 -0
- package/src/lib/devenv.ts +89 -0
- package/src/lib/run.ts +19 -0
- package/src/lib/workspace.ts +117 -7
- package/src/monorepo/__tests__/nx-version-actions.test.ts +75 -0
- package/src/monorepo/__tests__/publish-workflow.test.ts +322 -0
- package/src/monorepo/commit-msg.test.ts +45 -0
- package/src/monorepo/commit-msg.ts +107 -7
- package/src/monorepo/index.ts +181 -15
- package/src/monorepo/lockfile.ts +52 -7
- package/src/monorepo/managed-files.ts +43 -13
- 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 +902 -0
- package/src/monorepo/package-policy.ts +1527 -25
- package/src/monorepo/packed-manifest.ts +67 -0
- package/src/monorepo/packed-package.ts +90 -31
- package/src/monorepo/packs/index.test.ts +189 -0
- package/src/monorepo/packs/index.ts +314 -19
- package/src/monorepo/publish-workflow.ts +422 -0
- 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 +64 -0
- package/src/nx/index.ts +119 -0
- package/src/nx-version-actions.cts +36 -0
- package/src/release/__tests__/bootstrap-npm-packages.test.ts +127 -0
- package/src/release/__tests__/candidates.test.ts +217 -0
- package/src/release/__tests__/core-properties.test.ts +149 -0
- package/src/release/__tests__/core-scenarios.test.ts +187 -0
- package/src/release/__tests__/core.test.ts +73 -0
- package/src/release/__tests__/fixture-repo.test.ts +314 -0
- package/src/release/__tests__/github-release.test.ts +149 -0
- package/src/release/__tests__/helpers/fixture-repo.ts +114 -0
- package/src/release/__tests__/npm-auth.test.ts +120 -0
- package/src/release/__tests__/orchestration.test.ts +246 -0
- package/src/release/__tests__/publish-plan.test.ts +67 -0
- package/src/release/__tests__/retag-unpublished.test.ts +160 -0
- package/src/release/__tests__/trust-publisher.test.ts +133 -0
- package/src/release/bootstrap-npm-packages.ts +88 -0
- package/src/release/candidates.ts +225 -0
- package/src/release/core.ts +171 -0
- package/src/release/github-release.ts +134 -0
- package/src/release/index.ts +974 -138
- package/src/release/npm-auth.ts +93 -0
- package/src/release/orchestration.ts +196 -0
- package/src/release/publish-plan.ts +37 -0
- package/src/release/retag-unpublished.ts +122 -0
- package/managed/raw/.git-format-staged.yml +0 -47
- package/managed/templates/github/workflows/publish.yml +0 -136
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { isSmoothBricksCodebasePackageName } from '../lib/cli-package.js';
|
|
2
|
+
export var PublishWorkflowStepKind;
|
|
3
|
+
(function (PublishWorkflowStepKind) {
|
|
4
|
+
PublishWorkflowStepKind["Checkout"] = "checkout";
|
|
5
|
+
PublishWorkflowStepKind["SetupDevenv"] = "setup-devenv";
|
|
6
|
+
PublishWorkflowStepKind["ConfigureReleaseAuthor"] = "configure-release-author";
|
|
7
|
+
PublishWorkflowStepKind["BuildSelfHostedCli"] = "build-self-hosted-cli";
|
|
8
|
+
PublishWorkflowStepKind["RepairPendingReleases"] = "repair-pending-releases";
|
|
9
|
+
PublishWorkflowStepKind["VersionRelease"] = "version-release";
|
|
10
|
+
PublishWorkflowStepKind["CheckManagedMonorepoFiles"] = "check-managed-monorepo-files";
|
|
11
|
+
PublishWorkflowStepKind["Build"] = "build";
|
|
12
|
+
PublishWorkflowStepKind["Lint"] = "lint";
|
|
13
|
+
PublishWorkflowStepKind["UnitTests"] = "unit-tests";
|
|
14
|
+
PublishWorkflowStepKind["UploadTraceDbs"] = "upload-trace-dbs";
|
|
15
|
+
PublishWorkflowStepKind["ValidateMonorepoConfig"] = "validate-monorepo-config";
|
|
16
|
+
PublishWorkflowStepKind["PublishRelease"] = "publish-release";
|
|
17
|
+
PublishWorkflowStepKind["SaveNixDevenv"] = "save-nix-devenv";
|
|
18
|
+
})(PublishWorkflowStepKind || (PublishWorkflowStepKind = {}));
|
|
19
|
+
export function definePublishWorkflow(options = {}) {
|
|
20
|
+
const versionMode = githubExpression('steps.version.outputs.mode');
|
|
21
|
+
const setupSteps = [
|
|
22
|
+
{ kind: PublishWorkflowStepKind.Checkout, name: '📥 Checkout' },
|
|
23
|
+
{ kind: PublishWorkflowStepKind.SetupDevenv, name: '🧱 Setup Nix/devenv', id: 'setup' },
|
|
24
|
+
{ kind: PublishWorkflowStepKind.ConfigureReleaseAuthor, name: '🤖 Configure release author' },
|
|
25
|
+
];
|
|
26
|
+
if (isSmoothBricksCodebasePackageName(options.repoName)) {
|
|
27
|
+
setupSteps.push({ kind: PublishWorkflowStepKind.BuildSelfHostedCli, name: '🏗️ Build self-hosted smoo' });
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
steps: numberWorkflowSteps([
|
|
31
|
+
...setupSteps,
|
|
32
|
+
{
|
|
33
|
+
kind: PublishWorkflowStepKind.RepairPendingReleases,
|
|
34
|
+
name: '🧯 Repair pending releases',
|
|
35
|
+
},
|
|
36
|
+
{ kind: PublishWorkflowStepKind.VersionRelease, name: '🏷️ Version release', id: 'version' },
|
|
37
|
+
{
|
|
38
|
+
kind: PublishWorkflowStepKind.CheckManagedMonorepoFiles,
|
|
39
|
+
name: `✅ Check managed monorepo files (${versionMode})`,
|
|
40
|
+
condition: 'version-mode-not-none',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
kind: PublishWorkflowStepKind.Build,
|
|
44
|
+
name: `🔨 Build (${versionMode})`,
|
|
45
|
+
condition: 'version-mode-not-none',
|
|
46
|
+
nxTarget: 'build',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
kind: PublishWorkflowStepKind.Lint,
|
|
50
|
+
name: `🔍 Lint (${versionMode})`,
|
|
51
|
+
condition: 'version-mode-not-none',
|
|
52
|
+
nxTarget: 'lint',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
kind: PublishWorkflowStepKind.UnitTests,
|
|
56
|
+
name: `🧪 Unit Tests (${versionMode})`,
|
|
57
|
+
condition: 'version-mode-not-none',
|
|
58
|
+
nxTarget: 'test',
|
|
59
|
+
},
|
|
60
|
+
{ kind: PublishWorkflowStepKind.UploadTraceDbs, name: '📎 Upload trace DBs', condition: 'failure' },
|
|
61
|
+
{
|
|
62
|
+
kind: PublishWorkflowStepKind.ValidateMonorepoConfig,
|
|
63
|
+
name: `✅ Validate monorepo config (${versionMode})`,
|
|
64
|
+
condition: 'version-mode-not-none',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
kind: PublishWorkflowStepKind.PublishRelease,
|
|
68
|
+
name: `📦 Publish release (${versionMode})`,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
kind: PublishWorkflowStepKind.SaveNixDevenv,
|
|
72
|
+
name: '🧹 Cleanup and cache Nix/devenv',
|
|
73
|
+
condition: 'always',
|
|
74
|
+
},
|
|
75
|
+
]),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function numberWorkflowSteps(steps) {
|
|
79
|
+
return steps.map((step, index) => ({ ...step, number: index + 2 }));
|
|
80
|
+
}
|
|
81
|
+
export async function runPublishWorkflow(workflow, context) {
|
|
82
|
+
let setupOutputs = { nixCacheHit: '', devenvCacheHit: '' };
|
|
83
|
+
let version = { mode: 'none', projects: [] };
|
|
84
|
+
let failed = false;
|
|
85
|
+
let failure;
|
|
86
|
+
for (const step of workflow.steps) {
|
|
87
|
+
if (!shouldRunStep(step, version, failed)) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
switch (step.kind) {
|
|
92
|
+
case PublishWorkflowStepKind.Checkout:
|
|
93
|
+
await context.callbacks.checkout();
|
|
94
|
+
break;
|
|
95
|
+
case PublishWorkflowStepKind.SetupDevenv:
|
|
96
|
+
setupOutputs = await context.callbacks.setupDevenv();
|
|
97
|
+
break;
|
|
98
|
+
case PublishWorkflowStepKind.ConfigureReleaseAuthor:
|
|
99
|
+
await context.callbacks.configureReleaseAuthor();
|
|
100
|
+
break;
|
|
101
|
+
case PublishWorkflowStepKind.BuildSelfHostedCli:
|
|
102
|
+
await context.callbacks.buildSelfHostedCli();
|
|
103
|
+
break;
|
|
104
|
+
case PublishWorkflowStepKind.RepairPendingReleases:
|
|
105
|
+
await context.callbacks.repairPendingReleases({
|
|
106
|
+
dryRun: context.inputs.dryRun,
|
|
107
|
+
});
|
|
108
|
+
break;
|
|
109
|
+
case PublishWorkflowStepKind.VersionRelease:
|
|
110
|
+
version = await context.callbacks.versionRelease(context.inputs);
|
|
111
|
+
break;
|
|
112
|
+
case PublishWorkflowStepKind.CheckManagedMonorepoFiles:
|
|
113
|
+
await context.callbacks.checkManagedMonorepoFiles();
|
|
114
|
+
break;
|
|
115
|
+
case PublishWorkflowStepKind.Build:
|
|
116
|
+
case PublishWorkflowStepKind.Lint:
|
|
117
|
+
case PublishWorkflowStepKind.UnitTests:
|
|
118
|
+
if (!step.nxTarget) {
|
|
119
|
+
throw new Error(`Workflow step ${step.kind} is missing an Nx target.`);
|
|
120
|
+
}
|
|
121
|
+
await context.callbacks.nxRunMany({ target: step.nxTarget, projects: version.projects });
|
|
122
|
+
break;
|
|
123
|
+
case PublishWorkflowStepKind.UploadTraceDbs:
|
|
124
|
+
await context.callbacks.uploadTraceDbs();
|
|
125
|
+
break;
|
|
126
|
+
case PublishWorkflowStepKind.ValidateMonorepoConfig:
|
|
127
|
+
await context.callbacks.validateMonorepoConfig();
|
|
128
|
+
break;
|
|
129
|
+
case PublishWorkflowStepKind.PublishRelease:
|
|
130
|
+
await context.callbacks.publishRelease({
|
|
131
|
+
bump: context.inputs.bump,
|
|
132
|
+
dryRun: context.inputs.dryRun,
|
|
133
|
+
});
|
|
134
|
+
break;
|
|
135
|
+
case PublishWorkflowStepKind.SaveNixDevenv:
|
|
136
|
+
await context.callbacks.saveNixDevenv(setupOutputs);
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
failed = true;
|
|
142
|
+
failure = error;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (failure) {
|
|
146
|
+
throw failure;
|
|
147
|
+
}
|
|
148
|
+
return { version, failed };
|
|
149
|
+
}
|
|
150
|
+
function shouldRunStep(step, version, failed) {
|
|
151
|
+
if (step.condition === 'version-mode-not-none') {
|
|
152
|
+
return version.mode !== 'none';
|
|
153
|
+
}
|
|
154
|
+
if (step.condition === 'failure') {
|
|
155
|
+
return failed;
|
|
156
|
+
}
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
export function renderPublishWorkflowYaml(options = {}) {
|
|
160
|
+
const steps = definePublishWorkflow(options).steps;
|
|
161
|
+
return `${renderPublishWorkflowHeader()}${renderPublishWorkflowSteps(steps)}`;
|
|
162
|
+
}
|
|
163
|
+
function renderPublishWorkflowHeader() {
|
|
164
|
+
return `name: Publish
|
|
165
|
+
|
|
166
|
+
on:
|
|
167
|
+
workflow_dispatch:
|
|
168
|
+
inputs:
|
|
169
|
+
bump:
|
|
170
|
+
type: choice
|
|
171
|
+
description:
|
|
172
|
+
Use auto for conventional commits, or force a semver bump. Prerelease publishes to next; all others publish to
|
|
173
|
+
latest.
|
|
174
|
+
options: [auto, patch, minor, major, prerelease]
|
|
175
|
+
default: auto
|
|
176
|
+
dry_run:
|
|
177
|
+
type: boolean
|
|
178
|
+
description: Run release commands without writing versions, tags, publishes, or GitHub Releases.
|
|
179
|
+
default: false
|
|
180
|
+
|
|
181
|
+
permissions:
|
|
182
|
+
contents: write
|
|
183
|
+
id-token: write
|
|
184
|
+
|
|
185
|
+
concurrency:
|
|
186
|
+
group: release-${githubExpression('github.ref')}
|
|
187
|
+
cancel-in-progress: false
|
|
188
|
+
|
|
189
|
+
defaults:
|
|
190
|
+
run:
|
|
191
|
+
working-directory: tooling/direnv
|
|
192
|
+
|
|
193
|
+
jobs:
|
|
194
|
+
publish:
|
|
195
|
+
runs-on: ubuntu-latest
|
|
196
|
+
env:
|
|
197
|
+
NIX_STORE_NAR: ${githubExpression('github.workspace')}/nix-store.nar
|
|
198
|
+
GH_TOKEN: ${githubExpression('github.token')}
|
|
199
|
+
steps:
|
|
200
|
+
`;
|
|
201
|
+
}
|
|
202
|
+
function renderPublishWorkflowSteps(steps) {
|
|
203
|
+
const lines = [];
|
|
204
|
+
for (const step of steps) {
|
|
205
|
+
lines.push(...sectionLinesBefore(step));
|
|
206
|
+
lines.push(...commentLinesForStep(step));
|
|
207
|
+
lines.push(...yamlLinesForStep(step));
|
|
208
|
+
lines.push('');
|
|
209
|
+
}
|
|
210
|
+
return `${lines.join('\n').trimEnd()}\n`;
|
|
211
|
+
}
|
|
212
|
+
function sectionLinesBefore(step) {
|
|
213
|
+
if (step.kind === PublishWorkflowStepKind.Checkout) {
|
|
214
|
+
return [' # --- Setup --------------------------------------------------------------', ''];
|
|
215
|
+
}
|
|
216
|
+
if (step.kind === PublishWorkflowStepKind.CheckManagedMonorepoFiles) {
|
|
217
|
+
return [
|
|
218
|
+
' # --- Validation ---------------------------------------------------------',
|
|
219
|
+
'',
|
|
220
|
+
' # Release validation intentionally does not restore persisted Nx task',
|
|
221
|
+
' # cache. Nx may reuse tasks produced earlier in this same job, but publish',
|
|
222
|
+
' # never relies on task outputs restored from CI cache. version runs before',
|
|
223
|
+
' # validation so the commit completed below is the commit that was checked.',
|
|
224
|
+
'',
|
|
225
|
+
];
|
|
226
|
+
}
|
|
227
|
+
if (step.kind === PublishWorkflowStepKind.PublishRelease) {
|
|
228
|
+
return [' # --- Release ------------------------------------------------------------', ''];
|
|
229
|
+
}
|
|
230
|
+
if (step.kind === PublishWorkflowStepKind.SaveNixDevenv) {
|
|
231
|
+
return [' # --- Cleanup ------------------------------------------------------------', ''];
|
|
232
|
+
}
|
|
233
|
+
return [];
|
|
234
|
+
}
|
|
235
|
+
function commentLinesForStep(step) {
|
|
236
|
+
if (step.kind === PublishWorkflowStepKind.Checkout) {
|
|
237
|
+
return [' # Step 1: GitHub adds "Set up job" automatically', ' # Step 2'];
|
|
238
|
+
}
|
|
239
|
+
if (step.kind === PublishWorkflowStepKind.SetupDevenv) {
|
|
240
|
+
return [
|
|
241
|
+
' # Step 3. Composite action internals do not affect top-level job step',
|
|
242
|
+
' # anchors; update these comments if top-level steps move.',
|
|
243
|
+
];
|
|
244
|
+
}
|
|
245
|
+
return [` # Step ${step.number}`];
|
|
246
|
+
}
|
|
247
|
+
function yamlLinesForStep(step) {
|
|
248
|
+
switch (step.kind) {
|
|
249
|
+
case PublishWorkflowStepKind.Checkout:
|
|
250
|
+
return [
|
|
251
|
+
` - name: ${step.name}`,
|
|
252
|
+
' uses: actions/checkout@v6.0.2',
|
|
253
|
+
' with:',
|
|
254
|
+
' filter: blob:none',
|
|
255
|
+
' fetch-depth: 0',
|
|
256
|
+
];
|
|
257
|
+
case PublishWorkflowStepKind.SetupDevenv:
|
|
258
|
+
return [` - name: ${step.name}`, ' id: setup', ' uses: ./.github/actions/setup-devenv'];
|
|
259
|
+
case PublishWorkflowStepKind.ConfigureReleaseAuthor:
|
|
260
|
+
return [
|
|
261
|
+
` - name: ${step.name}`,
|
|
262
|
+
' run:',
|
|
263
|
+
' git config user.name "github-actions[bot]" && git config user.email',
|
|
264
|
+
' "41898282+github-actions[bot]@users.noreply.github.com"',
|
|
265
|
+
];
|
|
266
|
+
case PublishWorkflowStepKind.BuildSelfHostedCli:
|
|
267
|
+
return [
|
|
268
|
+
` - name: ${step.name}`,
|
|
269
|
+
' # SmoothBricks self-hosts smoo from source, but Nx release loads',
|
|
270
|
+
' # @smoothbricks/cli/nx-version-actions through the built package export.',
|
|
271
|
+
' run: nx build cli',
|
|
272
|
+
];
|
|
273
|
+
case PublishWorkflowStepKind.RepairPendingReleases:
|
|
274
|
+
return [
|
|
275
|
+
` - name: ${step.name}`,
|
|
276
|
+
` run: smoo release repair-pending --dry-run "${githubExpression('inputs.dry_run')}"`,
|
|
277
|
+
];
|
|
278
|
+
case PublishWorkflowStepKind.VersionRelease:
|
|
279
|
+
return [
|
|
280
|
+
` - name: ${step.name}`,
|
|
281
|
+
' id: version',
|
|
282
|
+
' run:',
|
|
283
|
+
` smoo release version --bump "${githubExpression('inputs.bump')}" --dry-run "${githubExpression('inputs.dry_run')}" --github-output`,
|
|
284
|
+
' "$GITHUB_OUTPUT"',
|
|
285
|
+
];
|
|
286
|
+
case PublishWorkflowStepKind.CheckManagedMonorepoFiles:
|
|
287
|
+
return conditionalRunStep(step, 'smoo monorepo check');
|
|
288
|
+
case PublishWorkflowStepKind.Build:
|
|
289
|
+
return conditionalRunStep(step, `smoo github-ci nx-run-many --targets build --projects "${githubExpression('steps.version.outputs.projects')}"`);
|
|
290
|
+
case PublishWorkflowStepKind.Lint:
|
|
291
|
+
return conditionalRunStep(step, `smoo github-ci nx-run-many --targets lint --projects "${githubExpression('steps.version.outputs.projects')}"`);
|
|
292
|
+
case PublishWorkflowStepKind.UnitTests:
|
|
293
|
+
return conditionalRunStep(step, `smoo github-ci nx-run-many --targets test --projects "${githubExpression('steps.version.outputs.projects')}"`);
|
|
294
|
+
case PublishWorkflowStepKind.UploadTraceDbs:
|
|
295
|
+
return [
|
|
296
|
+
` - name: ${step.name}`,
|
|
297
|
+
` if: ${githubExpression('failure()')}`,
|
|
298
|
+
' uses: actions/upload-artifact@v4',
|
|
299
|
+
' with:',
|
|
300
|
+
` name: trace-results-${githubExpression('github.run_id')}`,
|
|
301
|
+
' path: packages/*/.trace-results.db',
|
|
302
|
+
' if-no-files-found: ignore',
|
|
303
|
+
' retention-days: 14',
|
|
304
|
+
' include-hidden-files: true',
|
|
305
|
+
];
|
|
306
|
+
case PublishWorkflowStepKind.ValidateMonorepoConfig:
|
|
307
|
+
return conditionalRunStep(step, 'smoo monorepo validate');
|
|
308
|
+
case PublishWorkflowStepKind.PublishRelease:
|
|
309
|
+
return [
|
|
310
|
+
` - name: ${step.name}`,
|
|
311
|
+
' # smoo packs with Bun, then publishes tarballs with npm. Existing',
|
|
312
|
+
' # packages must already exist on npm and use trusted publishing/OIDC.',
|
|
313
|
+
' # Missing package names are bootstrapped locally before trust setup.',
|
|
314
|
+
` run: smoo release publish --bump "${githubExpression('inputs.bump')}" --dry-run "${githubExpression('inputs.dry_run')}"`,
|
|
315
|
+
];
|
|
316
|
+
case PublishWorkflowStepKind.SaveNixDevenv:
|
|
317
|
+
return [
|
|
318
|
+
` - name: ${step.name}`,
|
|
319
|
+
` if: ${githubExpression('always()')}`,
|
|
320
|
+
' uses: ./.github/actions/save-nix-devenv',
|
|
321
|
+
' with:',
|
|
322
|
+
` nix-cache-hit: ${githubExpression('steps.setup.outputs.nix-cache-hit')}`,
|
|
323
|
+
` devenv-cache-hit: ${githubExpression('steps.setup.outputs.devenv-cache-hit')}`,
|
|
324
|
+
];
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
function conditionalRunStep(step, run) {
|
|
328
|
+
return [
|
|
329
|
+
` - name: ${step.name}`,
|
|
330
|
+
` if: ${githubExpression("steps.version.outputs.mode != 'none'")}`,
|
|
331
|
+
` run: ${run}`,
|
|
332
|
+
];
|
|
333
|
+
}
|
|
334
|
+
function githubExpression(expression) {
|
|
335
|
+
return ['$', '{{ ', expression, ' }}'].join('');
|
|
336
|
+
}
|
|
@@ -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"}
|