nx 19.5.3 → 19.5.5
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +13 -13
- package/release/changelog-renderer/index.js +5 -4
- package/schemas/project-schema.json +40 -6
- 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/migrate/migrate.js +33 -13
- package/src/command-line/release/changelog.js +1 -0
- 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/core/graph/main.js +1 -1
- 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/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 +18 -57
- package/src/nx-cloud/utilities/url-shorten.d.ts +1 -1
- package/src/nx-cloud/utilities/url-shorten.js +5 -7
- package/src/project-graph/plugins/internal-api.js +4 -1
- package/src/tasks-runner/task-env.js +3 -2
- package/src/tasks-runner/task-graph-utils.js +1 -1
- package/src/utils/git-utils.js +3 -1
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "nx",
|
3
|
-
"version": "19.5.
|
3
|
+
"version": "19.5.5",
|
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.5"
|
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.5",
|
90
|
+
"@nx/nx-darwin-arm64": "19.5.5",
|
91
|
+
"@nx/nx-linux-x64-gnu": "19.5.5",
|
92
|
+
"@nx/nx-linux-x64-musl": "19.5.5",
|
93
|
+
"@nx/nx-win32-x64-msvc": "19.5.5",
|
94
|
+
"@nx/nx-linux-arm64-gnu": "19.5.5",
|
95
|
+
"@nx/nx-linux-arm64-musl": "19.5.5",
|
96
|
+
"@nx/nx-linux-arm-gnueabihf": "19.5.5",
|
97
|
+
"@nx/nx-win32-arm64-msvc": "19.5.5",
|
98
|
+
"@nx/nx-freebsd-x64": "19.5.5"
|
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
|
}
|
@@ -115,8 +115,12 @@
|
|
115
115
|
"required": ["target"],
|
116
116
|
"not": {
|
117
117
|
"anyOf": [
|
118
|
-
{
|
119
|
-
|
118
|
+
{
|
119
|
+
"required": ["projects"]
|
120
|
+
},
|
121
|
+
{
|
122
|
+
"required": ["dependencies"]
|
123
|
+
}
|
120
124
|
]
|
121
125
|
}
|
122
126
|
}
|
@@ -138,6 +142,17 @@
|
|
138
142
|
"type": "boolean",
|
139
143
|
"default": true,
|
140
144
|
"description": "Whether this target can be run in parallel with other tasks"
|
145
|
+
},
|
146
|
+
"metadata": {
|
147
|
+
"type": "object",
|
148
|
+
"description": "Metadata about the target",
|
149
|
+
"properties": {
|
150
|
+
"description": {
|
151
|
+
"type": "string",
|
152
|
+
"description": "A description of the target"
|
153
|
+
}
|
154
|
+
},
|
155
|
+
"additionalProperties": true
|
141
156
|
}
|
142
157
|
}
|
143
158
|
}
|
@@ -154,6 +169,17 @@
|
|
154
169
|
"type": "string"
|
155
170
|
}
|
156
171
|
},
|
172
|
+
"metadata": {
|
173
|
+
"type": "object",
|
174
|
+
"description": "Metadata about the project.",
|
175
|
+
"properties": {
|
176
|
+
"description": {
|
177
|
+
"type": "string",
|
178
|
+
"description": "A description of the project."
|
179
|
+
}
|
180
|
+
},
|
181
|
+
"additionalProperties": true
|
182
|
+
},
|
157
183
|
"release": {
|
158
184
|
"type": "object",
|
159
185
|
"description": "Configuration for the nx release commands.",
|
@@ -205,7 +231,9 @@
|
|
205
231
|
{
|
206
232
|
"type": "array",
|
207
233
|
"description": "The projects that the targets belong to.",
|
208
|
-
"items": {
|
234
|
+
"items": {
|
235
|
+
"type": "string"
|
236
|
+
}
|
209
237
|
}
|
210
238
|
]
|
211
239
|
},
|
@@ -229,8 +257,12 @@
|
|
229
257
|
"required": ["input"],
|
230
258
|
"not": {
|
231
259
|
"anyOf": [
|
232
|
-
{
|
233
|
-
|
260
|
+
{
|
261
|
+
"required": ["projects"]
|
262
|
+
},
|
263
|
+
{
|
264
|
+
"required": ["dependencies"]
|
265
|
+
}
|
234
266
|
]
|
235
267
|
}
|
236
268
|
}
|
@@ -262,7 +294,9 @@
|
|
262
294
|
"properties": {
|
263
295
|
"externalDependencies": {
|
264
296
|
"type": "array",
|
265
|
-
"items": {
|
297
|
+
"items": {
|
298
|
+
"type": "string"
|
299
|
+
},
|
266
300
|
"description": "The list of external dependencies that our target depends on for `nx:run-commands` and community plugins."
|
267
301
|
}
|
268
302
|
},
|
@@ -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,
|
@@ -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 [];
|
@@ -898,31 +910,39 @@ async function executeMigrations(root, migrations, isVerbose, shouldCreateCommit
|
|
898
910
|
? -1
|
899
911
|
: 1;
|
900
912
|
});
|
913
|
+
logger_1.logger.info(`Running the following migrations:`);
|
914
|
+
sortedMigrations.forEach((m) => logger_1.logger.info(`- ${m.package}: ${m.name} (${m.description})`));
|
915
|
+
logger_1.logger.info(`---------------------------------------------------------\n`);
|
901
916
|
for (const m of sortedMigrations) {
|
917
|
+
logger_1.logger.info(`Running migration ${m.package}: ${m.name}`);
|
902
918
|
try {
|
903
919
|
const { collection, collectionPath } = readMigrationCollection(m.package, root);
|
904
920
|
if (!isAngularMigration(collection, collectionPath, m.name)) {
|
905
921
|
const changes = await runNxMigration(root, collectionPath, collection, m.name);
|
922
|
+
logger_1.logger.info(`Ran ${m.name} from ${m.package}`);
|
923
|
+
logger_1.logger.info(` ${m.description}\n`);
|
906
924
|
if (changes.length < 1) {
|
925
|
+
logger_1.logger.info(`No changes were made\n`);
|
907
926
|
migrationsWithNoChanges.push(m);
|
908
|
-
// If no changes are made, continue on without printing anything
|
909
927
|
continue;
|
910
928
|
}
|
911
|
-
logger_1.logger.info(
|
912
|
-
logger_1.logger.info(` ${m.description}\n`);
|
929
|
+
logger_1.logger.info('Changes:');
|
913
930
|
(0, tree_1.printChanges)(changes, ' ');
|
931
|
+
logger_1.logger.info('');
|
914
932
|
}
|
915
933
|
else {
|
916
934
|
const ngCliAdapter = await getNgCompatLayer();
|
917
935
|
const { madeChanges, loggingQueue } = await ngCliAdapter.runMigration(root, m.package, m.name, (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(await (0, project_graph_1.createProjectGraphAsync)()).projects, isVerbose);
|
936
|
+
logger_1.logger.info(`Ran ${m.name} from ${m.package}`);
|
937
|
+
logger_1.logger.info(` ${m.description}\n`);
|
918
938
|
if (!madeChanges) {
|
939
|
+
logger_1.logger.info(`No changes were made\n`);
|
919
940
|
migrationsWithNoChanges.push(m);
|
920
|
-
// If no changes are made, continue on without printing anything
|
921
941
|
continue;
|
922
942
|
}
|
923
|
-
logger_1.logger.info(
|
924
|
-
logger_1.logger.info(` ${m.description}\n`);
|
943
|
+
logger_1.logger.info('Changes:');
|
925
944
|
loggingQueue.forEach((log) => logger_1.logger.info(' ' + log));
|
945
|
+
logger_1.logger.info('');
|
926
946
|
}
|
927
947
|
if (shouldCreateCommits) {
|
928
948
|
installDepsIfChanged();
|
@@ -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)();
|
@@ -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
|
+
}
|
@@ -128,11 +128,13 @@ function createCommitMessageValues(releaseGroups, releaseGroupToFilteredProjects
|
|
128
128
|
}
|
129
129
|
// One entry for the whole group for fixed groups
|
130
130
|
const projectVersionData = versionData[releaseGroupProjectNames[0]]; // all at the same version, so we can just pick the first one
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
131
|
+
if (projectVersionData.newVersion !== null) {
|
132
|
+
const releaseVersion = new ReleaseVersion({
|
133
|
+
version: projectVersionData.newVersion,
|
134
|
+
releaseTagPattern: releaseGroup.releaseTagPattern,
|
135
|
+
});
|
136
|
+
commitMessageValues.push(`- release-group: ${releaseGroup.name} ${releaseVersion.rawVersion}`);
|
137
|
+
}
|
136
138
|
}
|
137
139
|
return commitMessageValues;
|
138
140
|
}
|
@@ -169,6 +171,7 @@ function createGitTagValues(releaseGroups, releaseGroupToFilteredProjects, versi
|
|
169
171
|
if (projectVersionData.newVersion !== null) {
|
170
172
|
tags.push((0, utils_1.interpolate)(releaseGroup.releaseTagPattern, {
|
171
173
|
version: projectVersionData.newVersion,
|
174
|
+
releaseGroupName: releaseGroup.name,
|
172
175
|
}));
|
173
176
|
}
|
174
177
|
}
|