nx 19.6.0-canary.20240730-acd9bb7 → 19.6.0-canary.20240801-2111841

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. package/package.json +12 -12
  2. package/schemas/project-schema.json +40 -6
  3. package/src/command-line/connect/connect-to-nx-cloud.d.ts +2 -0
  4. package/src/command-line/connect/connect-to-nx-cloud.js +33 -6
  5. package/src/command-line/connect/view-logs.js +5 -3
  6. package/src/command-line/init/implementation/add-nx-to-monorepo.js +1 -1
  7. package/src/command-line/init/implementation/add-nx-to-nest.js +1 -1
  8. package/src/command-line/init/implementation/add-nx-to-npm-repo.js +1 -1
  9. package/src/command-line/init/implementation/angular/index.js +1 -1
  10. package/src/command-line/init/implementation/angular/legacy-angular-versions.js +1 -1
  11. package/src/command-line/init/implementation/utils.d.ts +1 -1
  12. package/src/command-line/init/implementation/utils.js +7 -5
  13. package/src/command-line/init/init-v2.js +1 -4
  14. package/src/command-line/migrate/migrate.js +14 -6
  15. package/src/command-line/release/plan.js +2 -12
  16. package/src/command-line/release/utils/generate-version-plan-content.d.ts +1 -0
  17. package/src/command-line/release/utils/generate-version-plan-content.js +21 -0
  18. package/src/command-line/release/utils/shared.js +7 -5
  19. package/src/command-line/release/version.js +4 -2
  20. package/src/core/graph/main.js +1 -1
  21. package/src/native/nx.wasm32-wasi.wasm +0 -0
  22. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.d.ts +3 -2
  23. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +18 -57
  24. package/src/nx-cloud/utilities/url-shorten.d.ts +1 -1
  25. package/src/nx-cloud/utilities/url-shorten.js +5 -7
  26. package/src/project-graph/plugins/internal-api.js +4 -1
  27. package/src/tasks-runner/task-graph-utils.js +1 -1
  28. 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.6.0-canary.20240730-acd9bb7",
3
+ "version": "19.6.0-canary.20240801-2111841",
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": {
@@ -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.6.0-canary.20240730-acd9bb7"
74
+ "@nrwl/tao": "19.6.0-canary.20240801-2111841"
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.6.0-canary.20240730-acd9bb7",
90
- "@nx/nx-darwin-arm64": "19.6.0-canary.20240730-acd9bb7",
91
- "@nx/nx-linux-x64-gnu": "19.6.0-canary.20240730-acd9bb7",
92
- "@nx/nx-linux-x64-musl": "19.6.0-canary.20240730-acd9bb7",
93
- "@nx/nx-win32-x64-msvc": "19.6.0-canary.20240730-acd9bb7",
94
- "@nx/nx-linux-arm64-gnu": "19.6.0-canary.20240730-acd9bb7",
95
- "@nx/nx-linux-arm64-musl": "19.6.0-canary.20240730-acd9bb7",
96
- "@nx/nx-linux-arm-gnueabihf": "19.6.0-canary.20240730-acd9bb7",
97
- "@nx/nx-win32-arm64-msvc": "19.6.0-canary.20240730-acd9bb7",
98
- "@nx/nx-freebsd-x64": "19.6.0-canary.20240730-acd9bb7"
89
+ "@nx/nx-darwin-x64": "19.6.0-canary.20240801-2111841",
90
+ "@nx/nx-darwin-arm64": "19.6.0-canary.20240801-2111841",
91
+ "@nx/nx-linux-x64-gnu": "19.6.0-canary.20240801-2111841",
92
+ "@nx/nx-linux-x64-musl": "19.6.0-canary.20240801-2111841",
93
+ "@nx/nx-win32-x64-msvc": "19.6.0-canary.20240801-2111841",
94
+ "@nx/nx-linux-arm64-gnu": "19.6.0-canary.20240801-2111841",
95
+ "@nx/nx-linux-arm64-musl": "19.6.0-canary.20240801-2111841",
96
+ "@nx/nx-linux-arm-gnueabihf": "19.6.0-canary.20240801-2111841",
97
+ "@nx/nx-win32-arm64-msvc": "19.6.0-canary.20240801-2111841",
98
+ "@nx/nx-freebsd-x64": "19.6.0-canary.20240801-2111841"
99
99
  },
100
100
  "nx-migrations": {
101
101
  "migrations": "./migrations.json",
@@ -115,8 +115,12 @@
115
115
  "required": ["target"],
116
116
  "not": {
117
117
  "anyOf": [
118
- { "required": ["projects"] },
119
- { "required": ["dependencies"] }
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": { "type": "string" }
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
- { "required": ["projects"] },
233
- { "required": ["dependencies"] }
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": { "type": "string" },
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.shortenedCloudUrl)('nx-connect', token);
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 tree = new tree_1.FsTree(workspace_root_1.workspaceRoot, false, 'connect-to-nx-cloud');
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
- tree.lock();
70
- (0, tree_1.flushChanges)(workspace_root_1.workspaceRoot, tree.listChanges());
71
- await callback();
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, child_process_2.runNxSync)(`g nx:connect-to-nx-cloud --installation-source=view-logs --quiet --no-interactive`, {
31
- stdio: 'ignore',
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({
@@ -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)(repoRoot, 'nx-init-monorepo');
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)(repoRoot, 'nx-init-nest');
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)(repoRoot, 'nx-init-npm-repo');
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)(repoRoot, 'nx-init-angular');
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)(repoRoot, 'nx-init-angular');
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(repoRoot: string, installationSource: 'nx-init-angular' | 'nx-init-cra' | 'nx-init-monorepo' | 'nx-init-nest' | 'nx-init-npm-repo'): void;
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(repoRoot, installationSource) {
132
- (0, child_process_2.runNxSync)(`g nx:connect-to-nx-cloud --installationSource=${installationSource} --quiet --no-interactive`, {
133
- stdio: [0, 1, 2],
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, child_process_2.execSync)(`${pmc.exec} nx g nx:connect-to-nx-cloud --installationSource=nx-init --quiet --hideFormatLogs --no-interactive`, {
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,
@@ -910,31 +910,39 @@ async function executeMigrations(root, migrations, isVerbose, shouldCreateCommit
910
910
  ? -1
911
911
  : 1;
912
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`);
913
916
  for (const m of sortedMigrations) {
917
+ logger_1.logger.info(`Running migration ${m.package}: ${m.name}`);
914
918
  try {
915
919
  const { collection, collectionPath } = readMigrationCollection(m.package, root);
916
920
  if (!isAngularMigration(collection, collectionPath, m.name)) {
917
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`);
918
924
  if (changes.length < 1) {
925
+ logger_1.logger.info(`No changes were made\n`);
919
926
  migrationsWithNoChanges.push(m);
920
- // If no changes are made, continue on without printing anything
921
927
  continue;
922
928
  }
923
- logger_1.logger.info(`Ran ${m.name} from ${m.package}`);
924
- logger_1.logger.info(` ${m.description}\n`);
929
+ logger_1.logger.info('Changes:');
925
930
  (0, tree_1.printChanges)(changes, ' ');
931
+ logger_1.logger.info('');
926
932
  }
927
933
  else {
928
934
  const ngCliAdapter = await getNgCompatLayer();
929
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`);
930
938
  if (!madeChanges) {
939
+ logger_1.logger.info(`No changes were made\n`);
931
940
  migrationsWithNoChanges.push(m);
932
- // If no changes are made, continue on without printing anything
933
941
  continue;
934
942
  }
935
- logger_1.logger.info(`Ran ${m.name} from ${m.package}`);
936
- logger_1.logger.info(` ${m.description}\n`);
943
+ logger_1.logger.info('Changes:');
937
944
  loggingQueue.forEach((log) => logger_1.logger.info(' ' + log));
945
+ logger_1.logger.info('');
938
946
  }
939
947
  if (shouldCreateCommits) {
940
948
  installDepsIfChanged();
@@ -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 = getVersionPlanFileContent(versionPlanBumps, versionPlanMessage);
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
- const releaseVersion = new ReleaseVersion({
132
- version: projectVersionData.newVersion,
133
- releaseTagPattern: releaseGroup.releaseTagPattern,
134
- });
135
- commitMessageValues.push(`- release-group: ${releaseGroup.name} ${releaseVersion.rawVersion}`);
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
  }
@@ -140,8 +140,9 @@ async function releaseVersion(args) {
140
140
  ...tree.listChanges().map((f) => f.path),
141
141
  ...additionalChangedFiles,
142
142
  ];
143
+ const deletedFiles = Array.from(additionalDeletedFiles);
143
144
  // No further actions are necessary in this scenario (e.g. if conventional commits detected no changes)
144
- if (!changedFiles.length) {
145
+ if (!changedFiles.length && !deletedFiles.length) {
145
146
  return {
146
147
  // An overall workspace version cannot be relevant when filtering to independent projects
147
148
  workspaceVersion: undefined,
@@ -151,7 +152,7 @@ async function releaseVersion(args) {
151
152
  if (args.gitCommit ?? nxReleaseConfig.version.git.commit) {
152
153
  await (0, shared_1.commitChanges)({
153
154
  changedFiles,
154
- deletedFiles: Array.from(additionalDeletedFiles),
155
+ deletedFiles,
155
156
  isDryRun: !!args.dryRun,
156
157
  isVerbose: !!args.verbose,
157
158
  gitCommitMessages: (0, shared_1.createCommitMessageValues)(releaseGroups, releaseGroupToFilteredProjects, versionData, commitMessage),
@@ -162,6 +163,7 @@ async function releaseVersion(args) {
162
163
  output_1.output.logSingleLine(`Staging changed files with git`);
163
164
  await (0, git_1.gitAdd)({
164
165
  changedFiles,
166
+ deletedFiles,
165
167
  dryRun: args.dryRun,
166
168
  verbose: args.verbose,
167
169
  });