@smoothbricks/cli 0.10.5 → 0.10.7
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.js +3 -2
- package/dist/github-ci/index.d.ts +1 -0
- package/dist/github-ci/index.d.ts.map +1 -1
- package/dist/github-ci/index.js +28 -5
- package/dist/lib/json.d.ts +3 -1
- package/dist/lib/json.d.ts.map +1 -1
- package/dist/lib/json.js +5 -20
- package/dist/lib/workspace.d.ts.map +1 -1
- package/dist/lib/workspace.js +1 -0
- package/dist/monorepo/ci-workflow.d.ts +2 -0
- package/dist/monorepo/ci-workflow.d.ts.map +1 -1
- package/dist/monorepo/ci-workflow.js +10 -4
- package/dist/monorepo/github-runs-on.d.ts +14 -0
- package/dist/monorepo/github-runs-on.d.ts.map +1 -0
- package/dist/monorepo/github-runs-on.js +43 -0
- package/dist/monorepo/index.d.ts +2 -2
- package/dist/monorepo/index.d.ts.map +1 -1
- package/dist/monorepo/index.js +7 -7
- package/dist/monorepo/managed-files.d.ts +14 -3
- package/dist/monorepo/managed-files.d.ts.map +1 -1
- package/dist/monorepo/managed-files.js +54 -74
- package/dist/monorepo/package-policy.js +2 -2
- package/dist/monorepo/packs/index.d.ts.map +1 -1
- package/dist/monorepo/packs/index.js +3 -1
- package/dist/monorepo/publish-workflow.d.ts +3 -0
- package/dist/monorepo/publish-workflow.d.ts.map +1 -1
- package/dist/monorepo/publish-workflow.js +17 -14
- package/dist/monorepo/runtime.d.ts +2 -2
- package/dist/monorepo/runtime.d.ts.map +1 -1
- package/dist/monorepo/runtime.js +11 -16
- package/dist/monorepo/tool-validation.d.ts.map +1 -1
- package/dist/monorepo/tool-validation.js +20 -23
- package/dist/nx/index.d.ts +7 -4
- package/dist/nx/index.d.ts.map +1 -1
- package/dist/nx/index.js +117 -56
- package/managed/raw/tooling/devenv +71 -0
- package/managed/raw/tooling/direnv/github-actions-bootstrap.sh +24 -7
- package/managed/templates/github/actions/cache-nix-devenv/action.yml +13 -11
- package/managed/templates/github/actions/save-nix-devenv/action.yml +34 -3
- package/managed/templates/github/actions/setup-devenv/action.yml +44 -15
- package/managed/templates/github/workflows/managed-files.yml +64 -12
- package/package.json +4 -4
- package/src/cli.ts +10 -3
- package/src/github-ci/index.test.ts +53 -4
- package/src/github-ci/index.ts +37 -5
- package/src/lib/json.ts +3 -1
- package/src/lib/workspace.ts +1 -0
- package/src/monorepo/__tests__/ci-workflow.test.ts +37 -1
- package/src/monorepo/__tests__/publish-workflow.test.ts +39 -4
- package/src/monorepo/ci-workflow.ts +14 -4
- package/src/monorepo/github-runs-on.ts +45 -0
- package/src/monorepo/index.ts +7 -7
- package/src/monorepo/managed-files.test.ts +58 -0
- package/src/monorepo/managed-files.ts +59 -76
- package/src/monorepo/package-policy.test.ts +31 -0
- package/src/monorepo/package-policy.ts +2 -2
- package/src/monorepo/packs/index.ts +3 -1
- package/src/monorepo/publish-workflow.ts +28 -15
- package/src/monorepo/runtime.test.ts +23 -17
- package/src/monorepo/runtime.ts +12 -17
- package/src/monorepo/tool-validation.test.ts +15 -8
- package/src/monorepo/tool-validation.ts +20 -25
- package/src/nx/index.test.ts +45 -14
- package/src/nx/index.ts +133 -64
- package/managed/raw/patches/ttsc@0.19.3.patch +0 -67
package/dist/cli.js
CHANGED
|
@@ -57,11 +57,11 @@ function buildProgram() {
|
|
|
57
57
|
.option('--warn', 'report drift as warnings (GitHub annotations) instead of failing')
|
|
58
58
|
.action(async (options) => {
|
|
59
59
|
const { checkManagedFiles } = await import('./monorepo/index.js');
|
|
60
|
-
checkManagedFiles(await findRepoRoot(), { warn: options.warn });
|
|
60
|
+
await checkManagedFiles(await findRepoRoot(), { warn: options.warn });
|
|
61
61
|
});
|
|
62
62
|
monorepo.command('diff').action(async () => {
|
|
63
63
|
const { diffManagedFiles } = await import('./monorepo/index.js');
|
|
64
|
-
diffManagedFiles(await findRepoRoot());
|
|
64
|
+
await diffManagedFiles(await findRepoRoot());
|
|
65
65
|
});
|
|
66
66
|
monorepo
|
|
67
67
|
.command('validate-commit-msg <commitMsgFile>')
|
|
@@ -290,6 +290,7 @@ function buildProgram() {
|
|
|
290
290
|
.command('nx-run-many')
|
|
291
291
|
.requiredOption('--targets <targets>')
|
|
292
292
|
.option('--projects <projects>')
|
|
293
|
+
.option('--projects-with-targets <targets>', 'select projects owning any comma-separated target or target glob')
|
|
293
294
|
.option('--configuration <configuration>')
|
|
294
295
|
.option('--collect-outputs <directory>')
|
|
295
296
|
.action(async (options) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/github-ci/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAmBhD,KAAK,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/github-ci/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAmBhD,KAAK,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAKpD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBtE;AAmFD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAO3G;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACpG,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,oBAAoB,CAmD9G;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAwC/E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAehF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9F;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAGf;AA0CD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACrG,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|
package/dist/github-ci/index.js
CHANGED
|
@@ -25,6 +25,8 @@ const parseNxProjectDeployConfigurations = (() => {
|
|
|
25
25
|
const __is = input => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input);
|
|
26
26
|
return input => { input = JSON.parse(input); return __is(input) ? input : null; };
|
|
27
27
|
})();
|
|
28
|
+
/** Nx workers = host cores (CI runners sized for full machine use). */
|
|
29
|
+
const NX_PARALLEL = '100%';
|
|
28
30
|
export async function cleanupGithubCiCache(root) {
|
|
29
31
|
const githubOutput = process.env.GITHUB_OUTPUT;
|
|
30
32
|
const markCacheReady = async (ready) => {
|
|
@@ -127,7 +129,7 @@ export function nxSmartArgs(target, mode, configuration) {
|
|
|
127
129
|
if (configuration) {
|
|
128
130
|
args.push(`--configuration=${configuration}`);
|
|
129
131
|
}
|
|
130
|
-
args.push(`--exclude=tag:ci:skip:${target}`,
|
|
132
|
+
args.push(`--exclude=tag:ci:skip:${target}`, `--parallel=${NX_PARALLEL}`);
|
|
131
133
|
return args;
|
|
132
134
|
}
|
|
133
135
|
export async function githubCiNxSmart(root, options) {
|
|
@@ -143,10 +145,16 @@ export async function githubCiNxSmart(root, options) {
|
|
|
143
145
|
}
|
|
144
146
|
}
|
|
145
147
|
export function expandNxTargetRuns(projects, options) {
|
|
146
|
-
const
|
|
147
|
-
if (options.projects !== undefined &&
|
|
148
|
+
const namedProjects = selectProjects(projects, options.projects);
|
|
149
|
+
if (options.projects !== undefined && namedProjects.length === 0 && options.allowEmptyProjects !== true) {
|
|
148
150
|
throw new Error(`No Nx projects matched --projects ${options.projects}.`);
|
|
149
151
|
}
|
|
152
|
+
const selectedProjects = selectProjectsWithTargets(namedProjects, options.projectsWithTargets);
|
|
153
|
+
if (options.projectsWithTargets !== undefined &&
|
|
154
|
+
selectedProjects.length === 0 &&
|
|
155
|
+
options.allowEmptyProjects !== true) {
|
|
156
|
+
throw new Error(`No Nx projects own targets matching --projects-with-targets ${options.projectsWithTargets}.`);
|
|
157
|
+
}
|
|
150
158
|
const selectedTargetNames = [...new Set(selectedProjects.flatMap((project) => project.targets))].sort((a, b) => a.localeCompare(b));
|
|
151
159
|
const runs = [];
|
|
152
160
|
const unmatchedGlobs = [];
|
|
@@ -160,6 +168,14 @@ export function expandNxTargetRuns(projects, options) {
|
|
|
160
168
|
unmatchedGlobs.push(targetPattern);
|
|
161
169
|
}
|
|
162
170
|
for (const target of targets) {
|
|
171
|
+
if (!isGlob && options.projectsWithTargets !== undefined) {
|
|
172
|
+
const missingProjects = selectedProjects
|
|
173
|
+
.filter((project) => !project.targets.includes(target))
|
|
174
|
+
.map((project) => project.project);
|
|
175
|
+
if (missingProjects.length > 0) {
|
|
176
|
+
throw new Error(`Nx target ${target} is missing for project(s) selected by --projects-with-targets ${options.projectsWithTargets}: ${missingProjects.join(', ')}.`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
163
179
|
if (addedTargets.has(target)) {
|
|
164
180
|
continue;
|
|
165
181
|
}
|
|
@@ -226,7 +242,7 @@ export function nxRunManyArgs(run, configuration) {
|
|
|
226
242
|
if (configuration) {
|
|
227
243
|
nxArgs.push(`--configuration=${configuration}`);
|
|
228
244
|
}
|
|
229
|
-
nxArgs.push(
|
|
245
|
+
nxArgs.push(`--parallel=${NX_PARALLEL}`);
|
|
230
246
|
return nxArgs;
|
|
231
247
|
}
|
|
232
248
|
export async function readGitHeadSha(root) {
|
|
@@ -271,6 +287,13 @@ function selectProjects(projects, selectors) {
|
|
|
271
287
|
.filter((project) => patterns.some((pattern) => new Bun.Glob(pattern).match(project.project)))
|
|
272
288
|
.sort((left, right) => left.project.localeCompare(right.project));
|
|
273
289
|
}
|
|
290
|
+
function selectProjectsWithTargets(projects, selectors) {
|
|
291
|
+
if (selectors === undefined) {
|
|
292
|
+
return projects;
|
|
293
|
+
}
|
|
294
|
+
const patterns = commaSeparatedValues(selectors);
|
|
295
|
+
return projects.filter((project) => project.targets.some((target) => patterns.some((pattern) => new Bun.Glob(pattern).match(target))));
|
|
296
|
+
}
|
|
274
297
|
function commaSeparatedValues(value) {
|
|
275
298
|
return value
|
|
276
299
|
.split(',')
|
|
@@ -291,7 +314,7 @@ export async function githubCiNxDeploy(root, options) {
|
|
|
291
314
|
const projectList = projects.join(',');
|
|
292
315
|
const targets = options.verify === true ? ['build', 'lint', 'test', 'deploy'] : ['deploy'];
|
|
293
316
|
for (const target of targets) {
|
|
294
|
-
const nxArgs = ['run-many', '-t', target, `--projects=${projectList}`,
|
|
317
|
+
const nxArgs = ['run-many', '-t', target, `--projects=${projectList}`, `--parallel=${NX_PARALLEL}`];
|
|
295
318
|
if (target === 'deploy') {
|
|
296
319
|
nxArgs.push(`--configuration=${options.configuration}`);
|
|
297
320
|
}
|
package/dist/lib/json.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export interface PackagePublishConfig {
|
|
|
16
16
|
}
|
|
17
17
|
export interface PackageSmooGithub {
|
|
18
18
|
pushBranches?: string[];
|
|
19
|
+
/** GitHub Actions runs-on for managed CI (string or label list). Default: ubuntu-latest. */
|
|
20
|
+
runsOn?: string | string[];
|
|
19
21
|
}
|
|
20
22
|
export interface PackageSmooConfig {
|
|
21
23
|
github?: PackageSmooGithub;
|
|
@@ -63,7 +65,7 @@ export interface NxDependsOnObject {
|
|
|
63
65
|
export type NxDependsOn = string | NxDependsOnObject;
|
|
64
66
|
/** Nx target options are executor-specific open bags. */
|
|
65
67
|
export type NxTargetOptions = Record<string, unknown>;
|
|
66
|
-
export type NxInput = string |
|
|
68
|
+
export type NxInput = string | object;
|
|
67
69
|
export interface NxTargetConfig {
|
|
68
70
|
executor?: string;
|
|
69
71
|
dependsOn?: NxDependsOn[];
|
package/dist/lib/json.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/lib/json.ts"],"names":[],"mappings":"AAGA,sDAAsD;AACtD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/lib/json.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/json.js
CHANGED
|
@@ -30,12 +30,7 @@ export const parsePackageJsonText = (() => {
|
|
|
30
30
|
return true;
|
|
31
31
|
return "string" === typeof value;
|
|
32
32
|
});
|
|
33
|
-
const _io10 = (input, _vctx = {}) =>
|
|
34
|
-
const value = input[key];
|
|
35
|
-
if (undefined === value)
|
|
36
|
-
return true;
|
|
37
|
-
return true;
|
|
38
|
-
});
|
|
33
|
+
const _io10 = (input, _vctx = {}) => true;
|
|
39
34
|
const _io11 = (input, _vctx = {}) => Object.keys(input).every(key => {
|
|
40
35
|
const value = input[key];
|
|
41
36
|
if (undefined === value)
|
|
@@ -43,7 +38,7 @@ export const parsePackageJsonText = (() => {
|
|
|
43
38
|
return true;
|
|
44
39
|
});
|
|
45
40
|
const _io12 = (input, _vctx = {}) => undefined === input.github || "object" === typeof input.github && null !== input.github && false === Array.isArray(input.github) && _io13(input.github, _vctx);
|
|
46
|
-
const _io13 = (input, _vctx = {}) => undefined === input.pushBranches || Array.isArray(input.pushBranches) && input.pushBranches.every(elem => "string" === typeof elem);
|
|
41
|
+
const _io13 = (input, _vctx = {}) => (undefined === input.pushBranches || Array.isArray(input.pushBranches) && input.pushBranches.every(elem => "string" === typeof elem)) && (null !== input.runsOn && (undefined === input.runsOn || "string" === typeof input.runsOn || Array.isArray(input.runsOn) && input.runsOn.every(elem => "string" === typeof elem)));
|
|
47
42
|
const _io2 = (input, _vctx = {}) => (_vctx.io2 || (_vctx.io2 = new WeakSet())).has(input) ? true : (_vctx.io2.add(input), (Object.keys(input).every(key => {
|
|
48
43
|
const value = input[key];
|
|
49
44
|
if (undefined === value)
|
|
@@ -76,12 +71,7 @@ export const parseNxProjectJsonText = (() => {
|
|
|
76
71
|
})) || (_vctx.io1.delete(input), false));
|
|
77
72
|
const _io2 = (input, _vctx = {}) => (_vctx.io2 || (_vctx.io2 = new WeakSet())).has(input) ? true : (_vctx.io2.add(input), ((undefined === input.executor || "string" === typeof input.executor) && (undefined === input.dependsOn || Array.isArray(input.dependsOn) && input.dependsOn.every(elem => null !== elem && undefined !== elem && ("string" === typeof elem || "object" === typeof elem && null !== elem && _io3(elem, _vctx)))) && (undefined === input.outputs || Array.isArray(input.outputs) && input.outputs.every(elem => "string" === typeof elem)) && (undefined === input.inputs || Array.isArray(input.inputs) && input.inputs.every(elem => null !== elem && undefined !== elem && ("string" === typeof elem || "object" === typeof elem && null !== elem && false === Array.isArray(elem) && _io4(elem, _vctx)))) && (undefined === input.options || "object" === typeof input.options && null !== input.options && false === Array.isArray(input.options) && _io5(input.options, _vctx)) && (undefined === input.configurations || "object" === typeof input.configurations && null !== input.configurations && false === Array.isArray(input.configurations) && _io1(input.configurations, _vctx)) && (undefined === input.cache || "boolean" === typeof input.cache) && (undefined === input.command || "string" === typeof input.command) && (undefined === input.parallelism || "boolean" === typeof input.parallelism)) || (_vctx.io2.delete(input), false));
|
|
78
73
|
const _io3 = (input, _vctx = {}) => "string" === typeof input.target && (null !== input.projects && (undefined === input.projects || "string" === typeof input.projects || Array.isArray(input.projects) && input.projects.every(elem => "string" === typeof elem)));
|
|
79
|
-
const _io4 = (input, _vctx = {}) =>
|
|
80
|
-
const value = input[key];
|
|
81
|
-
if (undefined === value)
|
|
82
|
-
return true;
|
|
83
|
-
return true;
|
|
84
|
-
});
|
|
74
|
+
const _io4 = (input, _vctx = {}) => true;
|
|
85
75
|
const _io5 = (input, _vctx = {}) => Object.keys(input).every(key => {
|
|
86
76
|
const value = input[key];
|
|
87
77
|
if (undefined === value)
|
|
@@ -143,12 +133,7 @@ const isPackageJsonValue = (() => {
|
|
|
143
133
|
return true;
|
|
144
134
|
return "string" === typeof value;
|
|
145
135
|
});
|
|
146
|
-
const _io10 = (input, _vctx = {}) =>
|
|
147
|
-
const value = input[key];
|
|
148
|
-
if (undefined === value)
|
|
149
|
-
return true;
|
|
150
|
-
return true;
|
|
151
|
-
});
|
|
136
|
+
const _io10 = (input, _vctx = {}) => true;
|
|
152
137
|
const _io11 = (input, _vctx = {}) => Object.keys(input).every(key => {
|
|
153
138
|
const value = input[key];
|
|
154
139
|
if (undefined === value)
|
|
@@ -156,7 +141,7 @@ const isPackageJsonValue = (() => {
|
|
|
156
141
|
return true;
|
|
157
142
|
});
|
|
158
143
|
const _io12 = (input, _vctx = {}) => undefined === input.github || "object" === typeof input.github && null !== input.github && false === Array.isArray(input.github) && _io13(input.github, _vctx);
|
|
159
|
-
const _io13 = (input, _vctx = {}) => undefined === input.pushBranches || Array.isArray(input.pushBranches) && input.pushBranches.every(elem => "string" === typeof elem);
|
|
144
|
+
const _io13 = (input, _vctx = {}) => (undefined === input.pushBranches || Array.isArray(input.pushBranches) && input.pushBranches.every(elem => "string" === typeof elem)) && (null !== input.runsOn && (undefined === input.runsOn || "string" === typeof input.runsOn || Array.isArray(input.runsOn) && input.runsOn.every(elem => "string" === typeof elem)));
|
|
160
145
|
const _io2 = (input, _vctx = {}) => (_vctx.io2 || (_vctx.io2 = new WeakSet())).has(input) ? true : (_vctx.io2.add(input), (Object.keys(input).every(key => {
|
|
161
146
|
const value = input[key];
|
|
162
147
|
if (undefined === value)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/lib/workspace.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAGvB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,yBAAyB,YACpC,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,CACd,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAE9D;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,WAAW,qBAA8C,GACxD,WAAW,EAAE,CAMf;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAGtE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG3D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,CAE7E;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAGxF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAEhE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,EAAE,CAErF;
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/lib/workspace.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAGvB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,yBAAyB,YACpC,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,CACd,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAE9D;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,WAAW,qBAA8C,GACxD,WAAW,EAAE,CAMf;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAGtE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG3D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,CAE7E;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAGxF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAEhE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,EAAE,CAErF;AA+DD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CASlE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI3D;AAaD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAehE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAa1F;AAMD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAEtE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,EAAE,CAMpD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,CAatE;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAErF;AA6BD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD"}
|
package/dist/lib/workspace.js
CHANGED
|
@@ -74,6 +74,7 @@ function listWorkspacePackageJsonPaths(root, workspacePatterns) {
|
|
|
74
74
|
const paths = [];
|
|
75
75
|
for (const pattern of workspacePatterns) {
|
|
76
76
|
if (!pattern.endsWith('/*')) {
|
|
77
|
+
paths.push(join(root, pattern, 'package.json'));
|
|
77
78
|
continue;
|
|
78
79
|
}
|
|
79
80
|
const parent = join(root, pattern.slice(0, -2));
|
|
@@ -22,6 +22,8 @@ export interface CiWorkflowDefinitionOptions {
|
|
|
22
22
|
deploy: boolean;
|
|
23
23
|
deployProvider?: 'cloudflare';
|
|
24
24
|
pushBranches: string[];
|
|
25
|
+
/** Default ubuntu-latest when omitted. */
|
|
26
|
+
runsOn?: string | string[];
|
|
25
27
|
}
|
|
26
28
|
export declare function defineCiWorkflow(options: CiWorkflowDefinitionOptions): CiWorkflowStep[];
|
|
27
29
|
export declare function renderCiWorkflowYaml(options: CiWorkflowDefinitionOptions): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci-workflow.d.ts","sourceRoot":"","sources":["../../src/monorepo/ci-workflow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ci-workflow.d.ts","sourceRoot":"","sources":["../../src/monorepo/ci-workflow.ts"],"names":[],"mappings":"AAIA,oBAAY,kBAAkB;IAC5B,QAAQ,aAAa;IACrB,WAAW,iBAAiB;IAC5B,SAAS,gBAAgB;IACzB,cAAc,qBAAqB;IACnC,KAAK,UAAU;IACf,IAAI,SAAS;IACb,SAAS,eAAe;IACxB,iBAAiB,wBAAwB;IACzC,oBAAoB,2BAA2B;IAC/C,MAAM,WAAW;IACjB,WAAW,kBAAkB;IAC7B,cAAc,qBAAqB;IACnC,aAAa,oBAAoB;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5B;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,2BAA2B,GAAG,cAAc,EAAE,CAqBvF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,CAGjF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/* biome-ignore-all lint/suspicious/noTemplateCurlyInString: GitHub Actions expressions are emitted literally. */
|
|
2
|
+
import { renderRunsOnLine } from './github-runs-on.js';
|
|
2
3
|
export var CiWorkflowStepKind;
|
|
3
4
|
(function (CiWorkflowStepKind) {
|
|
4
5
|
CiWorkflowStepKind["Checkout"] = "checkout";
|
|
@@ -59,7 +60,7 @@ defaults:
|
|
|
59
60
|
jobs:
|
|
60
61
|
main:
|
|
61
62
|
name: Validate
|
|
62
|
-
|
|
63
|
+
${renderRunsOnLine(options.runsOn)}
|
|
63
64
|
timeout-minutes: 45
|
|
64
65
|
env:
|
|
65
66
|
NIX_STORE_NAR: ${githubExpression('github.workspace')}/nix-store.nar
|
|
@@ -124,6 +125,8 @@ function yamlLinesForStep(step, options) {
|
|
|
124
125
|
' fetch-depth: 0',
|
|
125
126
|
];
|
|
126
127
|
case CiWorkflowStepKind.SetupDevenv:
|
|
128
|
+
// One step everywhere. setup-devenv detects host-nix (GARM) vs ephemeral
|
|
129
|
+
// and skips GH install/cache steps internally — same for ci/publish/managed.
|
|
127
130
|
return [` - name: ${step.name}`, ' id: setup', ' uses: ./.github/actions/setup-devenv'];
|
|
128
131
|
case CiWorkflowStepKind.SetNxShas:
|
|
129
132
|
return [
|
|
@@ -158,7 +161,7 @@ function yamlLinesForStep(step, options) {
|
|
|
158
161
|
// recursion guard, so the default token suffices.
|
|
159
162
|
return [
|
|
160
163
|
` - name: ${step.name}`,
|
|
161
|
-
" if:
|
|
164
|
+
" if: steps.managed-drift.outputs.drifted != '' && steps.managed-drift.outputs.drifted != '0'",
|
|
162
165
|
' run: gh workflow run managed-files.yml --ref "$GITHUB_REF_NAME"',
|
|
163
166
|
];
|
|
164
167
|
case CiWorkflowStepKind.Deploy:
|
|
@@ -186,7 +189,8 @@ function yamlLinesForStep(step, options) {
|
|
|
186
189
|
case CiWorkflowStepKind.UploadTraceDbs:
|
|
187
190
|
return [
|
|
188
191
|
` - name: ${step.name}`,
|
|
189
|
-
'
|
|
192
|
+
' # success() is the default; always() keeps traces after a red build/test.',
|
|
193
|
+
' if: always()',
|
|
190
194
|
' uses: actions/upload-artifact@v7.0.1',
|
|
191
195
|
' with:',
|
|
192
196
|
' name: trace-results-${{ github.run_id }}',
|
|
@@ -198,7 +202,9 @@ function yamlLinesForStep(step, options) {
|
|
|
198
202
|
case CiWorkflowStepKind.SaveNixDevenv:
|
|
199
203
|
return [
|
|
200
204
|
` - name: ${step.name}`,
|
|
201
|
-
'
|
|
205
|
+
' # always() still saves after a red job. Nix NAR is ephemeral-only;',
|
|
206
|
+
' # devenv eval-cache also saves on host-nix when setup missed.',
|
|
207
|
+
' if: always()',
|
|
202
208
|
' uses: ./.github/actions/save-nix-devenv',
|
|
203
209
|
' with:',
|
|
204
210
|
' nix-cache-hit: ${{ steps.setup.outputs.nix-cache-hit }}',
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Shared `runs-on:` emission for generated GitHub workflow YAML. */
|
|
2
|
+
export type WorkflowRunsOn = string | string[] | undefined;
|
|
3
|
+
export declare function isNixosRunner(runsOn: WorkflowRunsOn): boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Trusted jobs use configured nixos self-hosted labels; fork PRs stay on
|
|
6
|
+
* ubuntu-latest (no access to the private runner fleet).
|
|
7
|
+
*/
|
|
8
|
+
export declare function githubUsesNixosRunnerExpr(): string;
|
|
9
|
+
/**
|
|
10
|
+
* Full ` runs-on: …` line(s), indented for a job under `jobs.<id>:`.
|
|
11
|
+
* Nixos labels emit the multiline prettier-stable fork-gate expression.
|
|
12
|
+
*/
|
|
13
|
+
export declare function renderRunsOnLine(runsOn: WorkflowRunsOn): string;
|
|
14
|
+
//# sourceMappingURL=github-runs-on.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-runs-on.d.ts","sourceRoot":"","sources":["../../src/monorepo/github-runs-on.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAE3D,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAG7D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAuB/D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Shared `runs-on:` emission for generated GitHub workflow YAML. */
|
|
2
|
+
export function isNixosRunner(runsOn) {
|
|
3
|
+
const labels = runsOn === undefined ? [] : typeof runsOn === 'string' ? [runsOn] : runsOn;
|
|
4
|
+
return labels.some((label) => label === 'nixos' || label.startsWith('nixos-'));
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Trusted jobs use configured nixos self-hosted labels; fork PRs stay on
|
|
8
|
+
* ubuntu-latest (no access to the private runner fleet).
|
|
9
|
+
*/
|
|
10
|
+
export function githubUsesNixosRunnerExpr() {
|
|
11
|
+
return "(github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository)";
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Full ` runs-on: …` line(s), indented for a job under `jobs.<id>:`.
|
|
15
|
+
* Nixos labels emit the multiline prettier-stable fork-gate expression.
|
|
16
|
+
*/
|
|
17
|
+
export function renderRunsOnLine(runsOn) {
|
|
18
|
+
if (!isNixosRunner(runsOn)) {
|
|
19
|
+
let value;
|
|
20
|
+
if (runsOn === undefined) {
|
|
21
|
+
value = 'ubuntu-latest';
|
|
22
|
+
}
|
|
23
|
+
else if (typeof runsOn === 'string') {
|
|
24
|
+
value = runsOn.length > 0 ? runsOn : 'ubuntu-latest';
|
|
25
|
+
}
|
|
26
|
+
else if (runsOn.length === 0) {
|
|
27
|
+
value = 'ubuntu-latest';
|
|
28
|
+
}
|
|
29
|
+
else if (runsOn.length === 1) {
|
|
30
|
+
value = runsOn[0] ?? 'ubuntu-latest';
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
value = `[${runsOn.map((label) => `'${label}'`).join(', ')}]`;
|
|
34
|
+
}
|
|
35
|
+
return ` runs-on: ${value}`;
|
|
36
|
+
}
|
|
37
|
+
const labels = typeof runsOn === 'string' ? [runsOn] : runsOn;
|
|
38
|
+
// Multiline matches prettier so checked-in workflows stay byte-identical.
|
|
39
|
+
const nixosJson = JSON.stringify(labels);
|
|
40
|
+
return ` runs-on:
|
|
41
|
+
\${{ ${githubUsesNixosRunnerExpr()} &&
|
|
42
|
+
fromJSON('${nixosJson}') || 'ubuntu-latest' }}`;
|
|
43
|
+
}
|
package/dist/monorepo/index.d.ts
CHANGED
|
@@ -33,8 +33,8 @@ export declare function validateMonorepo(root: string, options?: ValidateOptions
|
|
|
33
33
|
export declare function updateManagedFiles(root: string): Promise<void>;
|
|
34
34
|
export declare function checkManagedFiles(root: string, options?: {
|
|
35
35
|
warn?: boolean;
|
|
36
|
-
}): void
|
|
37
|
-
export declare function diffManagedFiles(root: string): void
|
|
36
|
+
}): Promise<void>;
|
|
37
|
+
export declare function diffManagedFiles(root: string): Promise<void>;
|
|
38
38
|
export declare function validateCommitMessageFile(path: string | undefined, options?: ValidateCommitMessageOptions, root?: string): void;
|
|
39
39
|
export declare function listReleaseProjectNamesForNx(root: string, options?: ListReleasePackagesOptions): string;
|
|
40
40
|
export declare function validatePublicPackageTags(root: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/monorepo/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAOxD,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBjG;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAapE;AAED,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/monorepo/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAOxD,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBjG;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAapE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAUrG;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAElE;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,GAAE,4BAAiC,EAC1C,IAAI,SAAgB,GACnB,IAAI,CAgBN;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,0BAA+B,GAAG,MAAM,CAW3G;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI5D;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,uBAAuB,EAChC,KAAK,GAAE,qBAAoD,GAC1D,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,CAAC"}
|
package/dist/monorepo/index.js
CHANGED
|
@@ -15,7 +15,7 @@ export async function initMonorepo(root, options) {
|
|
|
15
15
|
await syncRootRuntimeVersions(root);
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
|
-
printResults(applyManagedFiles(root, 'update'));
|
|
18
|
+
printResults(await applyManagedFiles(root, 'update'));
|
|
19
19
|
await runInitPacks({ root, syncRuntime: process.env.DEVENV_ROOT !== undefined || options.syncRuntime === true });
|
|
20
20
|
}
|
|
21
21
|
export async function validateMonorepo(root, options = {}) {
|
|
@@ -37,7 +37,7 @@ export async function validateMonorepo(root, options = {}) {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
export async function updateManagedFiles(root) {
|
|
40
|
-
printResults(applyManagedFiles(root, 'update'));
|
|
40
|
+
printResults(await applyManagedFiles(root, 'update'));
|
|
41
41
|
// Tool dependency policy (typescript API 6, @typescript/native for ttsc, nx, …)
|
|
42
42
|
// lives next to managed templates — update must install them, not only rewrite files.
|
|
43
43
|
await applyToolConfigDefaults(root);
|
|
@@ -50,19 +50,19 @@ export async function updateManagedFiles(root) {
|
|
|
50
50
|
throw new Error(`bun install failed after monorepo update${stderr || stdout ? `:\n${stderr || stdout}` : ''}`);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
export function checkManagedFiles(root, options = {}) {
|
|
53
|
+
export async function checkManagedFiles(root, options = {}) {
|
|
54
54
|
if (options.warn === true) {
|
|
55
|
-
warnOnManagedFileDrift(root);
|
|
55
|
+
await warnOnManagedFileDrift(root);
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
-
const results = applyManagedFiles(root, 'check');
|
|
58
|
+
const results = await applyManagedFiles(root, 'check');
|
|
59
59
|
printResults(results);
|
|
60
60
|
if (results.some((result) => result.action === 'drifted')) {
|
|
61
61
|
throw new Error('Managed monorepo files are out of date. Run: smoo monorepo update');
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
|
-
export function diffManagedFiles(root) {
|
|
65
|
-
printResults(applyManagedFiles(root, 'diff'));
|
|
64
|
+
export async function diffManagedFiles(root) {
|
|
65
|
+
printResults(await applyManagedFiles(root, 'diff'));
|
|
66
66
|
}
|
|
67
67
|
export function validateCommitMessageFile(path, options = {}, root = process.cwd()) {
|
|
68
68
|
if (!path) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type NxProjects } from '../nx/index.js';
|
|
1
2
|
/**
|
|
2
3
|
* Repos may append their own content to a managed file below this marker —
|
|
3
4
|
* e.g. extra merge drivers in .gitattributes. Everything from the marker
|
|
@@ -47,10 +48,20 @@ export interface FileResult {
|
|
|
47
48
|
target: string;
|
|
48
49
|
action: 'created' | 'updated' | 'unchanged' | 'skipped' | 'skipped-symlink' | 'drifted' | 'ok-symlink';
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
+
interface DeployTargetInfo {
|
|
52
|
+
exists: boolean;
|
|
53
|
+
provider?: 'cloudflare';
|
|
54
|
+
}
|
|
55
|
+
export declare const managedFileTargetsForTest: {
|
|
56
|
+
target: string;
|
|
57
|
+
executable: boolean | undefined;
|
|
58
|
+
}[];
|
|
59
|
+
export declare function applyManagedFiles(root: string, mode: 'update' | 'check' | 'diff'): Promise<FileResult[]>;
|
|
51
60
|
export declare function platformTargetGlobsForTest(targetNames: Iterable<string>): string[];
|
|
61
|
+
/** Test seam: deploy configuration presence/provider from graph nodes. */
|
|
62
|
+
export declare function deployTargetInfoFromProjects(projects: NxProjects, configuration: string): DeployTargetInfo;
|
|
52
63
|
export declare function printResults(results: FileResult[]): void;
|
|
53
|
-
export declare function validateManagedFiles(root: string): number
|
|
64
|
+
export declare function validateManagedFiles(root: string): Promise<number>;
|
|
54
65
|
/**
|
|
55
66
|
* Non-blocking drift report: prints the per-file table and surfaces drift as
|
|
56
67
|
* GitHub Actions warning annotations (plain stderr elsewhere) without failing
|
|
@@ -61,6 +72,6 @@ export declare function validateManagedFiles(root: string): number;
|
|
|
61
72
|
* Under GitHub Actions the drifted-file count is published as the step output
|
|
62
73
|
* `drifted`, so downstream steps gate declaratively instead of parsing logs.
|
|
63
74
|
*/
|
|
64
|
-
export declare function warnOnManagedFileDrift(root: string): void
|
|
75
|
+
export declare function warnOnManagedFileDrift(root: string): Promise<void>;
|
|
65
76
|
export {};
|
|
66
77
|
//# sourceMappingURL=managed-files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managed-files.d.ts","sourceRoot":"","sources":["../../src/monorepo/managed-files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"managed-files.d.ts","sourceRoot":"","sources":["../../src/monorepo/managed-files.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,UAAU,EAA2B,MAAM,gBAAgB,CAAC;AAM1F;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,yEAAyE,CAAC;AAU3G,sFAAsF;AACtF,iBAAS,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAIlF;AAED,uCAAuC;AACvC,eAAO,MAAM,wBAAwB,0BAAoB,CAAC;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;8BAE8B;AAC9B,iBAAS,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAkCxG;AAED,wCAAwC;AACxC,eAAO,MAAM,+BAA+B,iCAA2B,CAAC;AAExE;+EAC+E;AAC/E,iBAAS,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAqBtF;AAED,yCAAyC;AACzC,eAAO,MAAM,gCAAgC,kCAA4B,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS,GAAG,YAAY,CAAC;CACxG;AAeD,UAAU,gBAAgB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AA4GD,eAAO,MAAM,yBAAyB;;;GAAyE,CAAC;AAIhH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAG9G;AAmGD,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAMlF;AAED,0EAA0E;AAC1E,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,GAAG,gBAAgB,CAY1G;AAsDD,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAIxD;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQxE;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxE"}
|