nx 22.0.0-beta.2 → 22.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/migrations.json +5 -0
  2. package/package.json +12 -12
  3. package/project.json +2 -1
  4. package/schemas/nx-schema.json +268 -162
  5. package/schemas/project-schema.json +72 -12
  6. package/src/adapter/angular-json.d.ts.map +1 -1
  7. package/src/adapter/angular-json.js +13 -17
  8. package/src/command-line/configure-ai-agents/command-object.d.ts +1 -1
  9. package/src/command-line/configure-ai-agents/command-object.d.ts.map +1 -1
  10. package/src/command-line/configure-ai-agents/command-object.js +18 -4
  11. package/src/command-line/configure-ai-agents/configure-ai-agents.d.ts.map +1 -1
  12. package/src/command-line/configure-ai-agents/configure-ai-agents.js +58 -31
  13. package/src/command-line/init/init-v2.js +1 -1
  14. package/src/command-line/nx-cloud/login/command-object.d.ts.map +1 -1
  15. package/src/command-line/nx-cloud/login/command-object.js +2 -2
  16. package/src/command-line/nx-cloud/logout/command-object.js +1 -1
  17. package/src/command-line/release/changelog.d.ts.map +1 -1
  18. package/src/command-line/release/changelog.js +41 -32
  19. package/src/command-line/release/command-object.d.ts +7 -9
  20. package/src/command-line/release/command-object.d.ts.map +1 -1
  21. package/src/command-line/release/config/config.d.ts +1 -1
  22. package/src/command-line/release/config/config.d.ts.map +1 -1
  23. package/src/command-line/release/config/config.js +55 -133
  24. package/src/command-line/release/config/version-plans.d.ts.map +1 -1
  25. package/src/command-line/release/config/version-plans.js +4 -1
  26. package/src/command-line/release/plan-check.d.ts.map +1 -1
  27. package/src/command-line/release/plan-check.js +1 -3
  28. package/src/command-line/release/plan.d.ts.map +1 -1
  29. package/src/command-line/release/plan.js +1 -3
  30. package/src/command-line/release/publish.d.ts.map +1 -1
  31. package/src/command-line/release/publish.js +36 -14
  32. package/src/command-line/release/release.d.ts.map +1 -1
  33. package/src/command-line/release/release.js +32 -33
  34. package/src/command-line/release/utils/git.d.ts.map +1 -1
  35. package/src/command-line/release/utils/git.js +3 -1
  36. package/src/command-line/release/utils/release-graph.d.ts +219 -0
  37. package/src/command-line/release/utils/release-graph.d.ts.map +1 -0
  38. package/src/command-line/release/utils/release-graph.js +658 -0
  39. package/src/command-line/release/utils/resolve-semver-specifier.d.ts +2 -1
  40. package/src/command-line/release/utils/resolve-semver-specifier.d.ts.map +1 -1
  41. package/src/command-line/release/utils/semver.d.ts +14 -9
  42. package/src/command-line/release/utils/semver.d.ts.map +1 -1
  43. package/src/command-line/release/utils/semver.js +29 -25
  44. package/src/command-line/release/utils/shared.d.ts +5 -2
  45. package/src/command-line/release/utils/shared.d.ts.map +1 -1
  46. package/src/command-line/release/utils/shared.js +82 -26
  47. package/src/command-line/release/utils/test/test-utils.d.ts +20 -0
  48. package/src/command-line/release/utils/test/test-utils.d.ts.map +1 -0
  49. package/src/command-line/release/utils/test/test-utils.js +24 -0
  50. package/src/command-line/release/version/derive-specifier-from-conventional-commits.d.ts.map +1 -1
  51. package/src/command-line/release/version/derive-specifier-from-conventional-commits.js +10 -1
  52. package/src/command-line/release/version/release-group-processor.d.ts +3 -152
  53. package/src/command-line/release/version/release-group-processor.d.ts.map +1 -1
  54. package/src/command-line/release/version/release-group-processor.js +50 -570
  55. package/src/command-line/release/version/resolve-current-version.d.ts +1 -1
  56. package/src/command-line/release/version/resolve-current-version.d.ts.map +1 -1
  57. package/src/command-line/release/version/resolve-current-version.js +1 -1
  58. package/src/command-line/release/version/test-utils.d.ts +13 -4
  59. package/src/command-line/release/version/test-utils.d.ts.map +1 -1
  60. package/src/command-line/release/version/test-utils.js +26 -15
  61. package/src/command-line/release/version/version-actions.d.ts +12 -5
  62. package/src/command-line/release/version/version-actions.d.ts.map +1 -1
  63. package/src/command-line/release/version/version-actions.js +36 -19
  64. package/src/command-line/release/version.d.ts +6 -1
  65. package/src/command-line/release/version.d.ts.map +1 -1
  66. package/src/command-line/release/version.js +58 -36
  67. package/src/config/nx-json.d.ts +28 -35
  68. package/src/config/nx-json.d.ts.map +1 -1
  69. package/src/config/nx-json.js +8 -8
  70. package/src/config/workspace-json-project-json.d.ts +2 -2
  71. package/src/config/workspace-json-project-json.d.ts.map +1 -1
  72. package/src/core/graph/main.js +1 -1
  73. package/src/devkit-exports.d.ts +1 -1
  74. package/src/devkit-exports.d.ts.map +1 -1
  75. package/src/migrations/update-21-0-0/release-changelog-config-changes.d.ts.map +1 -1
  76. package/src/migrations/update-21-0-0/release-version-config-changes.d.ts.map +1 -1
  77. package/src/migrations/update-21-0-0/release-version-config-changes.js +5 -15
  78. package/src/migrations/update-22-0-0/release-version-config-changes.d.ts +3 -0
  79. package/src/migrations/update-22-0-0/release-version-config-changes.d.ts.map +1 -0
  80. package/src/migrations/update-22-0-0/release-version-config-changes.js +101 -0
  81. package/src/native/nx.wasm32-wasi.wasm +0 -0
  82. package/src/plugins/js/index.d.ts +1 -2
  83. package/src/plugins/js/index.d.ts.map +1 -1
  84. package/src/plugins/js/index.js +28 -32
  85. package/src/plugins/js/lock-file/lock-file.d.ts +2 -2
  86. package/src/plugins/js/lock-file/lock-file.d.ts.map +1 -1
  87. package/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +1 -1
  88. package/src/project-graph/plugins/loaded-nx-plugin.d.ts.map +1 -1
  89. package/src/project-graph/plugins/loaded-nx-plugin.js +8 -6
  90. package/src/project-graph/plugins/public-api.d.ts +1 -36
  91. package/src/project-graph/plugins/public-api.d.ts.map +1 -1
  92. package/src/project-graph/plugins/utils.d.ts +4 -2
  93. package/src/project-graph/plugins/utils.d.ts.map +1 -1
  94. package/src/tasks-runner/run-command.js +2 -2
  95. package/src/command-line/release/config/use-legacy-versioning.d.ts +0 -3
  96. package/src/command-line/release/config/use-legacy-versioning.d.ts.map +0 -1
  97. package/src/command-line/release/config/use-legacy-versioning.js +0 -9
  98. package/src/command-line/release/utils/batch-projects-by-generator-config.d.ts +0 -8
  99. package/src/command-line/release/utils/batch-projects-by-generator-config.d.ts.map +0 -1
  100. package/src/command-line/release/utils/batch-projects-by-generator-config.js +0 -39
  101. package/src/command-line/release/version-legacy.d.ts +0 -47
  102. package/src/command-line/release/version-legacy.d.ts.map +0 -1
  103. package/src/command-line/release/version-legacy.js +0 -453
@@ -3,7 +3,7 @@ import type { Tree } from '../../../generators/tree';
3
3
  import type { ReleaseGroupWithName } from '../config/filter-release-groups';
4
4
  import { getLatestGitTagForPattern } from '../utils/git';
5
5
  import { ProjectLogger } from './project-logger';
6
- import type { FinalConfigForProject } from './release-group-processor';
6
+ import type { FinalConfigForProject } from '../utils/release-graph';
7
7
  import { VersionActions } from './version-actions';
8
8
  export declare function resolveCurrentVersion(tree: Tree, projectGraphNode: ProjectGraphProjectNode, releaseGroup: ReleaseGroupWithName, versionActions: VersionActions, logger: ProjectLogger, cachedCurrentVersionsPerFixedReleaseGroup: Map<string, // release group name
9
9
  {
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-current-version.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/release/version/resolve-current-version.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,uBAAuB,EACzC,YAAY,EAAE,oBAAoB,EAClC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,aAAa,EACrB,yCAAyC,EAAE,GAAG,CAC5C,MAAM,EAAE,qBAAqB;AAC7B;IACE,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB,CACF,EACD,qBAAqB,EAAE,qBAAqB,EAC5C,iBAAiB,EAAE,MAAM,EACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,GAC3E,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyCxB;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,uBAAuB,EACzC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAED,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,uBAAuB,EACzC,YAAY,EAAE,oBAAoB,EAClC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,aAAa,EACrB,yCAAyC,EAAE,GAAG,CAC5C,MAAM,EAAE,qBAAqB;AAC7B;IACE,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CACF,EACD,qBAAqB,EAAE,qBAAqB,GAC3C,OAAO,CAAC,MAAM,CAAC,CA8GjB;AAED,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,uBAAuB,EACzC,YAAY,EAAE,oBAAoB,EAClC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,aAAa,EACrB,yCAAyC,EAAE,GAAG,CAC5C,MAAM,EAAE,qBAAqB;AAC7B;IACE,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB,CACF,EACD,qBAAqB,EAAE,qBAAqB,EAC5C,iBAAiB,EAAE,MAAM,EACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,GAC3E,OAAO,CAAC,MAAM,CAAC,CAiFjB"}
1
+ {"version":3,"file":"resolve-current-version.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/release/version/resolve-current-version.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,uBAAuB,EACzC,YAAY,EAAE,oBAAoB,EAClC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,aAAa,EACrB,yCAAyC,EAAE,GAAG,CAC5C,MAAM,EAAE,qBAAqB;AAC7B;IACE,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB,CACF,EACD,qBAAqB,EAAE,qBAAqB,EAC5C,iBAAiB,EAAE,MAAM,EACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,GAC3E,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyCxB;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,uBAAuB,EACzC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAED,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,uBAAuB,EACzC,YAAY,EAAE,oBAAoB,EAClC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,aAAa,EACrB,yCAAyC,EAAE,GAAG,CAC5C,MAAM,EAAE,qBAAqB;AAC7B;IACE,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CACF,EACD,qBAAqB,EAAE,qBAAqB,GAC3C,OAAO,CAAC,MAAM,CAAC,CA8GjB;AAED,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,uBAAuB,EACzC,YAAY,EAAE,oBAAoB,EAClC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,aAAa,EACrB,yCAAyC,EAAE,GAAG,CAC5C,MAAM,EAAE,qBAAqB;AAC7B;IACE,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB,CACF,EACD,qBAAqB,EAAE,qBAAqB,EAC5C,iBAAiB,EAAE,MAAM,EACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,GAC3E,OAAO,CAAC,MAAM,CAAC,CAiFjB"}
@@ -48,7 +48,7 @@ async function resolveCurrentVersionFromDisk(tree, projectGraphNode, versionActi
48
48
  if (err === nullVersionError) {
49
49
  throw err;
50
50
  }
51
- throw new Error(`The project "${projectGraphNode.name}" does not have a ${versionActions.validManifestFilenames.join(' or ')} file available in ./${projectGraphNode.data.root}.
51
+ throw new Error(`The project "${projectGraphNode.name}" does not have a ${versionActions.validManifestFilenames.join(' or ')} file available in ${projectGraphNode.data.root}
52
52
 
53
53
  To fix this you will either need to add a ${versionActions.validManifestFilenames.join(' or ')} file at that location, or configure "release" within your nx.json to use a different "currentVersionResolver" or "versionActions" implementation that supports this setup`);
54
54
  }
@@ -2,7 +2,8 @@ import type { NxJsonConfiguration, NxReleaseVersionConfiguration } from '../../.
2
2
  import type { ProjectGraph } from '../../../config/project-graph';
3
3
  import type { Tree } from '../../../generators/tree';
4
4
  import { NxReleaseConfig } from '../config/config';
5
- import { FinalConfigForProject } from './release-group-processor';
5
+ import { type FinalConfigForProject } from '../utils/release-graph';
6
+ import { ReleaseGroupProcessor } from './release-group-processor';
6
7
  import { VersionActions } from './version-actions';
7
8
  export declare function createNxReleaseConfigAndPopulateWorkspace(tree: Tree, graphDefinition: string, additionalNxReleaseConfig: Exclude<NxJsonConfiguration['release'], 'groups'>, mockResolveCurrentVersion?: any, filters?: {
8
9
  projects?: string[];
@@ -10,13 +11,21 @@ export declare function createNxReleaseConfigAndPopulateWorkspace(tree: Tree, gr
10
11
  }): Promise<{
11
12
  projectGraph: ProjectGraph;
12
13
  nxReleaseConfig: NxReleaseConfig;
13
- releaseGroups: import("../config/filter-release-groups").ReleaseGroupWithName[];
14
- releaseGroupToFilteredProjects: Map<import("../config/filter-release-groups").ReleaseGroupWithName, Set<string>>;
15
14
  filters: {
16
15
  projects?: string[];
17
16
  groups?: string[];
18
17
  };
19
18
  }>;
19
+ export declare function createTestReleaseGroupProcessor(tree: Tree, projectGraph: ProjectGraph, nxReleaseConfig: NxReleaseConfig, filters: {
20
+ projects?: string[];
21
+ groups?: string[];
22
+ }, options?: {
23
+ dryRun?: boolean;
24
+ verbose?: boolean;
25
+ firstRelease?: boolean;
26
+ preid?: string;
27
+ userGivenSpecifier?: string;
28
+ }): Promise<ReleaseGroupProcessor>;
20
29
  /**
21
30
  * A non-production grade rust implementation to prove out loading multiple different versionActions in various setups
22
31
  */
@@ -77,7 +86,7 @@ export declare class ExampleNonSemverVersionActions extends VersionActions {
77
86
  export declare function parseGraphDefinition(definition: string): {
78
87
  projects: any;
79
88
  };
80
- export declare function mockResolveVersionActionsForProjectImplementation(tree: Tree, releaseGroup: any, projectGraphNode: any, finalConfigForProject: FinalConfigForProject, isInProjectsToProcess: boolean): Promise<{
89
+ export declare function mockResolveVersionActionsForProjectImplementation(tree: Tree, releaseGroup: any, projectGraphNode: any, finalConfigForProject: FinalConfigForProject): Promise<{
81
90
  versionActionsPath: string;
82
91
  versionActions: ExampleRustVersionActions;
83
92
  afterAllProjectsVersioned?: undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/release/version/test-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/release/version/test-utils.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ExampleNonSemverVersionActions = exports.ExampleRustVersionActions = void 0;
4
4
  exports.createNxReleaseConfigAndPopulateWorkspace = createNxReleaseConfigAndPopulateWorkspace;
5
+ exports.createTestReleaseGroupProcessor = createTestReleaseGroupProcessor;
5
6
  exports.parseGraphDefinition = parseGraphDefinition;
6
7
  exports.mockResolveVersionActionsForProjectImplementation = mockResolveVersionActionsForProjectImplementation;
7
8
  const j_toml_1 = require("@ltd/j-toml");
@@ -9,7 +10,8 @@ const node_path_1 = require("node:path");
9
10
  const json_1 = require("../../../generators/utils/json");
10
11
  const file_map_utils_1 = require("../../../project-graph/file-map-utils");
11
12
  const config_1 = require("../config/config");
12
- const filter_release_groups_1 = require("../config/filter-release-groups");
13
+ const release_graph_1 = require("../utils/release-graph");
14
+ const release_group_processor_1 = require("./release-group-processor");
13
15
  const version_actions_1 = require("./version-actions");
14
16
  async function createNxReleaseConfigAndPopulateWorkspace(tree, graphDefinition, additionalNxReleaseConfig, mockResolveCurrentVersion, filters = {}) {
15
17
  const graph = parseGraphDefinition(graphDefinition);
@@ -17,18 +19,10 @@ async function createNxReleaseConfigAndPopulateWorkspace(tree, graphDefinition,
17
19
  const { error: configError, nxReleaseConfig } = await (0, config_1.createNxReleaseConfig)(projectGraph, await (0, file_map_utils_1.createProjectFileMapUsingProjectGraph)(projectGraph), {
18
20
  ...additionalNxReleaseConfig,
19
21
  groups,
20
- version: {
21
- ...additionalNxReleaseConfig.version,
22
- useLegacyVersioning: false,
23
- },
24
22
  });
25
23
  if (configError) {
26
24
  throw configError;
27
25
  }
28
- let { error: filterError, releaseGroups, releaseGroupToFilteredProjects, } = (0, filter_release_groups_1.filterReleaseGroups)(projectGraph, nxReleaseConfig, filters.projects, filters.groups);
29
- if (filterError) {
30
- throw filterError;
31
- }
32
26
  // Mock the implementation of resolveCurrentVersion to reliably return the version of the project based on our graph definition
33
27
  mockResolveCurrentVersion?.mockImplementation((_, { name }) => {
34
28
  for (const [projectName, project] of Object.entries(graph.projects)) {
@@ -41,11 +35,28 @@ async function createNxReleaseConfigAndPopulateWorkspace(tree, graphDefinition,
41
35
  return {
42
36
  projectGraph,
43
37
  nxReleaseConfig: nxReleaseConfig,
44
- releaseGroups,
45
- releaseGroupToFilteredProjects,
46
38
  filters,
47
39
  };
48
40
  }
41
+ async function createTestReleaseGroupProcessor(tree, projectGraph, nxReleaseConfig, filters, options = {}) {
42
+ const releaseGraph = await (0, release_graph_1.createReleaseGraph)({
43
+ tree,
44
+ projectGraph,
45
+ nxReleaseConfig,
46
+ filters,
47
+ firstRelease: options.firstRelease ?? false,
48
+ preid: options.preid,
49
+ verbose: options.verbose ?? false,
50
+ });
51
+ return new release_group_processor_1.ReleaseGroupProcessor(tree, projectGraph, nxReleaseConfig, releaseGraph, {
52
+ dryRun: options.dryRun ?? false,
53
+ verbose: options.verbose ?? false,
54
+ firstRelease: options.firstRelease ?? false,
55
+ preid: options.preid ?? '',
56
+ userGivenSpecifier: options.userGivenSpecifier,
57
+ filters,
58
+ });
59
+ }
49
60
  class ExampleRustVersionActions extends version_actions_1.VersionActions {
50
61
  constructor() {
51
62
  super(...arguments);
@@ -377,13 +388,13 @@ function setupGraph(tree, graph) {
377
388
  }
378
389
  const exampleRustVersionActions = '__EXAMPLE_RUST_VERSION_ACTIONS__';
379
390
  const exampleNonSemverVersionActions = '__EXAMPLE_NON_SEMVER_VERSION_ACTIONS__';
380
- async function mockResolveVersionActionsForProjectImplementation(tree, releaseGroup, projectGraphNode, finalConfigForProject, isInProjectsToProcess) {
391
+ async function mockResolveVersionActionsForProjectImplementation(tree, releaseGroup, projectGraphNode, finalConfigForProject) {
381
392
  if (projectGraphNode.data.release?.versionActions ===
382
393
  exampleRustVersionActions ||
383
394
  releaseGroup.versionActions === exampleRustVersionActions) {
384
395
  const versionActions = new ExampleRustVersionActions(releaseGroup, projectGraphNode, finalConfigForProject);
385
396
  // Initialize the versionActions with all the required manifest paths etc
386
- await versionActions.init(tree, isInProjectsToProcess);
397
+ await versionActions.init(tree);
387
398
  return {
388
399
  versionActionsPath: exampleRustVersionActions,
389
400
  versionActions,
@@ -394,7 +405,7 @@ async function mockResolveVersionActionsForProjectImplementation(tree, releaseGr
394
405
  releaseGroup.versionActions === exampleNonSemverVersionActions) {
395
406
  const versionActions = new ExampleNonSemverVersionActions(releaseGroup, projectGraphNode, finalConfigForProject);
396
407
  // Initialize the versionActions with all the required manifest paths etc
397
- await versionActions.init(tree, isInProjectsToProcess);
408
+ await versionActions.init(tree);
398
409
  return {
399
410
  versionActionsPath: exampleNonSemverVersionActions,
400
411
  versionActions,
@@ -406,7 +417,7 @@ async function mockResolveVersionActionsForProjectImplementation(tree, releaseGr
406
417
  const JsVersionActions = loaded.default;
407
418
  const versionActions = new JsVersionActions(releaseGroup, projectGraphNode, finalConfigForProject);
408
419
  // Initialize the versionActions with all the required manifest paths etc
409
- await versionActions.init(tree, isInProjectsToProcess);
420
+ await versionActions.init(tree);
410
421
  return {
411
422
  versionActionsPath,
412
423
  versionActions: versionActions,
@@ -2,8 +2,8 @@ import { ReleaseType } from 'semver';
2
2
  import { NxReleaseVersionConfiguration } from '../../../config/nx-json';
3
3
  import type { ProjectGraph, ProjectGraphDependency, ProjectGraphProjectNode } from '../../../config/project-graph';
4
4
  import type { Tree } from '../../../generators/tree';
5
- import { ReleaseGroupWithName } from '../config/filter-release-groups';
6
- import { FinalConfigForProject } from './release-group-processor';
5
+ import type { ReleaseGroupWithName } from '../config/filter-release-groups';
6
+ import type { FinalConfigForProject } from '../utils/release-graph';
7
7
  export type SemverBumpType = ReleaseType | 'none';
8
8
  /**
9
9
  * Implementation details of performing any actions after all projects have been versioned.
@@ -27,7 +27,7 @@ export type AfterAllProjectsVersioned = (cwd: string, opts: {
27
27
  changedFiles: string[];
28
28
  deletedFiles: string[];
29
29
  }>;
30
- export declare function resolveVersionActionsForProject(tree: Tree, releaseGroup: ReleaseGroupWithName, projectGraphNode: ProjectGraphProjectNode, finalConfigForProject: FinalConfigForProject, isInProjectsToProcess: boolean): Promise<{
30
+ export declare function resolveVersionActionsForProject(tree: Tree, releaseGroup: ReleaseGroupWithName, projectGraphNode: ProjectGraphProjectNode, finalConfigForProject: FinalConfigForProject): Promise<{
31
31
  versionActionsPath: string;
32
32
  versionActions: VersionActions;
33
33
  afterAllProjectsVersioned: AfterAllProjectsVersioned;
@@ -59,9 +59,15 @@ export declare abstract class VersionActions {
59
59
  }[];
60
60
  constructor(releaseGroup: ReleaseGroupWithName, projectGraphNode: ProjectGraphProjectNode, finalConfigForProject: FinalConfigForProject);
61
61
  /**
62
- * Asynchronous initialization of the version actions and validation of certain configuration options.
62
+ * Asynchronous initialization of the version actions and resolution of manifest paths.
63
+ * Note: This does NOT validate that manifest files exist - that happens later in validate().
63
64
  */
64
- init(tree: Tree, isInProjectsToProcess: boolean): Promise<void>;
65
+ init(tree: Tree): Promise<void>;
66
+ /**
67
+ * Validates that manifest files actually exist.
68
+ * This will be called after all preVersionCommands have run.
69
+ */
70
+ validate(tree: Tree): Promise<void>;
65
71
  /**
66
72
  * The default implementation will calculate the new version based on semver. If semver is not applicable to a
67
73
  * particular versioning use-case, this method should be overridden with custom logic.
@@ -171,6 +177,7 @@ export declare abstract class VersionActions {
171
177
  }
172
178
  export declare class NOOP_VERSION_ACTIONS extends VersionActions {
173
179
  validManifestFilenames: any;
180
+ validate(tree: Tree): Promise<void>;
174
181
  readCurrentVersionFromRegistry(tree: Tree, currentVersionResolverMetadata: NxReleaseVersionConfiguration['currentVersionResolverMetadata']): Promise<{
175
182
  currentVersion: string | null;
176
183
  logText: string;
@@ -1 +1 @@
1
- {"version":3,"file":"version-actions.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/release/version/version-actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-actions.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/release/version/version-actions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAMrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAOpE,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,MAAM,CAAC;AA6BlD;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,yBAAyB,GAAG,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IACJ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrD,KACE,OAAO,CAAC;IACX,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC,CAAC;AAkBH,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,oBAAoB,EAClC,gBAAgB,EAAE,uBAAuB,EACzC,qBAAqB,EAAE,qBAAqB,GAC3C,OAAO,CAAC;IACT,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,yBAAyB,EAAE,yBAAyB,CAAC;CACtD,CAAC,CA4ED;AAED,8BAAsB,cAAc;IAwBzB,YAAY,EAAE,oBAAoB;IAClC,gBAAgB,EAAE,uBAAuB;IACzC,qBAAqB,EAAE,qBAAqB;IAzBrD;;;;;;;OAOG;IACH,QAAQ,CAAC,sBAAsB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACjD;;;;;;;OAOG;IACH,iBAAiB,EAAE;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,gCAAgC,EAAE,OAAO,CAAC;KAC3C,EAAE,CAAM;gBAGA,YAAY,EAAE,oBAAoB,EAClC,gBAAgB,EAAE,uBAAuB,EACzC,qBAAqB,EAAE,qBAAqB;IAGrD;;;OAGG;IACG,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDrC;;;OAGG;IACG,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BzC;;;;;;;;;OASG;IACG,mBAAmB,CACvB,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,eAAe,EAAE,MAAM,EACvB,qBAAqB,EAAE,MAAM,EAC7B,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClD,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAkCF;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,oCAAoC,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;QACjE,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;KACtB,GAAG,IAAI,CAAC;IAET;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,8BAA8B,CACrC,IAAI,EAAE,IAAI,EACV,8BAA8B,EAAE,6BAA6B,CAAC,gCAAgC,CAAC,GAC9F,OAAO,CAAC;QACT,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC;IAET;;;;;;;;;OASG;IACG,gBAAgB,CACpB,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAQpC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,8BAA8B,CACrC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,qBAAqB,EAAE,MAAM,GAC5B,OAAO,CAAC;QACT,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;KACrC,CAAC;IAEF;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,oBAAoB,CAC3B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC;IAEpB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,yBAAyB,CAChC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3C,OAAO,CAAC,MAAM,EAAE,CAAC;CACrB;AAED,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,sBAAsB,MAAQ;IAExB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,8BAA8B,CAC5B,IAAI,EAAE,IAAI,EACV,8BAA8B,EAAE,6BAA6B,CAAC,gCAAgC,CAAC,GAC9F,OAAO,CAAC;QACT,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC;IAIT,oCAAoC,CAClC,IAAI,EAAE,IAAI,GACT,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAInE,8BAA8B,CAC5B,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,qBAAqB,EAAE,MAAM,GAC5B,OAAO,CAAC;QACT,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;KACrC,CAAC;IAOI,mBAAmB,CACvB,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,eAAe,EAAE,MAAM,EACvB,qBAAqB,EAAE,MAAM,EAC7B,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClD,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAOF,yBAAyB,CACvB,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3C,OAAO,CAAC,MAAM,EAAE,CAAC;IAIpB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAGxE"}
@@ -32,7 +32,7 @@ function resolveVersionActionsPath(path, projectGraphNode) {
32
32
  }
33
33
  }
34
34
  const versionActionsResolutionCache = new Map();
35
- async function resolveVersionActionsForProject(tree, releaseGroup, projectGraphNode, finalConfigForProject, isInProjectsToProcess) {
35
+ async function resolveVersionActionsForProject(tree, releaseGroup, projectGraphNode, finalConfigForProject) {
36
36
  // Project level release version config takes priority, if set
37
37
  const projectVersionConfig = projectGraphNode.data.release?.version;
38
38
  const releaseGroupVersionConfig = releaseGroup.version;
@@ -76,7 +76,7 @@ async function resolveVersionActionsForProject(tree, releaseGroup, projectGraphN
76
76
  }
77
77
  const versionActions = new VersionActionsClass(releaseGroup, projectGraphNode, finalConfigForProject);
78
78
  // Initialize the version actions with all the required manifest paths etc
79
- await versionActions.init(tree, isInProjectsToProcess);
79
+ await versionActions.init(tree);
80
80
  return {
81
81
  versionActionsPath,
82
82
  versionActions,
@@ -99,9 +99,10 @@ class VersionActions {
99
99
  this.manifestsToUpdate = [];
100
100
  }
101
101
  /**
102
- * Asynchronous initialization of the version actions and validation of certain configuration options.
102
+ * Asynchronous initialization of the version actions and resolution of manifest paths.
103
+ * Note: This does NOT validate that manifest files exist - that happens later in validate().
103
104
  */
104
- async init(tree, isInProjectsToProcess) {
105
+ async init(tree) {
105
106
  // Default to the first available source manifest root, if applicable, if no custom manifest roots are provided
106
107
  if (this.validManifestFilenames?.length &&
107
108
  this.finalConfigForProject.manifestRootsToUpdate.length === 0) {
@@ -125,26 +126,38 @@ class VersionActions {
125
126
  }),
126
127
  };
127
128
  });
129
+ // Build manifestsToUpdate but don't validate existence yet as that could break release graph construction before preVersionCommands have run
128
130
  for (const interpolatedManifestRoot of interpolatedManifestRoots) {
129
- let hasValidManifest = false;
130
131
  for (const manifestFilename of this.validManifestFilenames) {
131
132
  const manifestPath = (0, node_path_1.join)(interpolatedManifestRoot.path, manifestFilename);
132
- if (tree.exists(manifestPath)) {
133
- this.manifestsToUpdate.push({
134
- ...interpolatedManifestRoot,
135
- manifestPath,
136
- });
137
- hasValidManifest = true;
138
- break;
139
- }
133
+ // Just add the first matching filename pattern, actual existence check happens in validate()
134
+ this.manifestsToUpdate.push({
135
+ ...interpolatedManifestRoot,
136
+ manifestPath,
137
+ });
138
+ break;
140
139
  }
141
- /**
142
- * If projects or groups filters are applied, it is possible that the project is not being actively processed
143
- * and we should not throw an error in this case.
144
- */
145
- if (!hasValidManifest && isInProjectsToProcess) {
140
+ }
141
+ }
142
+ /**
143
+ * Validates that manifest files actually exist.
144
+ * This will be called after all preVersionCommands have run.
145
+ */
146
+ async validate(tree) {
147
+ // Skip if no manifest files are expected
148
+ if (!this.validManifestFilenames?.length) {
149
+ return;
150
+ }
151
+ // Simply check each manifest exists
152
+ for (const manifest of this.manifestsToUpdate) {
153
+ if (!tree.exists(manifest.manifestPath)) {
146
154
  const validManifestFilenames = this.validManifestFilenames?.join(' or ');
147
- throw new Error(`The project "${this.projectGraphNode.name}" does not have a ${validManifestFilenames} file available in ./${interpolatedManifestRoot.path}.
155
+ // Get directory path for error message using Node's path module for cross-platform compatibility
156
+ let rootPath = manifest.manifestPath;
157
+ for (const filename of this.validManifestFilenames) {
158
+ rootPath = rootPath.replace(filename, '');
159
+ }
160
+ throw new Error(`The project "${this.projectGraphNode.name}" does not have a ${validManifestFilenames} file available in ${rootPath}
148
161
 
149
162
  To fix this you will either need to add a ${validManifestFilenames} file at that location, or configure "release" within your nx.json to exclude "${this.projectGraphNode.name}" from the current release group, or amend the "release.version.manifestRootsToUpdate" configuration to point to where the relevant manifest should be.
150
163
 
@@ -204,6 +217,10 @@ class NOOP_VERSION_ACTIONS extends VersionActions {
204
217
  super(...arguments);
205
218
  this.validManifestFilenames = null;
206
219
  }
220
+ async validate(tree) {
221
+ // Nothing to validate, patch base method
222
+ return;
223
+ }
207
224
  readCurrentVersionFromRegistry(tree, currentVersionResolverMetadata) {
208
225
  return Promise.resolve(null);
209
226
  }
@@ -1,7 +1,7 @@
1
1
  import { NxReleaseConfiguration } from '../../config/nx-json';
2
2
  import { VersionOptions } from './command-object';
3
+ import { ReleaseGraph } from './utils/release-graph';
3
4
  import { VersionData } from './utils/shared';
4
- export declare const validReleaseVersionPrefixes: readonly ["auto", "", "~", "^", "="];
5
5
  export interface NxReleaseVersionResult {
6
6
  /**
7
7
  * In one specific (and very common) case, an overall workspace version is relevant, for example when there is
@@ -15,6 +15,11 @@ export interface NxReleaseVersionResult {
15
15
  */
16
16
  workspaceVersion: (string | null) | undefined;
17
17
  projectsVersionData: VersionData;
18
+ /**
19
+ * The release graph that was built or reused during this operation.
20
+ * This can be passed to subsequent operations (changelog, publish) to avoid recomputing.
21
+ */
22
+ releaseGraph: ReleaseGraph;
18
23
  }
19
24
  export declare const releaseVersionCLIHandler: (args: VersionOptions) => Promise<number>;
20
25
  export declare function createAPI(overrideReleaseConfig: NxReleaseConfiguration): (args: VersionOptions) => Promise<NxReleaseVersionResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/command-line/release/version.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,sBAAsB,EAGvB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAkBlD,OAAO,EACL,WAAW,EAKZ,MAAM,gBAAgB,CAAC;AAWxB,eAAO,MAAM,2BAA2B,sCAAuC,CAAC;AAEhF,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;OASG;IACH,gBAAgB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9C,mBAAmB,EAAE,WAAW,CAAC;CAClC;AAED,eAAO,MAAM,wBAAwB,GAAI,MAAM,cAAc,oBACN,CAAC;AAExD,wBAAgB,SAAS,CAAC,qBAAqB,EAAE,sBAAsB,IAOnE,MAAM,cAAc,KACnB,OAAO,CAAC,sBAAsB,CAAC,CA2VnC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/command-line/release/version.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,sBAAsB,EAGvB,MAAM,sBAAsB,CAAC;AAU9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAclD,OAAO,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EACL,WAAW,EAKZ,MAAM,gBAAgB,CAAC;AAKxB,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;OASG;IACH,gBAAgB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9C,mBAAmB,EAAE,WAAW,CAAC;IACjC;;;OAGG;IACH,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,eAAO,MAAM,wBAAwB,GAAI,MAAM,cAAc,oBACN,CAAC;AAExD,wBAAgB,SAAS,CAAC,qBAAqB,EAAE,sBAAsB,IAOnE,MAAM,cAAc,KACnB,OAAO,CAAC,sBAAsB,CAAC,CAyWnC"}
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.releaseVersionCLIHandler = exports.validReleaseVersionPrefixes = void 0;
3
+ exports.releaseVersionCLIHandler = void 0;
4
4
  exports.createAPI = createAPI;
5
5
  const chalk = require("chalk");
6
6
  const node_child_process_1 = require("node:child_process");
7
7
  const node_fs_1 = require("node:fs");
8
8
  const nx_json_1 = require("../../config/nx-json");
9
+ const run_commands_impl_1 = require("../../executors/run-commands/run-commands.impl");
9
10
  const format_changed_files_with_prettier_if_available_1 = require("../../generators/internal-utils/format-changed-files-with-prettier-if-available");
10
11
  const tree_1 = require("../../generators/tree");
11
12
  const file_map_utils_1 = require("../../project-graph/file-map-utils");
@@ -16,20 +17,15 @@ const path_1 = require("../../utils/path");
16
17
  const workspace_root_1 = require("../../utils/workspace-root");
17
18
  const config_1 = require("./config/config");
18
19
  const deep_merge_json_1 = require("./config/deep-merge-json");
19
- const filter_release_groups_1 = require("./config/filter-release-groups");
20
20
  const version_plans_1 = require("./config/version-plans");
21
21
  const git_1 = require("./utils/git");
22
22
  const print_changes_1 = require("./utils/print-changes");
23
23
  const print_config_1 = require("./utils/print-config");
24
+ const release_graph_1 = require("./utils/release-graph");
24
25
  const resolve_nx_json_error_message_1 = require("./utils/resolve-nx-json-error-message");
25
26
  const shared_1 = require("./utils/shared");
26
- const version_legacy_1 = require("./version-legacy");
27
- const release_group_processor_1 = require("./version/release-group-processor");
28
- const use_legacy_versioning_1 = require("./config/use-legacy-versioning");
29
27
  const version_plan_utils_1 = require("./utils/version-plan-utils");
30
- const LARGE_BUFFER = 1024 * 1000000;
31
- // Reexport some utils for use in plugin release-version generator implementations
32
- exports.validReleaseVersionPrefixes = ['auto', '', '~', '^', '='];
28
+ const release_group_processor_1 = require("./version/release-group-processor");
33
29
  const releaseVersionCLIHandler = (args) => (0, handle_errors_1.handleErrors)(args.verbose, () => createAPI({})(args));
34
30
  exports.releaseVersionCLIHandler = releaseVersionCLIHandler;
35
31
  function createAPI(overrideReleaseConfig) {
@@ -42,11 +38,10 @@ function createAPI(overrideReleaseConfig) {
42
38
  const projectGraph = await (0, project_graph_1.createProjectGraphAsync)({ exitOnError: true });
43
39
  const nxJson = (0, nx_json_1.readNxJson)();
44
40
  const userProvidedReleaseConfig = (0, deep_merge_json_1.deepMergeJson)(nxJson.release ?? {}, overrideReleaseConfig ?? {});
45
- const USE_LEGACY_VERSIONING = (0, use_legacy_versioning_1.shouldUseLegacyVersioning)(userProvidedReleaseConfig);
46
41
  // Apply default configuration to any optional user configuration
47
42
  const { error: configError, nxReleaseConfig } = await (0, config_1.createNxReleaseConfig)(projectGraph, await (0, file_map_utils_1.createProjectFileMapUsingProjectGraph)(projectGraph), userProvidedReleaseConfig);
48
43
  if (configError) {
49
- return await (0, config_1.handleNxReleaseConfigError)(configError, USE_LEGACY_VERSIONING);
44
+ return await (0, config_1.handleNxReleaseConfigError)(configError);
50
45
  }
51
46
  // --print-config exits directly as it is not designed to be combined with any other programmatic operations
52
47
  if (args.printConfig) {
@@ -56,10 +51,6 @@ function createAPI(overrideReleaseConfig) {
56
51
  isDebug: args.printConfig === 'debug',
57
52
  });
58
53
  }
59
- // TODO(v22): Remove support for the legacy versioning implementation in Nx v22
60
- if (USE_LEGACY_VERSIONING) {
61
- return await (0, version_legacy_1.releaseVersionLegacy)(projectGraph, args, nxJson, nxReleaseConfig, userProvidedReleaseConfig);
62
- }
63
54
  // The nx release top level command will always override these three git args. This is how we can tell
64
55
  // if the top level release command was used or if the user is using the changelog subcommand.
65
56
  // If the user explicitly overrides these args, then it doesn't matter if the top level config is set,
@@ -78,27 +69,40 @@ function createAPI(overrideReleaseConfig) {
78
69
  });
79
70
  process.exit(1);
80
71
  }
81
- const { error: filterError, filterLog, releaseGroups, releaseGroupToFilteredProjects, } = (0, filter_release_groups_1.filterReleaseGroups)(projectGraph, nxReleaseConfig, args.projects, args.groups);
82
- if (filterError) {
83
- output_1.output.error(filterError);
84
- process.exit(1);
85
- }
86
- if (filterLog &&
72
+ const tree = new tree_1.FsTree(workspace_root_1.workspaceRoot, args.verbose);
73
+ // Use pre-built release graph if provided, otherwise create a new one
74
+ const releaseGraph = args.releaseGraph ||
75
+ (await (0, release_graph_1.createReleaseGraph)({
76
+ tree,
77
+ projectGraph,
78
+ nxReleaseConfig,
79
+ filters: {
80
+ projects: args.projects,
81
+ groups: args.groups,
82
+ },
83
+ firstRelease: args.firstRelease,
84
+ verbose: args.verbose,
85
+ preid: args.preid,
86
+ versionActionsOptionsOverrides: args.versionActionsOptionsOverrides,
87
+ }));
88
+ // Display filter log if filters were applied
89
+ if (releaseGraph.filterLog &&
87
90
  process.env.NX_RELEASE_INTERNAL_SUPPRESS_FILTER_LOG !== 'true') {
88
- output_1.output.note(filterLog);
91
+ output_1.output.note(releaseGraph.filterLog);
89
92
  }
90
93
  if (!args.specifier) {
91
94
  const rawVersionPlans = await (0, version_plans_1.readRawVersionPlans)();
92
- await (0, version_plans_1.setResolvedVersionPlansOnGroups)(rawVersionPlans, releaseGroups, Object.keys(projectGraph.nodes), args.verbose);
95
+ await (0, version_plans_1.setResolvedVersionPlansOnGroups)(rawVersionPlans, releaseGraph.releaseGroups, Object.keys(projectGraph.nodes), args.verbose);
93
96
  // Validate version plans against the filter after resolution
94
- const versionPlanValidationError = (0, version_plan_utils_1.validateResolvedVersionPlansAgainstFilter)(releaseGroups, releaseGroupToFilteredProjects);
97
+ const versionPlanValidationError = (0, version_plan_utils_1.validateResolvedVersionPlansAgainstFilter)(releaseGraph.releaseGroups, releaseGraph.releaseGroupToFilteredProjects);
95
98
  if (versionPlanValidationError) {
96
99
  output_1.output.error(versionPlanValidationError);
97
100
  process.exit(1);
98
101
  }
99
102
  }
100
103
  else {
101
- if (args.verbose && releaseGroups.some((g) => !!g.versionPlans)) {
104
+ if (args.verbose &&
105
+ releaseGraph.releaseGroups.some((g) => !!g.versionPlans)) {
102
106
  console.log(`Skipping version plan discovery as a specifier was provided`);
103
107
  }
104
108
  }
@@ -115,14 +119,24 @@ function createAPI(overrideReleaseConfig) {
115
119
  });
116
120
  /**
117
121
  * Run any configured pre-version command for the selected release groups
122
+ * in topological order
118
123
  */
119
- for (const releaseGroup of releaseGroups) {
124
+ for (const groupName of releaseGraph.sortedReleaseGroups) {
125
+ const releaseGroup = releaseGraph.releaseGroups.find((g) => g.name === groupName);
126
+ if (!releaseGroup) {
127
+ // Release group was filtered out, skip
128
+ continue;
129
+ }
120
130
  runPreVersionCommand(releaseGroup.version?.groupPreVersionCommand, {
121
131
  dryRun: args.dryRun,
122
132
  verbose: args.verbose,
123
133
  }, releaseGroup);
124
134
  }
125
- const tree = new tree_1.FsTree(workspace_root_1.workspaceRoot, args.verbose);
135
+ /**
136
+ * Validate the resolved data for the release graph, e.g. that manifest files exist for all projects that will be processed.
137
+ * This happens after preVersionCommands run, as those commands may create manifest files needed for versioning.
138
+ */
139
+ await releaseGraph.validate(tree);
126
140
  const commitMessage = args.gitCommitMessage || nxReleaseConfig.version.git.commitMessage;
127
141
  /**
128
142
  * additionalChangedFiles are files which need to be updated as a side-effect of versioning (such as package manager lock files),
@@ -130,7 +144,7 @@ function createAPI(overrideReleaseConfig) {
130
144
  */
131
145
  const additionalChangedFiles = new Set();
132
146
  const additionalDeletedFiles = new Set();
133
- const processor = new release_group_processor_1.ReleaseGroupProcessor(tree, projectGraph, nxReleaseConfig, releaseGroups, releaseGroupToFilteredProjects, {
147
+ const processor = new release_group_processor_1.ReleaseGroupProcessor(tree, projectGraph, nxReleaseConfig, releaseGraph, {
134
148
  dryRun: args.dryRun,
135
149
  verbose: args.verbose,
136
150
  firstRelease: args.firstRelease,
@@ -143,7 +157,6 @@ function createAPI(overrideReleaseConfig) {
143
157
  versionActionsOptionsOverrides: args.versionActionsOptionsOverrides,
144
158
  });
145
159
  try {
146
- await processor.init();
147
160
  await processor.processGroups();
148
161
  // Delete processed version plan files if applicable
149
162
  if (args.deleteVersionPlans) {
@@ -181,8 +194,14 @@ function createAPI(overrideReleaseConfig) {
181
194
  }
182
195
  /**
183
196
  * Run any configured docker pre-version command for the selected release groups
197
+ * in topological order (dependencies before dependents)
184
198
  */
185
- for (const releaseGroup of releaseGroups) {
199
+ for (const groupName of releaseGraph.sortedReleaseGroups) {
200
+ const releaseGroup = releaseGraph.releaseGroups.find((g) => g.name === groupName);
201
+ if (!releaseGroup) {
202
+ // Release group was filtered out, skip
203
+ continue;
204
+ }
186
205
  if (releaseGroup.docker?.groupPreVersionCommand) {
187
206
  runPreVersionCommand(releaseGroup.docker.groupPreVersionCommand, {
188
207
  dryRun: args.dryRun,
@@ -191,7 +210,8 @@ function createAPI(overrideReleaseConfig) {
191
210
  }
192
211
  }
193
212
  // TODO(colum): Remove when Docker support is no longer experimental
194
- if (nxReleaseConfig.docker || releaseGroups.some((rg) => rg.docker)) {
213
+ if (nxReleaseConfig.docker ||
214
+ releaseGraph.releaseGroups.some((rg) => rg.docker)) {
195
215
  output_1.output.warn({
196
216
  title: 'Warning',
197
217
  bodyLines: [
@@ -203,15 +223,15 @@ function createAPI(overrideReleaseConfig) {
203
223
  const versionData = processor.getVersionData();
204
224
  // Resolve any git tags as early as possible so that we can hard error in case of any duplicates before reaching the actual git command
205
225
  const gitTagValues = args.gitTag ?? nxReleaseConfig.version.git.tag
206
- ? (0, shared_1.createGitTagValues)(releaseGroups, releaseGroupToFilteredProjects, versionData)
226
+ ? (0, shared_1.createGitTagValues)(releaseGraph.releaseGroups, releaseGraph.releaseGroupToFilteredProjects, versionData)
207
227
  : [];
208
228
  (0, shared_1.handleDuplicateGitTags)(gitTagValues);
209
229
  // Only applicable when there is a single release group with a fixed relationship
210
230
  let workspaceVersion = undefined;
211
- if (releaseGroups.length === 1) {
212
- const releaseGroup = releaseGroups[0];
231
+ if (releaseGraph.releaseGroups.length === 1) {
232
+ const releaseGroup = releaseGraph.releaseGroups[0];
213
233
  if (releaseGroup.projectsRelationship === 'fixed') {
214
- const releaseGroupProjectNames = Array.from(releaseGroupToFilteredProjects.get(releaseGroup));
234
+ const releaseGroupProjectNames = Array.from(releaseGraph.releaseGroupToFilteredProjects.get(releaseGroup));
215
235
  workspaceVersion = versionData[releaseGroupProjectNames[0]].newVersion; // all projects have the same version so we can just grab the first
216
236
  }
217
237
  }
@@ -225,6 +245,7 @@ function createAPI(overrideReleaseConfig) {
225
245
  return {
226
246
  workspaceVersion,
227
247
  projectsVersionData: versionData,
248
+ releaseGraph,
228
249
  };
229
250
  }
230
251
  if (args.gitCommit ?? nxReleaseConfig.version.git.commit) {
@@ -233,7 +254,7 @@ function createAPI(overrideReleaseConfig) {
233
254
  deletedFiles,
234
255
  isDryRun: !!args.dryRun,
235
256
  isVerbose: !!args.verbose,
236
- gitCommitMessages: (0, shared_1.createCommitMessageValues)(releaseGroups, releaseGroupToFilteredProjects, versionData, commitMessage),
257
+ gitCommitMessages: (0, shared_1.createCommitMessageValues)(releaseGraph.releaseGroups, releaseGraph.releaseGroupToFilteredProjects, versionData, commitMessage),
237
258
  gitCommitArgs: args.gitCommitArgs || nxReleaseConfig.version.git.commitArgs,
238
259
  });
239
260
  }
@@ -270,6 +291,7 @@ function createAPI(overrideReleaseConfig) {
270
291
  return {
271
292
  workspaceVersion,
272
293
  projectsVersionData: versionData,
294
+ releaseGraph,
273
295
  };
274
296
  };
275
297
  }
@@ -324,7 +346,7 @@ function runPreVersionCommand(preVersionCommand, { dryRun, verbose }, releaseGro
324
346
  try {
325
347
  (0, node_child_process_1.execSync)(preVersionCommand, {
326
348
  encoding: 'utf-8',
327
- maxBuffer: LARGE_BUFFER,
349
+ maxBuffer: run_commands_impl_1.LARGE_BUFFER,
328
350
  stdio,
329
351
  env,
330
352
  windowsHide: false,