nx 19.5.2 → 19.5.4
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/bin/nx-cloud.d.ts +2 -1
- package/bin/nx-cloud.js +9 -17
- package/package.json +13 -13
- package/release/changelog-renderer/index.js +5 -4
- package/src/command-line/connect/connect-to-nx-cloud.d.ts +2 -0
- package/src/command-line/connect/connect-to-nx-cloud.js +33 -6
- package/src/command-line/connect/view-logs.js +5 -3
- package/src/command-line/examples.js +4 -0
- package/src/command-line/init/implementation/add-nx-to-monorepo.js +1 -1
- package/src/command-line/init/implementation/add-nx-to-nest.js +1 -1
- package/src/command-line/init/implementation/add-nx-to-npm-repo.js +1 -1
- package/src/command-line/init/implementation/angular/index.js +1 -1
- package/src/command-line/init/implementation/angular/legacy-angular-versions.js +1 -1
- package/src/command-line/init/implementation/utils.d.ts +1 -1
- package/src/command-line/init/implementation/utils.js +7 -5
- package/src/command-line/init/init-v2.js +1 -4
- package/src/command-line/list/list.js +10 -14
- package/src/command-line/migrate/migrate.js +19 -7
- package/src/command-line/release/changelog.js +1 -0
- package/src/command-line/release/command-object.js +5 -21
- package/src/command-line/release/config/config.js +4 -0
- package/src/command-line/release/plan.js +2 -12
- package/src/command-line/release/utils/generate-version-plan-content.d.ts +1 -0
- package/src/command-line/release/utils/generate-version-plan-content.js +21 -0
- package/src/command-line/release/utils/shared.js +8 -5
- package/src/command-line/release/version.js +4 -2
- package/src/command-line/report/report.d.ts +1 -0
- package/src/command-line/report/report.js +14 -9
- package/src/command-line/reset/command-object.d.ts +1 -0
- package/src/command-line/reset/command-object.js +4 -0
- package/src/command-line/reset/reset.js +13 -0
- package/src/command-line/run/run.js +2 -14
- package/src/command-line/watch/watch.js +1 -1
- package/src/daemon/socket-utils.js +1 -1
- package/src/daemon/tmp-dir.d.ts +1 -1
- package/src/daemon/tmp-dir.js +3 -2
- package/src/generators/internal-utils/format-changed-files-with-prettier-if-available.d.ts +6 -0
- package/src/generators/internal-utils/format-changed-files-with-prettier-if-available.js +15 -5
- package/src/migrations/update-16-0-0/update-nx-cloud-runner.js +2 -0
- package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.d.ts +1 -1
- package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.js +3 -1
- package/src/native/index.d.ts +2 -0
- package/src/native/native-bindings.js +1 -0
- package/src/native/nx.wasi.cjs +35 -33
- package/src/native/nx.wasm32-wasi.wasm +0 -0
- package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.d.ts +3 -2
- package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +19 -66
- package/src/nx-cloud/utilities/client.d.ts +10 -0
- package/src/nx-cloud/utilities/client.js +35 -0
- package/src/nx-cloud/utilities/url-shorten.d.ts +3 -3
- package/src/nx-cloud/utilities/url-shorten.js +18 -13
- package/src/project-graph/plugins/internal-api.js +4 -1
- package/src/tasks-runner/run-command.d.ts +4 -4
- package/src/tasks-runner/run-command.js +22 -17
- package/src/tasks-runner/task-env.js +3 -2
- package/src/tasks-runner/task-graph-utils.d.ts +3 -0
- package/src/tasks-runner/task-graph-utils.js +34 -0
- package/src/tasks-runner/utils.js +9 -5
- package/src/utils/chunkify.d.ts +10 -0
- package/src/utils/chunkify.js +19 -12
- package/src/utils/command-line-utils.d.ts +3 -0
- package/src/utils/command-line-utils.js +11 -7
- package/src/utils/git-utils.js +14 -4
- package/src/utils/plugins/core-plugins.d.ts +6 -3
- package/src/utils/plugins/core-plugins.js +107 -115
- package/src/utils/plugins/index.d.ts +4 -4
- package/src/utils/plugins/index.js +7 -8
- package/src/utils/plugins/installed-plugins.d.ts +2 -3
- package/src/utils/plugins/installed-plugins.js +4 -31
- package/src/utils/plugins/local-plugins.d.ts +2 -3
- package/src/utils/plugins/local-plugins.js +2 -29
- package/src/utils/plugins/output.d.ts +5 -0
- package/src/utils/plugins/output.js +104 -0
- package/src/utils/plugins/plugin-capabilities.d.ts +12 -2
- package/src/utils/plugins/plugin-capabilities.js +2 -87
- package/src/utils/plugins/community-plugins.d.ts +0 -2
- package/src/utils/plugins/community-plugins.js +0 -28
- package/src/utils/plugins/models.d.ts +0 -22
- package/src/utils/plugins/models.js +0 -2
- package/src/utils/plugins/shared.d.ts +0 -1
- package/src/utils/plugins/shared.js +0 -7
package/bin/nx-cloud.d.ts
CHANGED
package/bin/nx-cloud.js
CHANGED
@@ -1,38 +1,30 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
2
|
"use strict";
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
4
|
-
|
4
|
+
exports.invokeCommandWithNxCloudClient = invokeCommandWithNxCloudClient;
|
5
5
|
const get_cloud_options_1 = require("../src/nx-cloud/utilities/get-cloud-options");
|
6
6
|
const update_manager_1 = require("../src/nx-cloud/update-manager");
|
7
7
|
const output_1 = require("../src/utils/output");
|
8
|
+
const client_1 = require("../src/nx-cloud/utilities/client");
|
8
9
|
const command = process.argv[2];
|
9
10
|
const options = (0, get_cloud_options_1.getCloudOptions)();
|
10
11
|
Promise.resolve().then(async () => invokeCommandWithNxCloudClient(options));
|
11
12
|
async function invokeCommandWithNxCloudClient(options) {
|
12
13
|
try {
|
13
|
-
const
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
.then(() => process.exit(0))
|
19
|
-
.catch((e) => {
|
20
|
-
console.error(e);
|
21
|
-
process.exit(1);
|
22
|
-
});
|
23
|
-
}
|
24
|
-
else {
|
14
|
+
const client = await (0, client_1.getCloudClient)(options);
|
15
|
+
client.invoke(command);
|
16
|
+
}
|
17
|
+
catch (e) {
|
18
|
+
if (e instanceof client_1.UnknownCommandError) {
|
25
19
|
output_1.output.error({
|
26
|
-
title: `Unknown Command "${command}"`,
|
20
|
+
title: `Unknown Command "${e.command}"`,
|
27
21
|
});
|
28
22
|
output_1.output.log({
|
29
23
|
title: 'Available Commands:',
|
30
|
-
bodyLines:
|
24
|
+
bodyLines: e.availableCommands.map((c) => `- ${c}`),
|
31
25
|
});
|
32
26
|
process.exit(1);
|
33
27
|
}
|
34
|
-
}
|
35
|
-
catch (e) {
|
36
28
|
const body = ['Cannot run commands from the `nx-cloud` CLI.'];
|
37
29
|
if (e instanceof update_manager_1.NxCloudEnterpriseOutdatedError) {
|
38
30
|
try {
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "nx",
|
3
|
-
"version": "19.5.
|
3
|
+
"version": "19.5.4",
|
4
4
|
"private": false,
|
5
5
|
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
|
6
6
|
"repository": {
|
@@ -41,7 +41,7 @@
|
|
41
41
|
"@yarnpkg/lockfile": "^1.1.0",
|
42
42
|
"@yarnpkg/parsers": "3.0.0-rc.46",
|
43
43
|
"@zkochan/js-yaml": "0.0.7",
|
44
|
-
"axios": "^1.
|
44
|
+
"axios": "^1.7.2",
|
45
45
|
"chalk": "^4.1.0",
|
46
46
|
"cli-cursor": "3.1.0",
|
47
47
|
"cli-spinners": "2.6.1",
|
@@ -71,7 +71,7 @@
|
|
71
71
|
"yargs-parser": "21.1.1",
|
72
72
|
"node-machine-id": "1.1.12",
|
73
73
|
"ora": "5.3.0",
|
74
|
-
"@nrwl/tao": "19.5.
|
74
|
+
"@nrwl/tao": "19.5.4"
|
75
75
|
},
|
76
76
|
"peerDependencies": {
|
77
77
|
"@swc-node/register": "^1.8.0",
|
@@ -86,16 +86,16 @@
|
|
86
86
|
}
|
87
87
|
},
|
88
88
|
"optionalDependencies": {
|
89
|
-
"@nx/nx-darwin-x64": "19.5.
|
90
|
-
"@nx/nx-darwin-arm64": "19.5.
|
91
|
-
"@nx/nx-linux-x64-gnu": "19.5.
|
92
|
-
"@nx/nx-linux-x64-musl": "19.5.
|
93
|
-
"@nx/nx-win32-x64-msvc": "19.5.
|
94
|
-
"@nx/nx-linux-arm64-gnu": "19.5.
|
95
|
-
"@nx/nx-linux-arm64-musl": "19.5.
|
96
|
-
"@nx/nx-linux-arm-gnueabihf": "19.5.
|
97
|
-
"@nx/nx-win32-arm64-msvc": "19.5.
|
98
|
-
"@nx/nx-freebsd-x64": "19.5.
|
89
|
+
"@nx/nx-darwin-x64": "19.5.4",
|
90
|
+
"@nx/nx-darwin-arm64": "19.5.4",
|
91
|
+
"@nx/nx-linux-x64-gnu": "19.5.4",
|
92
|
+
"@nx/nx-linux-x64-musl": "19.5.4",
|
93
|
+
"@nx/nx-win32-x64-msvc": "19.5.4",
|
94
|
+
"@nx/nx-linux-arm64-gnu": "19.5.4",
|
95
|
+
"@nx/nx-linux-arm64-musl": "19.5.4",
|
96
|
+
"@nx/nx-linux-arm-gnueabihf": "19.5.4",
|
97
|
+
"@nx/nx-win32-arm64-msvc": "19.5.4",
|
98
|
+
"@nx/nx-freebsd-x64": "19.5.4"
|
99
99
|
},
|
100
100
|
"nx-migrations": {
|
101
101
|
"migrations": "./migrations.json",
|
@@ -25,10 +25,11 @@ const defaultChangelogRenderer = async ({ projectGraph, changes, releaseVersion,
|
|
25
25
|
}
|
26
26
|
}
|
27
27
|
}
|
28
|
+
let relevantChanges = changes;
|
28
29
|
// workspace root level changelog
|
29
30
|
if (project === null) {
|
30
31
|
// No changes for the workspace
|
31
|
-
if (
|
32
|
+
if (relevantChanges.length === 0) {
|
32
33
|
if (dependencyBumps?.length) {
|
33
34
|
applyAdditionalDependencyBumps({
|
34
35
|
markdownLines,
|
@@ -42,7 +43,7 @@ const defaultChangelogRenderer = async ({ projectGraph, changes, releaseVersion,
|
|
42
43
|
}
|
43
44
|
return markdownLines.join('\n').trim();
|
44
45
|
}
|
45
|
-
const typeGroups = groupBy(
|
46
|
+
const typeGroups = groupBy(relevantChanges, 'type');
|
46
47
|
markdownLines.push('', createVersionTitle(releaseVersion, changelogRenderOptions), '');
|
47
48
|
for (const type of Object.keys(changeTypes)) {
|
48
49
|
const group = typeGroups[type];
|
@@ -75,7 +76,7 @@ const defaultChangelogRenderer = async ({ projectGraph, changes, releaseVersion,
|
|
75
76
|
}
|
76
77
|
else {
|
77
78
|
// project level changelog
|
78
|
-
|
79
|
+
relevantChanges = relevantChanges.filter((c) => c.affectedProjects &&
|
79
80
|
(c.affectedProjects === '*' || c.affectedProjects.includes(project)));
|
80
81
|
// Generating for a named project, but that project has no relevant changes in the current set of commits, exit early
|
81
82
|
if (relevantChanges.length === 0) {
|
@@ -128,7 +129,7 @@ const defaultChangelogRenderer = async ({ projectGraph, changes, releaseVersion,
|
|
128
129
|
}
|
129
130
|
if (changelogRenderOptions.authors) {
|
130
131
|
const _authors = new Map();
|
131
|
-
for (const change of
|
132
|
+
for (const change of relevantChanges) {
|
132
133
|
if (!change.author) {
|
133
134
|
continue;
|
134
135
|
}
|
@@ -1,8 +1,10 @@
|
|
1
|
+
import { ConnectToNxCloudOptions } from '../../nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud';
|
1
2
|
import { NxJsonConfiguration } from '../../config/nx-json';
|
2
3
|
import { NxArgs } from '../../utils/command-line-utils';
|
3
4
|
import { MessageKey } from '../../utils/ab-testing';
|
4
5
|
export declare function onlyDefaultRunnerIsUsed(nxJson: NxJsonConfiguration): boolean;
|
5
6
|
export declare function connectToNxCloudIfExplicitlyAsked(opts: NxArgs): Promise<void>;
|
7
|
+
export declare function connectWorkspaceToCloud(options: ConnectToNxCloudOptions): Promise<string>;
|
6
8
|
export declare function connectToNxCloudCommand(command?: string): Promise<boolean>;
|
7
9
|
export declare function connectExistingRepoToNxCloudPrompt(command?: string, key?: MessageKey): Promise<boolean>;
|
8
10
|
export declare function connectToNxCloudWithPrompt(command: string): Promise<void>;
|
@@ -2,6 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.onlyDefaultRunnerIsUsed = onlyDefaultRunnerIsUsed;
|
4
4
|
exports.connectToNxCloudIfExplicitlyAsked = connectToNxCloudIfExplicitlyAsked;
|
5
|
+
exports.connectWorkspaceToCloud = connectWorkspaceToCloud;
|
5
6
|
exports.connectToNxCloudCommand = connectToNxCloudCommand;
|
6
7
|
exports.connectExistingRepoToNxCloudPrompt = connectExistingRepoToNxCloudPrompt;
|
7
8
|
exports.connectToNxCloudWithPrompt = connectToNxCloudWithPrompt;
|
@@ -16,6 +17,8 @@ const ab_testing_1 = require("../../utils/ab-testing");
|
|
16
17
|
const versions_1 = require("../../utils/versions");
|
17
18
|
const workspace_root_1 = require("../../utils/workspace-root");
|
18
19
|
const chalk = require("chalk");
|
20
|
+
const ora = require("ora");
|
21
|
+
const open = require("open");
|
19
22
|
function onlyDefaultRunnerIsUsed(nxJson) {
|
20
23
|
const defaultRunner = nxJson.tasksRunnerOptions?.default?.runner;
|
21
24
|
if (!defaultRunner) {
|
@@ -43,6 +46,13 @@ async function connectToNxCloudIfExplicitlyAsked(opts) {
|
|
43
46
|
process.exit(0);
|
44
47
|
}
|
45
48
|
}
|
49
|
+
async function connectWorkspaceToCloud(options) {
|
50
|
+
const tree = new tree_1.FsTree(workspace_root_1.workspaceRoot, false, 'connect-to-nx-cloud');
|
51
|
+
const accessToken = await (0, connect_to_nx_cloud_1.connectToNxCloud)(tree, options);
|
52
|
+
tree.lock();
|
53
|
+
(0, tree_1.flushChanges)(workspace_root_1.workspaceRoot, tree.listChanges());
|
54
|
+
return accessToken;
|
55
|
+
}
|
46
56
|
async function connectToNxCloudCommand(command) {
|
47
57
|
const nxJson = (0, configuration_1.readNxJson)();
|
48
58
|
if ((0, nx_cloud_utils_1.isNxCloudUsed)(nxJson)) {
|
@@ -50,7 +60,7 @@ async function connectToNxCloudCommand(command) {
|
|
50
60
|
if (!token) {
|
51
61
|
throw new Error(`Unable to authenticate. Either define accessToken in nx.json or set the NX_CLOUD_ACCESS_TOKEN env variable.`);
|
52
62
|
}
|
53
|
-
const connectCloudUrl = await (0, url_shorten_1.
|
63
|
+
const connectCloudUrl = await (0, url_shorten_1.createNxCloudOnboardingURL)('nx-connect', token);
|
54
64
|
output_1.output.log({
|
55
65
|
title: '✔ This workspace already has Nx Cloud set up',
|
56
66
|
bodyLines: [
|
@@ -62,15 +72,32 @@ async function connectToNxCloudCommand(command) {
|
|
62
72
|
});
|
63
73
|
return false;
|
64
74
|
}
|
65
|
-
const
|
66
|
-
const callback = await (0, connect_to_nx_cloud_1.connectToNxCloud)(tree, {
|
75
|
+
const token = await connectWorkspaceToCloud({
|
67
76
|
installationSource: command ?? 'nx-connect',
|
68
77
|
});
|
69
|
-
|
70
|
-
|
71
|
-
|
78
|
+
const connectCloudUrl = await (0, url_shorten_1.createNxCloudOnboardingURL)('nx-connect', token);
|
79
|
+
try {
|
80
|
+
const cloudConnectSpinner = ora(`Opening Nx Cloud ${connectCloudUrl} in your browser to connect your workspace.`).start();
|
81
|
+
await sleep(2000);
|
82
|
+
await open(connectCloudUrl);
|
83
|
+
cloudConnectSpinner.succeed();
|
84
|
+
}
|
85
|
+
catch (e) {
|
86
|
+
output_1.output.note({
|
87
|
+
title: `Your Nx Cloud workspace is ready.`,
|
88
|
+
bodyLines: [
|
89
|
+
`To claim it, connect it to your Nx Cloud account:`,
|
90
|
+
`- Go to the following URL to connect your workspace to Nx Cloud:`,
|
91
|
+
'',
|
92
|
+
`${connectCloudUrl}`,
|
93
|
+
],
|
94
|
+
});
|
95
|
+
}
|
72
96
|
return true;
|
73
97
|
}
|
98
|
+
function sleep(ms) {
|
99
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
100
|
+
}
|
74
101
|
async function connectExistingRepoToNxCloudPrompt(command = 'init', key = 'setupNxCloud') {
|
75
102
|
const res = await nxCloudPrompt(key).then((value) => value === 'yes');
|
76
103
|
await (0, ab_testing_1.recordStat)({
|
@@ -5,9 +5,10 @@ const package_manager_1 = require("../../utils/package-manager");
|
|
5
5
|
const child_process_1 = require("child_process");
|
6
6
|
const nx_cloud_utils_1 = require("../../utils/nx-cloud-utils");
|
7
7
|
const output_1 = require("../../utils/output");
|
8
|
-
const child_process_2 = require("../../utils/child-process");
|
9
8
|
const nx_json_1 = require("../../config/nx-json");
|
10
9
|
const connect_to_nx_cloud_1 = require("./connect-to-nx-cloud");
|
10
|
+
const connect_to_nx_cloud_2 = require("../../nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud");
|
11
|
+
const url_shorten_1 = require("../../nx-cloud/utilities/url-shorten");
|
11
12
|
async function viewLogs() {
|
12
13
|
const cloudUsed = (0, nx_cloud_utils_1.isNxCloudUsed)((0, nx_json_1.readNxJson)());
|
13
14
|
if (cloudUsed) {
|
@@ -27,9 +28,10 @@ async function viewLogs() {
|
|
27
28
|
output_1.output.log({
|
28
29
|
title: 'Connecting to Nx Cloud',
|
29
30
|
});
|
30
|
-
(0,
|
31
|
-
|
31
|
+
const token = await (0, connect_to_nx_cloud_1.connectWorkspaceToCloud)({
|
32
|
+
installationSource: 'view-logs',
|
32
33
|
});
|
34
|
+
await (0, connect_to_nx_cloud_2.printSuccessMessage)(token, 'view-logs', await (0, url_shorten_1.repoUsesGithub)());
|
33
35
|
}
|
34
36
|
catch (e) {
|
35
37
|
output_1.output.log({
|
@@ -311,6 +311,10 @@ exports.examples = {
|
|
311
311
|
command: 'show projects --projects api-*',
|
312
312
|
description: 'Show all projects with names starting with "api-". The "projects" option is useful to see which projects would be selected by run-many',
|
313
313
|
},
|
314
|
+
{
|
315
|
+
command: 'show projects --projects tag:ui-*',
|
316
|
+
description: 'Show all projects with a tag starting with "ui-". The "projects" option is useful to see which projects would be selected by run-many',
|
317
|
+
},
|
314
318
|
{
|
315
319
|
command: 'show projects --with-target serve',
|
316
320
|
description: 'Show all projects with a serve target',
|
@@ -74,7 +74,7 @@ async function addNxToMonorepo(options) {
|
|
74
74
|
(0, utils_1.runInstall)(repoRoot);
|
75
75
|
if (useNxCloud) {
|
76
76
|
output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
|
77
|
-
(0, utils_1.initCloud)(
|
77
|
+
await (0, utils_1.initCloud)('nx-init-monorepo');
|
78
78
|
}
|
79
79
|
}
|
80
80
|
// scanning package.json files
|
@@ -93,7 +93,7 @@ async function addNxToNest(options, packageJson) {
|
|
93
93
|
(0, utils_1.runInstall)(repoRoot);
|
94
94
|
if (useNxCloud) {
|
95
95
|
output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
|
96
|
-
(0, utils_1.initCloud)(
|
96
|
+
await (0, utils_1.initCloud)('nx-init-nest');
|
97
97
|
}
|
98
98
|
}
|
99
99
|
function addNestPluginToPackageJson(repoRoot) {
|
@@ -67,6 +67,6 @@ async function addNxToNpmRepo(options) {
|
|
67
67
|
(0, utils_1.runInstall)(repoRoot, pmc);
|
68
68
|
if (useNxCloud) {
|
69
69
|
output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
|
70
|
-
(0, utils_1.initCloud)(
|
70
|
+
await (0, utils_1.initCloud)('nx-init-npm-repo');
|
71
71
|
}
|
72
72
|
}
|
@@ -44,7 +44,7 @@ async function addNxToAngularCliRepo(options) {
|
|
44
44
|
await setupWorkspace(cacheableOperations, options.integrated);
|
45
45
|
if (useNxCloud) {
|
46
46
|
output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
|
47
|
-
(0, utils_1.initCloud)(
|
47
|
+
await (0, utils_1.initCloud)('nx-init-angular');
|
48
48
|
}
|
49
49
|
}
|
50
50
|
async function collectCacheableOperations(options) {
|
@@ -85,7 +85,7 @@ async function getLegacyMigrationFunctionIfApplicable(repoRoot, options) {
|
|
85
85
|
(0, child_process_1.execSync)(`${pmc.exec} ${legacyMigrationCommand}`, { stdio: [0, 1, 2] });
|
86
86
|
if (useNxCloud) {
|
87
87
|
output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
|
88
|
-
(0, utils_1.initCloud)(
|
88
|
+
await (0, utils_1.initCloud)('nx-init-angular');
|
89
89
|
}
|
90
90
|
};
|
91
91
|
}
|
@@ -6,7 +6,7 @@ export declare function createNxJsonFile(repoRoot: string, topologicalTargets: s
|
|
6
6
|
export declare function addDepsToPackageJson(repoRoot: string, additionalPackages?: string[]): void;
|
7
7
|
export declare function updateGitIgnore(root: string): void;
|
8
8
|
export declare function runInstall(repoRoot: string, pmc?: PackageManagerCommands): void;
|
9
|
-
export declare function initCloud(
|
9
|
+
export declare function initCloud(installationSource: 'nx-init' | 'nx-init-angular' | 'nx-init-cra' | 'nx-init-monorepo' | 'nx-init-nest' | 'nx-init-npm-repo'): Promise<void>;
|
10
10
|
export declare function addVsCodeRecommendedExtensions(repoRoot: string, extensions: string[]): void;
|
11
11
|
export declare function markRootPackageJsonAsNxProjectLegacy(repoRoot: string, cacheableScripts: string[], pmc: PackageManagerCommands): void;
|
12
12
|
export declare function markPackageJsonAsNxProject(packageJsonPath: string): void;
|
@@ -12,13 +12,15 @@ exports.printFinalMessage = printFinalMessage;
|
|
12
12
|
exports.isMonorepo = isMonorepo;
|
13
13
|
const child_process_1 = require("child_process");
|
14
14
|
const path_1 = require("path");
|
15
|
-
const child_process_2 = require("../../../utils/child-process");
|
16
15
|
const fileutils_1 = require("../../../utils/fileutils");
|
17
16
|
const output_1 = require("../../../utils/output");
|
18
17
|
const package_manager_1 = require("../../../utils/package-manager");
|
19
18
|
const path_2 = require("../../../utils/path");
|
20
19
|
const versions_1 = require("../../../utils/versions");
|
21
20
|
const fs_1 = require("fs");
|
21
|
+
const connect_to_nx_cloud_1 = require("../../../nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud");
|
22
|
+
const url_shorten_1 = require("../../../nx-cloud/utilities/url-shorten");
|
23
|
+
const connect_to_nx_cloud_2 = require("../../connect/connect-to-nx-cloud");
|
22
24
|
function createNxJsonFile(repoRoot, topologicalTargets, cacheableOperations, scriptOutputs) {
|
23
25
|
const nxJsonPath = (0, path_2.joinPathFragments)(repoRoot, 'nx.json');
|
24
26
|
let nxJson = {};
|
@@ -128,11 +130,11 @@ function updateGitIgnore(root) {
|
|
128
130
|
function runInstall(repoRoot, pmc = (0, package_manager_1.getPackageManagerCommand)()) {
|
129
131
|
(0, child_process_1.execSync)(pmc.install, { stdio: [0, 1, 2], cwd: repoRoot });
|
130
132
|
}
|
131
|
-
function initCloud(
|
132
|
-
(0,
|
133
|
-
|
134
|
-
cwd: repoRoot,
|
133
|
+
async function initCloud(installationSource) {
|
134
|
+
const token = await (0, connect_to_nx_cloud_2.connectWorkspaceToCloud)({
|
135
|
+
installationSource,
|
135
136
|
});
|
137
|
+
await (0, connect_to_nx_cloud_1.printSuccessMessage)(token, installationSource, await (0, url_shorten_1.repoUsesGithub)());
|
136
138
|
}
|
137
139
|
function addVsCodeRecommendedExtensions(repoRoot, extensions) {
|
138
140
|
const vsCodeExtensionsPath = (0, path_1.join)(repoRoot, '.vscode/extensions.json');
|
@@ -90,10 +90,7 @@ async function initHandler(options) {
|
|
90
90
|
}
|
91
91
|
if (useNxCloud) {
|
92
92
|
output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
|
93
|
-
(0,
|
94
|
-
stdio: [0, 1, 2],
|
95
|
-
cwd: repoRoot,
|
96
|
-
});
|
93
|
+
await (0, utils_1.initCloud)('nx-init');
|
97
94
|
}
|
98
95
|
(0, utils_1.printFinalMessage)({
|
99
96
|
learnMoreLink,
|
@@ -1,12 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.listHandler = listHandler;
|
4
|
-
const
|
4
|
+
const nx_json_1 = require("../../config/nx-json");
|
5
|
+
const project_graph_1 = require("../../project-graph/project-graph");
|
5
6
|
const output_1 = require("../../utils/output");
|
6
7
|
const plugins_1 = require("../../utils/plugins");
|
7
|
-
const
|
8
|
-
const project_graph_1 = require("../../project-graph/project-graph");
|
9
|
-
const nx_json_1 = require("../../config/nx-json");
|
8
|
+
const workspace_root_1 = require("../../utils/workspace-root");
|
10
9
|
/**
|
11
10
|
* List available plugins or capabilities within a specific plugin
|
12
11
|
*
|
@@ -16,31 +15,28 @@ const nx_json_1 = require("../../config/nx-json");
|
|
16
15
|
*
|
17
16
|
*/
|
18
17
|
async function listHandler(args) {
|
19
|
-
const nxJson = (0, nx_json_1.readNxJson)();
|
20
18
|
const projectGraph = await (0, project_graph_1.createProjectGraphAsync)({ exitOnError: true });
|
21
19
|
const projects = (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(projectGraph);
|
22
20
|
if (args.plugin) {
|
23
21
|
await (0, plugins_1.listPluginCapabilities)(args.plugin, projects.projects);
|
24
22
|
}
|
25
23
|
else {
|
26
|
-
const
|
27
|
-
const localPlugins = await (0,
|
24
|
+
const nxJson = (0, nx_json_1.readNxJson)();
|
25
|
+
const localPlugins = await (0, plugins_1.getLocalWorkspacePlugins)(projects, nxJson);
|
28
26
|
const installedPlugins = await (0, plugins_1.getInstalledPluginsAndCapabilities)(workspace_root_1.workspaceRoot, projects.projects);
|
29
27
|
if (localPlugins.size) {
|
30
|
-
(0,
|
28
|
+
(0, plugins_1.listPlugins)(localPlugins, 'Local workspace plugins:');
|
31
29
|
}
|
32
|
-
(0, plugins_1.
|
33
|
-
(0, plugins_1.
|
30
|
+
(0, plugins_1.listPlugins)(installedPlugins, 'Installed plugins:');
|
31
|
+
(0, plugins_1.listAlsoAvailableCorePlugins)(installedPlugins);
|
34
32
|
output_1.output.note({
|
35
33
|
title: 'Community Plugins',
|
36
34
|
bodyLines: [
|
37
35
|
'Looking for a technology / framework not listed above?',
|
38
36
|
'There are many excellent plugins maintained by the Nx community.',
|
39
|
-
'Search for the one you need here: https://nx.dev/
|
37
|
+
'Search for the one you need here: https://nx.dev/plugin-registry.',
|
40
38
|
],
|
41
39
|
});
|
42
|
-
output_1.output.note({
|
43
|
-
title: `Use "nx list [plugin]" to find out more`,
|
44
|
-
});
|
40
|
+
output_1.output.note({ title: `Use "nx list [plugin]" to find out more` });
|
45
41
|
}
|
46
42
|
}
|
@@ -30,6 +30,7 @@ const child_process_2 = require("../../utils/child-process");
|
|
30
30
|
const client_1 = require("../../daemon/client/client");
|
31
31
|
const nx_cloud_utils_1 = require("../../utils/nx-cloud-utils");
|
32
32
|
const project_graph_1 = require("../../project-graph/project-graph");
|
33
|
+
const format_changed_files_with_prettier_if_available_1 = require("../../generators/internal-utils/format-changed-files-with-prettier-if-available");
|
33
34
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
34
35
|
function normalizeVersion(version) {
|
35
36
|
const [semver, ...prereleaseTagParts] = version.split('-');
|
@@ -669,10 +670,10 @@ function readPackageMigrationConfig(packageName, dir) {
|
|
669
670
|
};
|
670
671
|
}
|
671
672
|
}
|
672
|
-
function createMigrationsFile(root, migrations) {
|
673
|
-
|
673
|
+
async function createMigrationsFile(root, migrations) {
|
674
|
+
await writeFormattedJsonFile((0, path_1.join)(root, 'migrations.json'), { migrations });
|
674
675
|
}
|
675
|
-
function updatePackageJson(root, updatedPackages) {
|
676
|
+
async function updatePackageJson(root, updatedPackages) {
|
676
677
|
const packageJsonPath = (0, path_1.join)(root, 'package.json');
|
677
678
|
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
678
679
|
return;
|
@@ -694,7 +695,7 @@ function updatePackageJson(root, updatedPackages) {
|
|
694
695
|
json[dependencyType][p] = updatedPackages[p].version;
|
695
696
|
}
|
696
697
|
});
|
697
|
-
|
698
|
+
await writeFormattedJsonFile(packageJsonPath, json, {
|
698
699
|
appendNewLine: parseOptions.endsWithNewline,
|
699
700
|
});
|
700
701
|
}
|
@@ -719,7 +720,7 @@ async function updateInstallationDetails(root, updatedPackages) {
|
|
719
720
|
}
|
720
721
|
}
|
721
722
|
}
|
722
|
-
|
723
|
+
await writeFormattedJsonFile(nxJsonPath, nxJson, {
|
723
724
|
appendNewLine: parseOptions.endsWithNewline,
|
724
725
|
});
|
725
726
|
}
|
@@ -765,10 +766,10 @@ async function generateMigrationsJsonAndUpdatePackageJson(root, opts) {
|
|
765
766
|
excludeAppliedMigrations: opts.excludeAppliedMigrations,
|
766
767
|
});
|
767
768
|
const { migrations, packageUpdates, minVersionWithSkippedUpdates } = await migrator.migrate(opts.targetPackage, opts.targetVersion);
|
768
|
-
updatePackageJson(root, packageUpdates);
|
769
|
+
await updatePackageJson(root, packageUpdates);
|
769
770
|
await updateInstallationDetails(root, packageUpdates);
|
770
771
|
if (migrations.length > 0) {
|
771
|
-
createMigrationsFile(root, [
|
772
|
+
await createMigrationsFile(root, [
|
772
773
|
...addSplitConfigurationMigrationIfAvailable(from, packageUpdates),
|
773
774
|
...migrations,
|
774
775
|
]);
|
@@ -835,6 +836,17 @@ async function generateMigrationsJsonAndUpdatePackageJson(root, opts) {
|
|
835
836
|
throw e;
|
836
837
|
}
|
837
838
|
}
|
839
|
+
async function writeFormattedJsonFile(filePath, content, options) {
|
840
|
+
const formattedContent = await (0, format_changed_files_with_prettier_if_available_1.formatFilesWithPrettierIfAvailable)([{ path: filePath, content: JSON.stringify(content) }], workspace_root_1.workspaceRoot, { silent: true });
|
841
|
+
if (formattedContent.has(filePath)) {
|
842
|
+
(0, fs_1.writeFileSync)(filePath, formattedContent.get(filePath), {
|
843
|
+
encoding: 'utf-8',
|
844
|
+
});
|
845
|
+
}
|
846
|
+
else {
|
847
|
+
(0, fileutils_1.writeJsonFile)(filePath, content, options);
|
848
|
+
}
|
849
|
+
}
|
838
850
|
function addSplitConfigurationMigrationIfAvailable(from, packageJson) {
|
839
851
|
if (!packageJson['@nrwl/workspace'])
|
840
852
|
return [];
|
@@ -296,6 +296,7 @@ async function releaseChangelog(args) {
|
|
296
296
|
let fromRef = args.from ||
|
297
297
|
(await (0, git_1.getLatestGitTagForPattern)(releaseGroup.releaseTagPattern, {
|
298
298
|
projectName: project.name,
|
299
|
+
releaseGroupName: releaseGroup.name,
|
299
300
|
}))?.tag;
|
300
301
|
if (!fromRef && useAutomaticFromRef) {
|
301
302
|
const firstCommit = await (0, git_1.getFirstGitCommit)();
|
@@ -5,6 +5,7 @@ const yargs_1 = require("yargs");
|
|
5
5
|
const nx_json_1 = require("../../config/nx-json");
|
6
6
|
const logger_1 = require("../../utils/logger");
|
7
7
|
const shared_options_1 = require("../yargs-utils/shared-options");
|
8
|
+
const command_line_utils_1 = require("../../utils/command-line-utils");
|
8
9
|
exports.yargsReleaseCommand = {
|
9
10
|
command: 'release',
|
10
11
|
describe: 'Orchestrate versioning and publishing of applications and libraries',
|
@@ -223,27 +224,10 @@ const planCommand = {
|
|
223
224
|
},
|
224
225
|
};
|
225
226
|
function coerceParallelOption(args) {
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
};
|
231
|
-
}
|
232
|
-
else if (args['parallel'] === 'true' ||
|
233
|
-
args['parallel'] === true ||
|
234
|
-
args['parallel'] === '') {
|
235
|
-
return {
|
236
|
-
...args,
|
237
|
-
parallel: Number(args['maxParallel'] || args['max-parallel'] || 3),
|
238
|
-
};
|
239
|
-
}
|
240
|
-
else if (args['parallel'] !== undefined) {
|
241
|
-
return {
|
242
|
-
...args,
|
243
|
-
parallel: Number(args['parallel']),
|
244
|
-
};
|
245
|
-
}
|
246
|
-
return args;
|
227
|
+
return {
|
228
|
+
...args,
|
229
|
+
parallel: (0, command_line_utils_1.readParallelFromArgsAndEnv)(args),
|
230
|
+
};
|
247
231
|
}
|
248
232
|
function withGitCommitAndGitTagOptions(yargs) {
|
249
233
|
return yargs
|
@@ -73,6 +73,10 @@ async function createNxReleaseConfig(projectGraph, projectFileMap, userConfig =
|
|
73
73
|
tag: true,
|
74
74
|
};
|
75
75
|
const defaultFixedReleaseTagPattern = 'v{version}';
|
76
|
+
/**
|
77
|
+
* TODO: in v20, make it so that this pattern is used by default when any custom groups are used
|
78
|
+
*/
|
79
|
+
const defaultFixedGroupReleaseTagPattern = '{releaseGroupName}-v{version}';
|
76
80
|
const defaultIndependentReleaseTagPattern = '{projectName}@{version}';
|
77
81
|
const workspaceProjectsRelationship = userConfig.projectsRelationship || 'fixed';
|
78
82
|
const defaultGeneratorOptions = {};
|
@@ -14,6 +14,7 @@ const params_1 = require("../../utils/params");
|
|
14
14
|
const config_1 = require("./config/config");
|
15
15
|
const filter_release_groups_1 = require("./config/filter-release-groups");
|
16
16
|
const version_plans_1 = require("./config/version-plans");
|
17
|
+
const generate_version_plan_content_1 = require("./utils/generate-version-plan-content");
|
17
18
|
const git_1 = require("./utils/git");
|
18
19
|
const print_changes_1 = require("./utils/print-changes");
|
19
20
|
const releasePlanCLIHandler = (args) => (0, params_1.handleErrors)(args.verbose, () => releasePlan(args));
|
@@ -94,7 +95,7 @@ async function releasePlan(args) {
|
|
94
95
|
return 0;
|
95
96
|
}
|
96
97
|
const versionPlanMessage = args.message || (await promptForMessage());
|
97
|
-
const versionPlanFileContent =
|
98
|
+
const versionPlanFileContent = (0, generate_version_plan_content_1.generateVersionPlanContent)(versionPlanBumps, versionPlanMessage);
|
98
99
|
const versionPlanFileName = `version-plan-${new Date().getTime()}.md`;
|
99
100
|
if (args.dryRun) {
|
100
101
|
output_1.output.logSingleLine(`Would create version plan file "${versionPlanFileName}", but --dry-run was set.`);
|
@@ -171,14 +172,3 @@ async function _promptForMessage() {
|
|
171
172
|
process.exit(0);
|
172
173
|
}
|
173
174
|
}
|
174
|
-
function getVersionPlanFileContent(bumps, message) {
|
175
|
-
return `---
|
176
|
-
${Object.entries(bumps)
|
177
|
-
.filter(([_, version]) => version !== 'none')
|
178
|
-
.map(([projectOrGroup, version]) => `${projectOrGroup}: ${version}`)
|
179
|
-
.join('\n')}
|
180
|
-
---
|
181
|
-
|
182
|
-
${message}
|
183
|
-
`;
|
184
|
-
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare function generateVersionPlanContent(bumps: Record<string, string>, message: string): string;
|
@@ -0,0 +1,21 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.generateVersionPlanContent = generateVersionPlanContent;
|
4
|
+
function generateVersionPlanContent(bumps, message) {
|
5
|
+
return `---
|
6
|
+
${Object.entries(bumps)
|
7
|
+
.filter(([_, version]) => version !== 'none')
|
8
|
+
.map(([projectOrGroup, version]) => {
|
9
|
+
let key = projectOrGroup;
|
10
|
+
// frontmatter parsing will blow up if we don't wrap @org/package style project names in quotes
|
11
|
+
if (key.startsWith('@')) {
|
12
|
+
key = `'${key}'`;
|
13
|
+
}
|
14
|
+
return `${key}: ${version}`;
|
15
|
+
})
|
16
|
+
.join('\n')}
|
17
|
+
---
|
18
|
+
|
19
|
+
${message}
|
20
|
+
`;
|
21
|
+
}
|