nx 20.7.2 → 20.8.0-beta.1
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/.eslintrc.json +3 -1
- package/package.json +11 -11
- package/release/index.d.ts +1 -1
- package/release/index.js +2 -1
- package/schemas/nx-schema.json +133 -33
- package/src/command-line/release/changelog.js +15 -10
- package/src/command-line/release/command-object.d.ts +1 -0
- package/src/command-line/release/command-object.js +4 -0
- package/src/command-line/release/config/config.d.ts +8 -7
- package/src/command-line/release/config/config.js +122 -42
- package/src/command-line/release/config/use-legacy-versioning.d.ts +2 -0
- package/src/command-line/release/config/use-legacy-versioning.js +9 -0
- package/src/command-line/release/index.d.ts +4 -0
- package/src/command-line/release/index.js +6 -1
- package/src/command-line/release/plan-check.js +6 -3
- package/src/command-line/release/plan.js +7 -3
- package/src/command-line/release/publish.js +5 -3
- package/src/command-line/release/release.js +8 -3
- package/src/command-line/release/utils/batch-projects-by-generator-config.js +6 -3
- package/src/command-line/release/utils/git.d.ts +2 -1
- package/src/command-line/release/utils/git.js +10 -2
- package/src/command-line/release/utils/github.js +3 -1
- package/src/command-line/release/utils/resolve-semver-specifier.d.ts +2 -1
- package/src/command-line/release/utils/resolve-semver-specifier.js +2 -1
- package/src/command-line/release/utils/semver.d.ts +8 -0
- package/src/command-line/release/utils/semver.js +8 -0
- package/src/command-line/release/utils/shared-legacy.d.ts +25 -0
- package/src/command-line/release/utils/shared-legacy.js +2 -0
- package/src/command-line/release/utils/shared.d.ts +11 -17
- package/src/command-line/release/version/derive-specifier-from-conventional-commits.d.ts +7 -0
- package/src/command-line/release/version/derive-specifier-from-conventional-commits.js +47 -0
- package/src/command-line/release/version/deriver-specifier-from-version-plans.d.ts +8 -0
- package/src/command-line/release/version/deriver-specifier-from-version-plans.js +59 -0
- package/src/command-line/release/version/project-logger.d.ts +8 -0
- package/src/command-line/release/version/project-logger.js +45 -0
- package/src/command-line/release/version/release-group-processor.d.ts +251 -0
- package/src/command-line/release/version/release-group-processor.js +1040 -0
- package/src/command-line/release/version/resolve-current-version.d.ts +32 -0
- package/src/command-line/release/version/resolve-current-version.js +241 -0
- package/src/command-line/release/version/test-utils.d.ts +95 -0
- package/src/command-line/release/version/test-utils.js +416 -0
- package/src/command-line/release/version/topological-sort.d.ts +9 -0
- package/src/command-line/release/version/topological-sort.js +41 -0
- package/src/command-line/release/version/version-actions.d.ts +170 -0
- package/src/command-line/release/version/version-actions.js +183 -0
- package/src/command-line/release/version-legacy.d.ts +46 -0
- package/src/command-line/release/version-legacy.js +453 -0
- package/src/command-line/release/version.d.ts +0 -40
- package/src/command-line/release/version.js +80 -262
- package/src/config/nx-json.d.ts +110 -12
- package/src/config/workspace-json-project-json.d.ts +2 -2
- package/src/core/graph/main.js +1 -1
- package/src/core/graph/styles.css +1 -1
- package/src/native/index.d.ts +6 -0
- package/src/native/native-bindings.js +1 -0
- package/src/native/nx.wasi-browser.js +7 -7
- package/src/native/nx.wasm32-wasi.wasm +0 -0
- package/src/plugins/js/lock-file/utils/package-json.d.ts +1 -1
- package/src/plugins/js/lock-file/utils/package-json.js +2 -1
- package/src/plugins/js/lock-file/yarn-parser.js +75 -29
- package/src/plugins/js/project-graph/build-dependencies/target-project-locator.d.ts +10 -1
- package/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +59 -6
- package/src/project-graph/error-types.js +28 -1
- package/src/project-graph/utils/project-configuration-utils.js +14 -2
- package/src/tasks-runner/cache.d.ts +1 -0
- package/src/tasks-runner/cache.js +11 -0
- package/src/utils/handle-errors.js +15 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.defaultCreateReleaseProvider = exports.IMPLICIT_DEFAULT_RELEASE_GROUP = void 0;
|
3
|
+
exports.defaultCreateReleaseProvider = exports.DEFAULT_VERSION_ACTIONS_PATH = exports.IMPLICIT_DEFAULT_RELEASE_GROUP = void 0;
|
4
4
|
exports.createNxReleaseConfig = createNxReleaseConfig;
|
5
5
|
exports.handleNxReleaseConfigError = handleNxReleaseConfigError;
|
6
6
|
/**
|
@@ -21,12 +21,14 @@ const node_url_1 = require("node:url");
|
|
21
21
|
const fileutils_1 = require("../../../utils/fileutils");
|
22
22
|
const find_matching_projects_1 = require("../../../utils/find-matching-projects");
|
23
23
|
const output_1 = require("../../../utils/output");
|
24
|
-
const workspace_root_1 = require("../../../utils/workspace-root");
|
25
24
|
const path_1 = require("../../../utils/path");
|
25
|
+
const workspace_root_1 = require("../../../utils/workspace-root");
|
26
26
|
const resolve_changelog_renderer_1 = require("../utils/resolve-changelog-renderer");
|
27
27
|
const resolve_nx_json_error_message_1 = require("../utils/resolve-nx-json-error-message");
|
28
28
|
const conventional_commits_1 = require("./conventional-commits");
|
29
|
+
const use_legacy_versioning_1 = require("./use-legacy-versioning");
|
29
30
|
exports.IMPLICIT_DEFAULT_RELEASE_GROUP = '__default__';
|
31
|
+
exports.DEFAULT_VERSION_ACTIONS_PATH = '@nx/js/src/release/version-actions';
|
30
32
|
// Apply default configuration to any optional user configuration and handle known errors
|
31
33
|
async function createNxReleaseConfig(projectGraph, projectFileMap, userConfig = {}) {
|
32
34
|
if (userConfig.projects && userConfig.groups) {
|
@@ -50,12 +52,13 @@ async function createNxReleaseConfig(projectGraph, projectFileMap, userConfig =
|
|
50
52
|
if (hasInvalidConventionalCommitsConfig(userConfig)) {
|
51
53
|
return {
|
52
54
|
error: {
|
53
|
-
code: '
|
55
|
+
code: 'CONVENTIONAL_COMMITS_SHORTHAND_MIXED_WITH_OVERLAPPING_OPTIONS',
|
54
56
|
data: {},
|
55
57
|
},
|
56
58
|
nxReleaseConfig: null,
|
57
59
|
};
|
58
60
|
}
|
61
|
+
const USE_LEGACY_VERSIONING = (0, use_legacy_versioning_1.shouldUseLegacyVersioning)(userConfig);
|
59
62
|
const gitDefaults = {
|
60
63
|
commit: false,
|
61
64
|
commitMessage: 'chore(release): publish {version}',
|
@@ -65,6 +68,7 @@ async function createNxReleaseConfig(projectGraph, projectFileMap, userConfig =
|
|
65
68
|
tagArgs: '',
|
66
69
|
stageChanges: false,
|
67
70
|
push: false,
|
71
|
+
pushArgs: '',
|
68
72
|
};
|
69
73
|
const versionGitDefaults = {
|
70
74
|
...gitDefaults,
|
@@ -133,11 +137,24 @@ async function createNxReleaseConfig(projectGraph, projectFileMap, userConfig =
|
|
133
137
|
projectsRelationship: workspaceProjectsRelationship,
|
134
138
|
git: gitDefaults,
|
135
139
|
version: {
|
140
|
+
useLegacyVersioning: USE_LEGACY_VERSIONING,
|
136
141
|
git: versionGitDefaults,
|
137
142
|
conventionalCommits: userConfig.version?.conventionalCommits || false,
|
138
|
-
generator: '@nx/js:release-version',
|
139
|
-
generatorOptions: defaultGeneratorOptions,
|
140
143
|
preVersionCommand: userConfig.version?.preVersionCommand || '',
|
144
|
+
...(USE_LEGACY_VERSIONING
|
145
|
+
? {
|
146
|
+
generator: '@nx/js:release-version',
|
147
|
+
generatorOptions: defaultGeneratorOptions,
|
148
|
+
}
|
149
|
+
: {
|
150
|
+
versionActions: exports.DEFAULT_VERSION_ACTIONS_PATH,
|
151
|
+
versionActionsOptions: {},
|
152
|
+
currentVersionResolver: defaultGeneratorOptions.currentVersionResolver,
|
153
|
+
specifierSource: defaultGeneratorOptions.specifierSource,
|
154
|
+
preserveLocalDependencyProtocols: userConfig.version?.preserveLocalDependencyProtocols ?? true,
|
155
|
+
logUnchangedProjects: userConfig.version?.logUnchangedProjects ?? true,
|
156
|
+
updateDependents: userConfig.version?.updateDependents ?? 'auto',
|
157
|
+
}),
|
141
158
|
},
|
142
159
|
changelog: {
|
143
160
|
git: changelogGitDefaults,
|
@@ -185,12 +202,19 @@ async function createNxReleaseConfig(projectGraph, projectFileMap, userConfig =
|
|
185
202
|
const groupProjectsRelationship = userConfig.projectsRelationship || WORKSPACE_DEFAULTS.projectsRelationship;
|
186
203
|
const GROUP_DEFAULTS = {
|
187
204
|
projectsRelationship: groupProjectsRelationship,
|
188
|
-
version:
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
205
|
+
version: USE_LEGACY_VERSIONING
|
206
|
+
? {
|
207
|
+
conventionalCommits: false,
|
208
|
+
generator: '@nx/js:release-version',
|
209
|
+
generatorOptions: {},
|
210
|
+
groupPreVersionCommand: '',
|
211
|
+
}
|
212
|
+
: {
|
213
|
+
conventionalCommits: false,
|
214
|
+
versionActions: exports.DEFAULT_VERSION_ACTIONS_PATH,
|
215
|
+
versionActionsOptions: {},
|
216
|
+
groupPreVersionCommand: '',
|
217
|
+
},
|
194
218
|
changelog: {
|
195
219
|
createRelease: false,
|
196
220
|
entryWhenNoChanges: 'This was a version bump only for {projectName} to align it with other projects, there were no code changes.',
|
@@ -219,7 +243,9 @@ async function createNxReleaseConfig(projectGraph, projectFileMap, userConfig =
|
|
219
243
|
const rootVersionConfig = deepMergeDefaults([
|
220
244
|
WORKSPACE_DEFAULTS.version,
|
221
245
|
// Merge in the git defaults from the top level
|
222
|
-
{
|
246
|
+
{
|
247
|
+
git: versionGitDefaults,
|
248
|
+
},
|
223
249
|
{
|
224
250
|
git: userConfig.git,
|
225
251
|
},
|
@@ -242,33 +268,50 @@ async function createNxReleaseConfig(projectGraph, projectFileMap, userConfig =
|
|
242
268
|
WORKSPACE_DEFAULTS.versionPlans);
|
243
269
|
const rootConventionalCommitsConfig = deepMergeDefaults([WORKSPACE_DEFAULTS.conventionalCommits], fillUnspecifiedConventionalCommitsProperties(normalizeConventionalCommitsConfig(userConfig.conventionalCommits)));
|
244
270
|
// these options are not supported at the group level, only the root/command level
|
245
|
-
|
271
|
+
let rootVersionWithoutGlobalOptions = {
|
246
272
|
...rootVersionConfig,
|
247
273
|
};
|
248
274
|
delete rootVersionWithoutGlobalOptions.git;
|
249
275
|
delete rootVersionWithoutGlobalOptions.preVersionCommand;
|
250
276
|
// Apply conventionalCommits shorthand to the final group defaults if explicitly configured in the original user config
|
251
277
|
if (userConfig.version?.conventionalCommits === true) {
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
278
|
+
if (USE_LEGACY_VERSIONING) {
|
279
|
+
rootVersionWithoutGlobalOptions.generatorOptions = {
|
280
|
+
...rootVersionWithoutGlobalOptions.generatorOptions,
|
281
|
+
currentVersionResolver: 'git-tag',
|
282
|
+
specifierSource: 'conventional-commits',
|
283
|
+
};
|
284
|
+
}
|
285
|
+
else {
|
286
|
+
rootVersionWithoutGlobalOptions.currentVersionResolver = 'git-tag';
|
287
|
+
rootVersionWithoutGlobalOptions.specifierSource = 'conventional-commits';
|
288
|
+
}
|
257
289
|
}
|
258
290
|
if (userConfig.version?.conventionalCommits === false) {
|
259
291
|
delete rootVersionWithoutGlobalOptions.generatorOptions
|
260
292
|
.currentVersionResolver;
|
261
293
|
delete rootVersionWithoutGlobalOptions.generatorOptions.specifierSource;
|
294
|
+
delete rootVersionWithoutGlobalOptions
|
295
|
+
.currentVersionResolver;
|
296
|
+
delete rootVersionWithoutGlobalOptions
|
297
|
+
.specifierSource;
|
262
298
|
}
|
263
299
|
// Apply versionPlans shorthand to the final group defaults if explicitly configured in the original user config
|
264
300
|
if (userConfig.versionPlans) {
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
301
|
+
if (USE_LEGACY_VERSIONING) {
|
302
|
+
rootVersionWithoutGlobalOptions.generatorOptions = {
|
303
|
+
...rootVersionWithoutGlobalOptions.generatorOptions,
|
304
|
+
specifierSource: 'version-plans',
|
305
|
+
};
|
306
|
+
}
|
307
|
+
else {
|
308
|
+
rootVersionWithoutGlobalOptions.specifierSource = 'version-plans';
|
309
|
+
}
|
269
310
|
}
|
270
311
|
if (userConfig.versionPlans === false) {
|
271
312
|
delete rootVersionWithoutGlobalOptions.generatorOptions.specifierSource;
|
313
|
+
delete rootVersionWithoutGlobalOptions
|
314
|
+
.specifierSource;
|
272
315
|
}
|
273
316
|
const groups = userConfig.groups && Object.keys(userConfig.groups).length
|
274
317
|
? ensureProjectsConfigIsArray(userConfig.groups)
|
@@ -377,32 +420,51 @@ async function createNxReleaseConfig(projectGraph, projectFileMap, userConfig =
|
|
377
420
|
// Ensure that the resolved project names take priority over the original user config (which could have contained unresolved globs etc)
|
378
421
|
projects: matchingProjects,
|
379
422
|
});
|
423
|
+
finalReleaseGroup.version =
|
424
|
+
finalReleaseGroup.version;
|
380
425
|
// Apply conventionalCommits shorthand to the final group if explicitly configured in the original group
|
381
426
|
if (releaseGroup.version?.conventionalCommits === true) {
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
427
|
+
if (USE_LEGACY_VERSIONING) {
|
428
|
+
finalReleaseGroup.version.generatorOptions = {
|
429
|
+
...finalReleaseGroup.version.generatorOptions,
|
430
|
+
currentVersionResolver: 'git-tag',
|
431
|
+
specifierSource: 'conventional-commits',
|
432
|
+
};
|
433
|
+
}
|
434
|
+
else {
|
435
|
+
finalReleaseGroup.version.currentVersionResolver = 'git-tag';
|
436
|
+
finalReleaseGroup.version.specifierSource = 'conventional-commits';
|
437
|
+
}
|
387
438
|
}
|
388
439
|
if (releaseGroup.version?.conventionalCommits === false &&
|
389
440
|
releaseGroupName !== exports.IMPLICIT_DEFAULT_RELEASE_GROUP) {
|
390
441
|
delete finalReleaseGroup.version.generatorOptions.currentVersionResolver;
|
391
442
|
delete finalReleaseGroup.version.generatorOptions.specifierSource;
|
443
|
+
delete finalReleaseGroup.version
|
444
|
+
.currentVersionResolver;
|
445
|
+
delete finalReleaseGroup.version
|
446
|
+
.specifierSource;
|
392
447
|
}
|
393
448
|
// Apply versionPlans shorthand to the final group if explicitly configured in the original group
|
394
449
|
if (releaseGroup.versionPlans) {
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
450
|
+
if (USE_LEGACY_VERSIONING) {
|
451
|
+
finalReleaseGroup.version = {
|
452
|
+
...finalReleaseGroup.version,
|
453
|
+
generatorOptions: {
|
454
|
+
...finalReleaseGroup.version?.generatorOptions,
|
455
|
+
specifierSource: 'version-plans',
|
456
|
+
},
|
457
|
+
};
|
458
|
+
}
|
459
|
+
else {
|
460
|
+
finalReleaseGroup.version.specifierSource = 'version-plans';
|
461
|
+
}
|
402
462
|
}
|
403
463
|
if (releaseGroup.versionPlans === false &&
|
404
464
|
releaseGroupName !== exports.IMPLICIT_DEFAULT_RELEASE_GROUP) {
|
405
465
|
delete finalReleaseGroup.version.generatorOptions.specifierSource;
|
466
|
+
delete finalReleaseGroup.version
|
467
|
+
.specifierSource;
|
406
468
|
}
|
407
469
|
releaseGroups[releaseGroupName] = finalReleaseGroup;
|
408
470
|
}
|
@@ -517,7 +579,7 @@ function fillUnspecifiedConventionalCommitsProperties(config) {
|
|
517
579
|
types,
|
518
580
|
};
|
519
581
|
}
|
520
|
-
async function handleNxReleaseConfigError(error) {
|
582
|
+
async function handleNxReleaseConfigError(error, useLegacyVersioning) {
|
521
583
|
switch (error.code) {
|
522
584
|
case 'PROJECTS_AND_GROUPS_DEFINED':
|
523
585
|
{
|
@@ -569,13 +631,16 @@ async function handleNxReleaseConfigError(error) {
|
|
569
631
|
});
|
570
632
|
}
|
571
633
|
break;
|
572
|
-
case '
|
634
|
+
case 'CONVENTIONAL_COMMITS_SHORTHAND_MIXED_WITH_OVERLAPPING_OPTIONS':
|
573
635
|
{
|
574
636
|
const nxJsonMessage = await (0, resolve_nx_json_error_message_1.resolveNxJsonConfigErrorMessage)([
|
575
637
|
'release',
|
576
638
|
]);
|
639
|
+
const text = useLegacyVersioning
|
640
|
+
? '"version.generatorOptions"'
|
641
|
+
: 'configuration options';
|
577
642
|
output_1.output.error({
|
578
|
-
title: `You have configured both the shorthand "version.conventionalCommits" and one or more of the related
|
643
|
+
title: `You have configured both the shorthand "version.conventionalCommits" and one or more of the related ${text} that it sets for you. Please use one or the other:`,
|
579
644
|
bodyLines: [nxJsonMessage],
|
580
645
|
});
|
581
646
|
}
|
@@ -723,21 +788,36 @@ function deepMergeDefaults(defaultConfigs, userConfig) {
|
|
723
788
|
}
|
724
789
|
/**
|
725
790
|
* We want to prevent users from setting both the conventionalCommits shorthand and any of the related
|
726
|
-
*
|
791
|
+
* configuration options at the same time, since it is at best redundant, and at worst invalid.
|
727
792
|
*/
|
728
793
|
function hasInvalidConventionalCommitsConfig(userConfig) {
|
729
794
|
// at the root
|
730
795
|
if (userConfig.version?.conventionalCommits === true &&
|
731
|
-
|
732
|
-
|
796
|
+
// v2 config - directly on version config
|
797
|
+
(userConfig.version
|
798
|
+
?.currentVersionResolver ||
|
799
|
+
userConfig.version
|
800
|
+
?.specifierSource ||
|
801
|
+
// Legacy config - on generatorOptions
|
802
|
+
userConfig.version
|
803
|
+
?.generatorOptions?.currentVersionResolver ||
|
804
|
+
userConfig.version
|
805
|
+
?.generatorOptions?.specifierSource)) {
|
733
806
|
return true;
|
734
807
|
}
|
735
808
|
// within any groups
|
736
809
|
if (userConfig.groups) {
|
737
810
|
for (const group of Object.values(userConfig.groups)) {
|
738
811
|
if (group.version?.conventionalCommits === true &&
|
739
|
-
|
740
|
-
|
812
|
+
// v2 config - directly on version config
|
813
|
+
(group.version
|
814
|
+
?.currentVersionResolver ||
|
815
|
+
group.version?.specifierSource ||
|
816
|
+
// Legacy config - on generatorOptions
|
817
|
+
group.version
|
818
|
+
?.generatorOptions?.currentVersionResolver ||
|
819
|
+
group.version
|
820
|
+
?.generatorOptions?.specifierSource)) {
|
741
821
|
return true;
|
742
822
|
}
|
743
823
|
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.shouldUseLegacyVersioning = shouldUseLegacyVersioning;
|
4
|
+
function shouldUseLegacyVersioning(releaseConfig) {
|
5
|
+
return process.env.NX_INTERNAL_USE_LEGACY_VERSIONING === 'false'
|
6
|
+
? false
|
7
|
+
: // TODO(v21): switch this to false by default in Nx v21 and remove this function in v22
|
8
|
+
releaseConfig?.version?.useLegacyVersioning ?? true;
|
9
|
+
}
|
@@ -31,3 +31,7 @@ export declare const releaseVersion: typeof defaultClient.releaseVersion;
|
|
31
31
|
* @public
|
32
32
|
*/
|
33
33
|
export declare const release: typeof defaultClient.release;
|
34
|
+
/**
|
35
|
+
* @public
|
36
|
+
*/
|
37
|
+
export { AfterAllProjectsVersioned, VersionActions, } from './version/version-actions';
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.release = exports.releaseVersion = exports.releasePublish = exports.releaseChangelog = exports.ReleaseClient = void 0;
|
3
|
+
exports.VersionActions = exports.release = exports.releaseVersion = exports.releasePublish = exports.releaseChangelog = exports.ReleaseClient = void 0;
|
4
4
|
const changelog_1 = require("./changelog");
|
5
5
|
const publish_1 = require("./publish");
|
6
6
|
const release_1 = require("./release");
|
@@ -35,3 +35,8 @@ exports.releaseVersion = defaultClient.releaseVersion.bind(defaultClient);
|
|
35
35
|
* @public
|
36
36
|
*/
|
37
37
|
exports.release = defaultClient.release.bind(defaultClient);
|
38
|
+
/**
|
39
|
+
* @public
|
40
|
+
*/
|
41
|
+
var version_actions_1 = require("./version/version-actions");
|
42
|
+
Object.defineProperty(exports, "VersionActions", { enumerable: true, get: function () { return version_actions_1.VersionActions; } });
|
@@ -7,11 +7,12 @@ const file_map_utils_1 = require("../../project-graph/file-map-utils");
|
|
7
7
|
const project_graph_1 = require("../../project-graph/project-graph");
|
8
8
|
const all_file_data_1 = require("../../utils/all-file-data");
|
9
9
|
const command_line_utils_1 = require("../../utils/command-line-utils");
|
10
|
-
const output_1 = require("../../utils/output");
|
11
10
|
const handle_errors_1 = require("../../utils/handle-errors");
|
11
|
+
const output_1 = require("../../utils/output");
|
12
12
|
const config_1 = require("./config/config");
|
13
13
|
const deep_merge_json_1 = require("./config/deep-merge-json");
|
14
14
|
const filter_release_groups_1 = require("./config/filter-release-groups");
|
15
|
+
const use_legacy_versioning_1 = require("./config/use-legacy-versioning");
|
15
16
|
const version_plans_1 = require("./config/version-plans");
|
16
17
|
const get_touched_projects_for_group_1 = require("./utils/get-touched-projects-for-group");
|
17
18
|
const print_config_1 = require("./utils/print-config");
|
@@ -25,7 +26,8 @@ function createAPI(overrideReleaseConfig) {
|
|
25
26
|
// Apply default configuration to any optional user configuration
|
26
27
|
const { error: configError, nxReleaseConfig } = await (0, config_1.createNxReleaseConfig)(projectGraph, await (0, file_map_utils_1.createProjectFileMapUsingProjectGraph)(projectGraph), userProvidedReleaseConfig);
|
27
28
|
if (configError) {
|
28
|
-
|
29
|
+
const USE_LEGACY_VERSIONING = (0, use_legacy_versioning_1.shouldUseLegacyVersioning)(userProvidedReleaseConfig);
|
30
|
+
return await (0, config_1.handleNxReleaseConfigError)(configError, USE_LEGACY_VERSIONING);
|
29
31
|
}
|
30
32
|
// --print-config exits directly as it is not designed to be combined with any other programmatic operations
|
31
33
|
if (args.printConfig) {
|
@@ -47,7 +49,8 @@ function createAPI(overrideReleaseConfig) {
|
|
47
49
|
title: 'Version plans are not enabled',
|
48
50
|
bodyLines: [
|
49
51
|
'Please ensure at least one release group has version plans enabled in your Nx release configuration if you want to use this command.',
|
50
|
-
|
52
|
+
'',
|
53
|
+
'Learn more about version plans here: https://nx.dev/recipes/nx-release/file-based-versioning-version-plans',
|
51
54
|
],
|
52
55
|
});
|
53
56
|
return 1;
|
@@ -13,11 +13,12 @@ const file_map_utils_1 = require("../../project-graph/file-map-utils");
|
|
13
13
|
const project_graph_1 = require("../../project-graph/project-graph");
|
14
14
|
const all_file_data_1 = require("../../utils/all-file-data");
|
15
15
|
const command_line_utils_1 = require("../../utils/command-line-utils");
|
16
|
-
const output_1 = require("../../utils/output");
|
17
16
|
const handle_errors_1 = require("../../utils/handle-errors");
|
17
|
+
const output_1 = require("../../utils/output");
|
18
18
|
const config_1 = require("./config/config");
|
19
19
|
const deep_merge_json_1 = require("./config/deep-merge-json");
|
20
20
|
const filter_release_groups_1 = require("./config/filter-release-groups");
|
21
|
+
const use_legacy_versioning_1 = require("./config/use-legacy-versioning");
|
21
22
|
const version_plans_1 = require("./config/version-plans");
|
22
23
|
const generate_version_plan_content_1 = require("./utils/generate-version-plan-content");
|
23
24
|
const get_touched_projects_for_group_1 = require("./utils/get-touched-projects-for-group");
|
@@ -34,7 +35,8 @@ function createAPI(overrideReleaseConfig) {
|
|
34
35
|
// Apply default configuration to any optional user configuration
|
35
36
|
const { error: configError, nxReleaseConfig } = await (0, config_1.createNxReleaseConfig)(projectGraph, await (0, file_map_utils_1.createProjectFileMapUsingProjectGraph)(projectGraph), userProvidedReleaseConfig);
|
36
37
|
if (configError) {
|
37
|
-
|
38
|
+
const USE_LEGACY_VERSIONING = (0, use_legacy_versioning_1.shouldUseLegacyVersioning)(userProvidedReleaseConfig);
|
39
|
+
return await (0, config_1.handleNxReleaseConfigError)(configError, USE_LEGACY_VERSIONING);
|
38
40
|
}
|
39
41
|
// --print-config exits directly as it is not designed to be combined with any other programmatic operations
|
40
42
|
if (args.printConfig) {
|
@@ -210,10 +212,12 @@ async function promptForVersion(message) {
|
|
210
212
|
]);
|
211
213
|
return reply.version;
|
212
214
|
}
|
213
|
-
catch
|
215
|
+
catch {
|
214
216
|
output_1.output.log({
|
215
217
|
title: 'Cancelled version plan creation.',
|
216
218
|
});
|
219
|
+
// Ensure the cursor is always restored before exiting
|
220
|
+
process.stdout.write('\u001b[?25h');
|
217
221
|
process.exit(0);
|
218
222
|
}
|
219
223
|
}
|
@@ -4,19 +4,20 @@ exports.releasePublishCLIHandler = void 0;
|
|
4
4
|
exports.createAPI = createAPI;
|
5
5
|
const nx_json_1 = require("../../config/nx-json");
|
6
6
|
const file_map_utils_1 = require("../../project-graph/file-map-utils");
|
7
|
+
const tasks_execution_hooks_1 = require("../../project-graph/plugins/tasks-execution-hooks");
|
7
8
|
const project_graph_1 = require("../../project-graph/project-graph");
|
8
9
|
const run_command_1 = require("../../tasks-runner/run-command");
|
9
10
|
const command_line_utils_1 = require("../../utils/command-line-utils");
|
10
11
|
const handle_errors_1 = require("../../utils/handle-errors");
|
11
12
|
const output_1 = require("../../utils/output");
|
12
13
|
const project_graph_utils_1 = require("../../utils/project-graph-utils");
|
14
|
+
const workspace_root_1 = require("../../utils/workspace-root");
|
13
15
|
const graph_1 = require("../graph/graph");
|
14
16
|
const config_1 = require("./config/config");
|
15
17
|
const deep_merge_json_1 = require("./config/deep-merge-json");
|
16
18
|
const filter_release_groups_1 = require("./config/filter-release-groups");
|
19
|
+
const use_legacy_versioning_1 = require("./config/use-legacy-versioning");
|
17
20
|
const print_config_1 = require("./utils/print-config");
|
18
|
-
const workspace_root_1 = require("../../utils/workspace-root");
|
19
|
-
const tasks_execution_hooks_1 = require("../../project-graph/plugins/tasks-execution-hooks");
|
20
21
|
const releasePublishCLIHandler = (args) => (0, handle_errors_1.handleErrors)(args.verbose, async () => {
|
21
22
|
const publishProjectsResult = await createAPI({})(args);
|
22
23
|
// If all projects are published successfully, return 0, otherwise return 1
|
@@ -46,7 +47,8 @@ function createAPI(overrideReleaseConfig) {
|
|
46
47
|
// Apply default configuration to any optional user configuration
|
47
48
|
const { error: configError, nxReleaseConfig } = await (0, config_1.createNxReleaseConfig)(projectGraph, await (0, file_map_utils_1.createProjectFileMapUsingProjectGraph)(projectGraph), userProvidedReleaseConfig);
|
48
49
|
if (configError) {
|
49
|
-
|
50
|
+
const USE_LEGACY_VERSIONING = (0, use_legacy_versioning_1.shouldUseLegacyVersioning)(userProvidedReleaseConfig);
|
51
|
+
return await (0, config_1.handleNxReleaseConfigError)(configError, USE_LEGACY_VERSIONING);
|
50
52
|
}
|
51
53
|
// --print-config exits directly as it is not designed to be combined with any other programmatic operations
|
52
54
|
if (args.printConfig) {
|
@@ -7,12 +7,13 @@ const node_fs_1 = require("node:fs");
|
|
7
7
|
const nx_json_1 = require("../../config/nx-json");
|
8
8
|
const file_map_utils_1 = require("../../project-graph/file-map-utils");
|
9
9
|
const project_graph_1 = require("../../project-graph/project-graph");
|
10
|
-
const output_1 = require("../../utils/output");
|
11
10
|
const handle_errors_1 = require("../../utils/handle-errors");
|
11
|
+
const output_1 = require("../../utils/output");
|
12
12
|
const changelog_1 = require("./changelog");
|
13
13
|
const config_1 = require("./config/config");
|
14
14
|
const deep_merge_json_1 = require("./config/deep-merge-json");
|
15
15
|
const filter_release_groups_1 = require("./config/filter-release-groups");
|
16
|
+
const use_legacy_versioning_1 = require("./config/use-legacy-versioning");
|
16
17
|
const version_plans_1 = require("./config/version-plans");
|
17
18
|
const publish_1 = require("./publish");
|
18
19
|
const git_1 = require("./utils/git");
|
@@ -47,7 +48,8 @@ function createAPI(overrideReleaseConfig) {
|
|
47
48
|
// Apply default configuration to any optional user configuration
|
48
49
|
const { error: configError, nxReleaseConfig } = await (0, config_1.createNxReleaseConfig)(projectGraph, await (0, file_map_utils_1.createProjectFileMapUsingProjectGraph)(projectGraph), userProvidedReleaseConfig);
|
49
50
|
if (configError) {
|
50
|
-
|
51
|
+
const USE_LEGACY_VERSIONING = (0, use_legacy_versioning_1.shouldUseLegacyVersioning)(userProvidedReleaseConfig);
|
52
|
+
return await (0, config_1.handleNxReleaseConfigError)(configError, USE_LEGACY_VERSIONING);
|
51
53
|
}
|
52
54
|
// --print-config exits directly as it is not designed to be combined with any other programmatic operations
|
53
55
|
if (args.printConfig) {
|
@@ -172,6 +174,7 @@ function createAPI(overrideReleaseConfig) {
|
|
172
174
|
await (0, git_1.gitPush)({
|
173
175
|
dryRun: args.dryRun,
|
174
176
|
verbose: args.verbose,
|
177
|
+
additionalArgs: nxReleaseConfig.git.pushArgs,
|
175
178
|
});
|
176
179
|
hasPushedChanges = true;
|
177
180
|
}
|
@@ -243,7 +246,9 @@ async function promptForPublish() {
|
|
243
246
|
]);
|
244
247
|
return reply.confirmation;
|
245
248
|
}
|
246
|
-
catch
|
249
|
+
catch {
|
250
|
+
// Ensure the cursor is always restored before exiting
|
251
|
+
process.stdout.write('\u001b[?25h');
|
247
252
|
// Handle the case where the user exits the prompt with ctrl+c
|
248
253
|
return false;
|
249
254
|
}
|
@@ -10,11 +10,14 @@ function batchProjectsByGeneratorConfig(projectGraph, releaseGroup, projectNames
|
|
10
10
|
const configBatches = new Map();
|
11
11
|
for (const projectName of projectNamesToBatch) {
|
12
12
|
const project = projectGraph.nodes[projectName];
|
13
|
-
const generator = project.data.release?.version
|
13
|
+
const generator = project.data.release?.version
|
14
|
+
?.generator ||
|
14
15
|
releaseGroup.version.generator;
|
15
16
|
const generatorOptions = {
|
16
|
-
...releaseGroup.version
|
17
|
-
|
17
|
+
...releaseGroup.version
|
18
|
+
.generatorOptions,
|
19
|
+
...project.data.release?.version
|
20
|
+
?.generatorOptions,
|
18
21
|
};
|
19
22
|
let found = false;
|
20
23
|
for (const [key, projects] of configBatches) {
|
@@ -50,10 +50,11 @@ export declare function gitTag({ tag, message, additionalArgs, dryRun, verbose,
|
|
50
50
|
verbose?: boolean;
|
51
51
|
logFn?: (message: string) => void;
|
52
52
|
}): Promise<string>;
|
53
|
-
export declare function gitPush({ gitRemote, dryRun, verbose, }: {
|
53
|
+
export declare function gitPush({ gitRemote, dryRun, verbose, additionalArgs, }: {
|
54
54
|
gitRemote?: string;
|
55
55
|
dryRun?: boolean;
|
56
56
|
verbose?: boolean;
|
57
|
+
additionalArgs?: string | string[];
|
57
58
|
}): Promise<void>;
|
58
59
|
export declare function parseCommits(commits: RawGitCommit[]): GitCommit[];
|
59
60
|
export declare function parseConventionalCommitsMessage(message: string): {
|
@@ -308,7 +308,7 @@ async function gitTag({ tag, message, additionalArgs, dryRun, verbose, logFn, })
|
|
308
308
|
throw new Error(`Unexpected error when creating tag ${tag}:\n\n${err}`);
|
309
309
|
}
|
310
310
|
}
|
311
|
-
async function gitPush({ gitRemote, dryRun, verbose, }) {
|
311
|
+
async function gitPush({ gitRemote, dryRun, verbose, additionalArgs, }) {
|
312
312
|
const commandArgs = [
|
313
313
|
'push',
|
314
314
|
// NOTE: It's important we use --follow-tags, and not --tags, so that we are precise about what we are pushing
|
@@ -318,6 +318,14 @@ async function gitPush({ gitRemote, dryRun, verbose, }) {
|
|
318
318
|
// Set custom git remote if provided
|
319
319
|
...(gitRemote ? [gitRemote] : []),
|
320
320
|
];
|
321
|
+
if (additionalArgs) {
|
322
|
+
if (Array.isArray(additionalArgs)) {
|
323
|
+
commandArgs.push(...additionalArgs);
|
324
|
+
}
|
325
|
+
else {
|
326
|
+
commandArgs.push(...additionalArgs.split(' '));
|
327
|
+
}
|
328
|
+
}
|
321
329
|
if (verbose) {
|
322
330
|
console.log(dryRun
|
323
331
|
? `Would push the current branch to the remote with the following command, but --dry-run was set:`
|
@@ -396,7 +404,7 @@ function parseGitCommit(commit, isVersionPlanCommit = false) {
|
|
396
404
|
scope: '',
|
397
405
|
references: extractReferencesFromCommitMessage(commit.message, commit.shortHash),
|
398
406
|
// The commit message is not the source of truth for a breaking (major) change in version plans, so the value is not relevant
|
399
|
-
// TODO(
|
407
|
+
// TODO(v22): Make the current GitCommit interface more clearly tied to conventional commits
|
400
408
|
isBreaking: false,
|
401
409
|
authors: getAllAuthorsForCommit(commit),
|
402
410
|
// Not applicable to version plans
|
@@ -198,7 +198,9 @@ async function promptForContinueInGitHub() {
|
|
198
198
|
]);
|
199
199
|
return reply.open === 'Yes';
|
200
200
|
}
|
201
|
-
catch
|
201
|
+
catch {
|
202
|
+
// Ensure the cursor is always restored before exiting
|
203
|
+
process.stdout.write('\u001b[?25h');
|
202
204
|
// Handle the case where the user exits the prompt with ctrl+c
|
203
205
|
process.exit(1);
|
204
206
|
}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { ProjectGraph } from '../../../config/project-graph';
|
2
2
|
import { NxReleaseConfig } from '../config/config';
|
3
|
+
import { SemverBumpType } from '../version/version-actions';
|
3
4
|
export declare function resolveSemverSpecifierFromConventionalCommits(from: string, projectGraph: ProjectGraph, projectNames: string[], conventionalCommitsConfig: NxReleaseConfig['conventionalCommits']): Promise<string | null>;
|
4
|
-
export declare function resolveSemverSpecifierFromPrompt(selectionMessage: string, customVersionMessage: string): Promise<string>;
|
5
|
+
export declare function resolveSemverSpecifierFromPrompt(selectionMessage: string, customVersionMessage: string): Promise<SemverBumpType | string>;
|
@@ -50,7 +50,8 @@ async function resolveSemverSpecifierFromPrompt(selectionMessage, customVersionM
|
|
50
50
|
}
|
51
51
|
}
|
52
52
|
catch {
|
53
|
-
//
|
53
|
+
// Ensure the cursor is always restored before exiting
|
54
|
+
process.stdout.write('\u001b[?25h');
|
54
55
|
// We need to catch the error from enquirer prompt, otherwise yargs will print its help
|
55
56
|
process.exit(1);
|
56
57
|
}
|
@@ -7,5 +7,13 @@ import { NxReleaseConfig } from '../config/config';
|
|
7
7
|
import { GitCommit } from './git';
|
8
8
|
export declare function isRelativeVersionKeyword(val: string): val is ReleaseType;
|
9
9
|
export declare function isValidSemverSpecifier(specifier: string): boolean;
|
10
|
+
/**
|
11
|
+
* TODO: We would be able to make the logging for the conventional commits use-case
|
12
|
+
* for fixed release groups more clear/precise if we passed through which project
|
13
|
+
* the conventional commits were detected for.
|
14
|
+
*
|
15
|
+
* It would then flow up through deriveSpecifierFromConventionalCommits back to
|
16
|
+
* ReleaseGroupProcessor.
|
17
|
+
*/
|
10
18
|
export declare function determineSemverChange(commits: GitCommit[], config: NxReleaseConfig['conventionalCommits']): 'patch' | 'minor' | 'major' | null;
|
11
19
|
export declare function deriveNewSemverVersion(currentSemverVersion: string, semverSpecifier: string, preid?: string): string;
|
@@ -15,6 +15,14 @@ function isRelativeVersionKeyword(val) {
|
|
15
15
|
function isValidSemverSpecifier(specifier) {
|
16
16
|
return (specifier && !!((0, semver_1.valid)(specifier) || isRelativeVersionKeyword(specifier)));
|
17
17
|
}
|
18
|
+
/**
|
19
|
+
* TODO: We would be able to make the logging for the conventional commits use-case
|
20
|
+
* for fixed release groups more clear/precise if we passed through which project
|
21
|
+
* the conventional commits were detected for.
|
22
|
+
*
|
23
|
+
* It would then flow up through deriveSpecifierFromConventionalCommits back to
|
24
|
+
* ReleaseGroupProcessor.
|
25
|
+
*/
|
18
26
|
// https://github.com/unjs/changelogen/blob/main/src/semver.ts
|
19
27
|
function determineSemverChange(commits, config) {
|
20
28
|
let [hasMajor, hasMinor, hasPatch] = [false, false, false];
|