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
package/migrations.json CHANGED
@@ -88,6 +88,11 @@
88
88
  "version": "21.1.0-beta.2",
89
89
  "description": "Adds **/nx-rules.mdc and **/nx.instructions.md to .gitignore if not present",
90
90
  "implementation": "./src/migrations/update-21-1-0/add-gitignore-entry"
91
+ },
92
+ "22-0-0-release-version-config-changes": {
93
+ "version": "22.0.0-beta.1",
94
+ "description": "Updates release version config based on the breaking changes in Nx v22",
95
+ "implementation": "./src/migrations/update-22-0-0/release-version-config-changes"
91
96
  }
92
97
  }
93
98
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nx",
3
- "version": "22.0.0-beta.2",
3
+ "version": "22.0.0-beta.4",
4
4
  "private": false,
5
5
  "description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
6
6
  "repository": {
@@ -38,7 +38,7 @@
38
38
  "@yarnpkg/lockfile": "^1.1.0",
39
39
  "@yarnpkg/parsers": "3.0.2",
40
40
  "@zkochan/js-yaml": "0.0.7",
41
- "axios": "^1.8.3",
41
+ "axios": "^1.12.0",
42
42
  "chalk": "^4.1.0",
43
43
  "cli-cursor": "3.1.0",
44
44
  "cli-spinners": "2.6.1",
@@ -83,16 +83,16 @@
83
83
  }
84
84
  },
85
85
  "optionalDependencies": {
86
- "@nx/nx-darwin-arm64": "22.0.0-beta.2",
87
- "@nx/nx-darwin-x64": "22.0.0-beta.2",
88
- "@nx/nx-freebsd-x64": "22.0.0-beta.2",
89
- "@nx/nx-linux-arm-gnueabihf": "22.0.0-beta.2",
90
- "@nx/nx-linux-arm64-gnu": "22.0.0-beta.2",
91
- "@nx/nx-linux-arm64-musl": "22.0.0-beta.2",
92
- "@nx/nx-linux-x64-gnu": "22.0.0-beta.2",
93
- "@nx/nx-linux-x64-musl": "22.0.0-beta.2",
94
- "@nx/nx-win32-arm64-msvc": "22.0.0-beta.2",
95
- "@nx/nx-win32-x64-msvc": "22.0.0-beta.2"
86
+ "@nx/nx-darwin-arm64": "22.0.0-beta.4",
87
+ "@nx/nx-darwin-x64": "22.0.0-beta.4",
88
+ "@nx/nx-freebsd-x64": "22.0.0-beta.4",
89
+ "@nx/nx-linux-arm-gnueabihf": "22.0.0-beta.4",
90
+ "@nx/nx-linux-arm64-gnu": "22.0.0-beta.4",
91
+ "@nx/nx-linux-arm64-musl": "22.0.0-beta.4",
92
+ "@nx/nx-linux-x64-gnu": "22.0.0-beta.4",
93
+ "@nx/nx-linux-x64-musl": "22.0.0-beta.4",
94
+ "@nx/nx-win32-arm64-msvc": "22.0.0-beta.4",
95
+ "@nx/nx-win32-x64-msvc": "22.0.0-beta.4"
96
96
  },
97
97
  "nx-migrations": {
98
98
  "migrations": "./migrations.json",
package/project.json CHANGED
@@ -67,7 +67,8 @@
67
67
  "production",
68
68
  "^production",
69
69
  {
70
- "dependentTasksOutputFiles": "**/*.node"
70
+ "dependentTasksOutputFiles": "**/*.node",
71
+ "transitive": true
71
72
  }
72
73
  ],
73
74
  "executor": "nx:run-commands",
@@ -87,7 +87,14 @@
87
87
  "default": true
88
88
  },
89
89
  "autoExit": {
90
- "oneOf": [{ "type": "boolean" }, { "type": "number" }],
90
+ "oneOf": [
91
+ {
92
+ "type": "boolean"
93
+ },
94
+ {
95
+ "type": "number"
96
+ }
97
+ ],
91
98
  "description": "Whether to exit the TUI automatically after all tasks finish. If set to `true`, the TUI will exit immediately. If set to `false` the TUI will not automatically exit. If set to a number, an interruptible countdown popup will be shown for that many seconds before the TUI exits.",
92
99
  "default": 3
93
100
  }
@@ -211,6 +218,11 @@
211
218
  "type": "boolean",
212
219
  "description": "Whether to require semver to be used for the release tag pattern. If set to false, the release tag pattern will not be checked for semver compliance."
213
220
  },
221
+ "releaseTagPatternPreferDockerVersion": {
222
+ "type": ["boolean", "string"],
223
+ "enum": [true, false, "both"],
224
+ "description": "Controls how docker versions are used relative to semver versions when creating git tags and changelog entries. Set to true to use only the docker version, false to use only the semver version, or 'both' to create tags and changelog entries for both docker and semver versions. By default, this is set to true when docker configuration is present, and false otherwise."
225
+ },
214
226
  "releaseTagPatternStrictPreid": {
215
227
  "$ref": "#/definitions/NxReleaseReleaseTagPatternStrictPreidConfiguration"
216
228
  },
@@ -319,6 +331,11 @@
319
331
  "type": "boolean",
320
332
  "description": "Whether to require semver to be used for the release tag pattern. If set to false, the release tag pattern will not be checked for semver compliance."
321
333
  },
334
+ "releaseTagPatternPreferDockerVersion": {
335
+ "type": ["boolean", "string"],
336
+ "enum": [true, false, "both"],
337
+ "description": "Controls how docker versions are used relative to semver versions when creating git tags and changelog entries. Set to true to use only the docker version, false to use only the semver version, or 'both' to create tags and changelog entries for both docker and semver versions. By default, this is set to true when docker configuration is present, and false otherwise."
338
+ },
322
339
  "releaseTagPatternStrictPreid": {
323
340
  "$ref": "#/definitions/NxReleaseReleaseTagPatternStrictPreidConfiguration"
324
341
  },
@@ -752,181 +769,240 @@
752
769
  },
753
770
  "NxReleaseVersionConfiguration": {
754
771
  "type": "object",
755
- "$comment": "The configuration for versioning is dynamic depending on the value of the useLegacyVersioning property. Through trial and error the best in editor DX seems to come from having the if/else at the top level and explicitly include all possible properties and apply additionalProperties false in each case.",
756
772
  "description": "Configuration for the versioning phase of releases.",
757
- "if": {
758
- "$comment": "When using the latest versioning implementation a lot of configuration has been able to move directly onto the version property.",
759
- "properties": {
760
- "useLegacyVersioning": {
761
- "const": false
762
- }
763
- }
764
- },
765
- "then": {
766
- "additionalProperties": false,
767
- "properties": {
768
- "useLegacyVersioning": {
769
- "type": "boolean",
770
- "description": "Whether to use the legacy versioning strategy. This value will be true in Nx v20 and false in Nx v21. The legacy versioning implementation will be removed in Nx v22, as will this flag.",
771
- "default": false
772
- },
773
- "conventionalCommits": {
774
- "type": "boolean",
775
- "description": "Shorthand for enabling the current version of projects to be resolved from git tags, and the next version to be determined by analyzing commit messages according to the Conventional Commits specification.",
776
- "default": false
777
- },
778
- "git": {
779
- "$ref": "#/definitions/NxReleaseGitConfiguration"
780
- },
781
- "preVersionCommand": {
782
- "type": "string",
783
- "description": "A command to run after validation of nx release configuration, but before versioning begins. Useful for preparing build artifacts. If --dry-run is passed, the command is still executed, but with the NX_DRY_RUN environment variable set to 'true'."
784
- },
785
- "specifierSource": {
786
- "type": "string",
787
- "enum": ["prompt", "conventional-commits", "version-plans"],
788
- "default": "prompt",
789
- "description": "The source to use for determining the specifier to use when versioning. 'prompt' is the default and will interactively prompt the user for an explicit/imperative specifier. 'conventional-commits' will attempt determine a specifier from commit messages conforming to the Conventional Commits specification. 'version-plans' will determine the specifier from the version plan files available on disk."
790
- },
791
- "manifestRootsToUpdate": {
792
- "type": "array",
793
- "items": {
794
- "oneOf": [
795
- {
796
- "type": "string",
797
- "description": "Path to the directory containing a manifest file to update. Supports placeholders like {projectRoot} and {projectName}."
798
- },
799
- {
800
- "type": "object",
801
- "properties": {
802
- "path": {
803
- "type": "string",
804
- "description": "Path to the directory containing a manifest file to update. Supports placeholders like {projectRoot} and {projectName}."
805
- },
806
- "preserveLocalDependencyProtocols": {
807
- "type": "boolean",
808
- "description": "Whether to preserve local dependency references using protocols like 'workspace:' or 'file:'. Set this to false for dist files that need to be published if not using a package manager that swaps references at publish time like pnpm or bun.",
809
- "default": true
810
- }
773
+ "additionalProperties": false,
774
+ "properties": {
775
+ "conventionalCommits": {
776
+ "type": "boolean",
777
+ "description": "Shorthand for enabling the current version of projects to be resolved from git tags, and the next version to be determined by analyzing commit messages according to the Conventional Commits specification.",
778
+ "default": false
779
+ },
780
+ "git": {
781
+ "$ref": "#/definitions/NxReleaseGitConfiguration"
782
+ },
783
+ "preVersionCommand": {
784
+ "type": "string",
785
+ "description": "A command to run after validation of nx release configuration, but before versioning begins. Useful for preparing build artifacts. If --dry-run is passed, the command is still executed, but with the NX_DRY_RUN environment variable set to 'true'."
786
+ },
787
+ "specifierSource": {
788
+ "type": "string",
789
+ "enum": ["prompt", "conventional-commits", "version-plans"],
790
+ "default": "prompt",
791
+ "description": "The source to use for determining the specifier to use when versioning. 'prompt' is the default and will interactively prompt the user for an explicit/imperative specifier. 'conventional-commits' will attempt determine a specifier from commit messages conforming to the Conventional Commits specification. 'version-plans' will determine the specifier from the version plan files available on disk."
792
+ },
793
+ "manifestRootsToUpdate": {
794
+ "type": "array",
795
+ "items": {
796
+ "oneOf": [
797
+ {
798
+ "type": "string",
799
+ "description": "Path to the directory containing a manifest file to update. Supports placeholders like {projectRoot} and {projectName}."
800
+ },
801
+ {
802
+ "type": "object",
803
+ "properties": {
804
+ "path": {
805
+ "type": "string",
806
+ "description": "Path to the directory containing a manifest file to update. Supports placeholders like {projectRoot} and {projectName}."
811
807
  },
812
- "required": ["path"],
813
- "additionalProperties": false
814
- }
815
- ]
816
- },
817
- "description": "A list of directories containing manifest files (such as package.json) to apply updates to when versioning. By default, only the project root will be used, but you could customize this to only version a manifest in a dist directory, or even version multiple manifests in different directories, such as both source and dist."
818
- },
819
- "currentVersionResolver": {
820
- "type": "string",
821
- "enum": ["registry", "disk", "git-tag", "none"],
822
- "description": "The resolver to use for determining the current version of a project during versioning. This is needed for versioning approaches which involve relatively modifying a current version to arrive at a new version, such as semver bumps like 'patch', 'minor' etc. Using 'none' explicitly declares that the current version is not needed to compute the new version, and should only be used with appropriate version actions implementations that support it."
823
- },
824
- "currentVersionResolverMetadata": {
825
- "type": "object",
826
- "additionalProperties": true,
827
- "description": "Metadata to provide to the configured currentVersionResolver to help it in determining the current version. What to pass here is specific to each resolver."
828
- },
829
- "fallbackCurrentVersionResolver": {
830
- "type": "string",
831
- "enum": ["disk"],
832
- "description": "The fallback version resolver to use when the configured currentVersionResolver fails to resolve the current version."
833
- },
834
- "versionPrefix": {
835
- "type": "string",
836
- "enum": ["auto", "", "~", "^", "="],
837
- "default": "auto",
838
- "description": "The prefix to use when versioning dependencies. This can be one of the following: auto, '', '~', '^', '=', where auto means the existing prefix will be preserved."
839
- },
840
- "deleteVersionPlans": {
841
- "type": "boolean",
842
- "description": "Whether to delete the processed version plans file after versioning is complete. This is false by default because the version plans are also needed for changelog generation.",
843
- "default": false
844
- },
845
- "updateDependents": {
846
- "type": "string",
847
- "enum": ["never", "auto"],
848
- "default": "auto",
849
- "description": "When versioning independent projects, this controls whether to update their dependents (i.e. the things that depend on them). 'never' means no dependents will be updated (unless they happen to be versioned directly as well). 'auto' is the default and will cause dependents to be updated (a patch version bump) when a dependency is versioned."
850
- },
851
- "logUnchangedProjects": {
852
- "type": "boolean",
853
- "description": "Whether to log projects that have not changed during versioning.",
854
- "default": true
855
- },
856
- "preserveLocalDependencyProtocols": {
857
- "type": "boolean",
858
- "description": "Whether to preserve local dependency protocols (e.g. file references, or the `workspace:` protocol in package.json files) of local dependencies when updating them during versioning. This was false by default in legacy versioning, but is true by default now.",
859
- "default": true
860
- },
861
- "preserveMatchingDependencyRanges": {
862
- "type": ["boolean", "array"],
863
- "description": "Whether to preserve matching dependency ranges when updating them during versioning. This is false by default. (e.g. The new version will be '1.2.0' and the current version range in dependents is already '^1.0.0'. Therefore, the manifest file is not updated.)",
864
- "default": false,
865
- "items": {
866
- "type": "string",
867
- "enum": [
868
- "dependencies",
869
- "devDependencies",
870
- "peerDependencies",
871
- "optionalDependencies"
872
- ]
873
- }
874
- },
875
- "versionActions": {
876
- "type": "string",
877
- "description": "The path to the version actions implementation to use for releasing all projects by default. This can also be overridden on the release group and project levels.",
878
- "default": "@nx/js/src/release"
879
- },
880
- "versionActionsOptions": {
881
- "type": "object",
882
- "description": "The specific options that are defined by each version actions implementation. They will be passed to the version actions implementation when running a release.",
883
- "additionalProperties": true
884
- }
885
- }
886
- },
887
- "else": {
888
- "properties": {
889
- "useLegacyVersioning": {
890
- "type": "boolean",
891
- "description": "Whether to use the legacy versioning strategy. This value was true in Nx v20 and became false in Nx v21. The legacy versioning implementation will be removed in Nx v22, as will this flag.",
892
- "default": false
893
- },
894
- "conventionalCommits": {
895
- "type": "boolean",
896
- "description": "Shorthand for enabling the current version of projects to be resolved from git tags, and the next version to be determined by analyzing commit messages according to the Conventional Commits specification.",
897
- "default": false
898
- },
899
- "git": {
900
- "$ref": "#/definitions/NxReleaseGitConfiguration"
901
- },
902
- "preVersionCommand": {
903
- "type": "string",
904
- "description": "A command to run after validation of nx release configuration, but before versioning begins. Useful for preparing build artifacts. If --dry-run is passed, the command is still executed, but with the NX_DRY_RUN environment variable set to 'true'."
808
+ "preserveLocalDependencyProtocols": {
809
+ "type": "boolean",
810
+ "description": "Whether to preserve local dependency references using protocols like 'workspace:' or 'file:'. Set this to false for dist files that need to be published if not using a package manager that swaps references at publish time like pnpm or bun.",
811
+ "default": true
812
+ }
813
+ },
814
+ "required": ["path"],
815
+ "additionalProperties": false
816
+ }
817
+ ]
905
818
  },
906
- "generator": {
819
+ "description": "A list of directories containing manifest files (such as package.json) to apply updates to when versioning. By default, only the project root will be used, but you could customize this to only version a manifest in a dist directory, or even version multiple manifests in different directories, such as both source and dist."
820
+ },
821
+ "currentVersionResolver": {
822
+ "type": "string",
823
+ "enum": ["registry", "disk", "git-tag", "none"],
824
+ "description": "The resolver to use for determining the current version of a project during versioning. This is needed for versioning approaches which involve relatively modifying a current version to arrive at a new version, such as semver bumps like 'patch', 'minor' etc. Using 'none' explicitly declares that the current version is not needed to compute the new version, and should only be used with appropriate version actions implementations that support it."
825
+ },
826
+ "currentVersionResolverMetadata": {
827
+ "type": "object",
828
+ "additionalProperties": true,
829
+ "description": "Metadata to provide to the configured currentVersionResolver to help it in determining the current version. What to pass here is specific to each resolver."
830
+ },
831
+ "fallbackCurrentVersionResolver": {
832
+ "type": "string",
833
+ "enum": ["disk"],
834
+ "description": "The fallback version resolver to use when the configured currentVersionResolver fails to resolve the current version."
835
+ },
836
+ "versionPrefix": {
837
+ "type": "string",
838
+ "enum": ["auto", "", "~", "^", "="],
839
+ "default": "auto",
840
+ "description": "The prefix to use when versioning dependencies. This can be one of the following: auto, '', '~', '^', '=', where auto means the existing prefix will be preserved."
841
+ },
842
+ "deleteVersionPlans": {
843
+ "type": "boolean",
844
+ "description": "Whether to delete the processed version plans file after versioning is complete. This is false by default because the version plans are also needed for changelog generation.",
845
+ "default": false
846
+ },
847
+ "updateDependents": {
848
+ "type": "string",
849
+ "enum": ["never", "auto", "always"],
850
+ "default": "auto",
851
+ "description": "When versioning independent projects, this controls whether to update their dependents (i.e. the things that depend on them). 'never' means no dependents will be updated (unless they happen to be versioned directly as well). 'auto' is the default and will cause dependents to be updated (a patch version bump) when a dependency is versioned, as long as a group or projects filter is not applied that does not include them. 'always' will cause dependents to be updated (a patch version bump) when a dependency is versioned, even if they are not included in the group or projects filter."
852
+ },
853
+ "logUnchangedProjects": {
854
+ "type": "boolean",
855
+ "description": "Whether to log projects that have not changed during versioning.",
856
+ "default": true
857
+ },
858
+ "preserveLocalDependencyProtocols": {
859
+ "type": "boolean",
860
+ "description": "Whether to preserve local dependency protocols (e.g. file references, or the `workspace:` protocol in package.json files) of local dependencies when updating them during versioning.",
861
+ "default": true
862
+ },
863
+ "preserveMatchingDependencyRanges": {
864
+ "type": ["boolean", "array"],
865
+ "description": "Whether to preserve matching dependency ranges when updating them during versioning. This is false by default. (e.g. The new version will be '1.2.0' and the current version range in dependents is already '^1.0.0'. Therefore, the manifest file is not updated.)",
866
+ "default": false,
867
+ "items": {
907
868
  "type": "string",
908
- "description": "The generator implementation to use for versioning.",
909
- "default": "@nx/js:release-version"
910
- },
911
- "generatorOptions": {
912
- "type": "object",
913
- "description": "These options will be passed to the configured \"release.version.generator\" (which will be \"@nx/js:release-version\" if not set explicitly).",
914
- "additionalProperties": true
869
+ "enum": [
870
+ "dependencies",
871
+ "devDependencies",
872
+ "peerDependencies",
873
+ "optionalDependencies"
874
+ ]
915
875
  }
916
876
  },
917
- "additionalProperties": false
877
+ "versionActions": {
878
+ "type": "string",
879
+ "description": "The path to the version actions implementation to use for releasing all projects by default. This can also be overridden on the release group and project levels.",
880
+ "default": "@nx/js/src/release"
881
+ },
882
+ "versionActionsOptions": {
883
+ "type": "object",
884
+ "description": "The specific options that are defined by each version actions implementation. They will be passed to the version actions implementation when running a release.",
885
+ "additionalProperties": true
886
+ }
918
887
  }
919
888
  },
920
889
  "NxReleaseGroupVersionConfiguration": {
921
890
  "type": "object",
922
- "$comment": "We need to improve this configuration definition to be more precise once legacy versioning is removed. Right now it needs to be left open and runtime validation will ensure correct behavior.",
923
891
  "properties": {
924
892
  "groupPreVersionCommand": {
925
893
  "type": "string",
926
894
  "description": "A command to run after validation of nx release configuration AND after the release.version.preVersionCommand (if any), but before versioning begins for this specific group. Useful for preparing build artifacts for the group. If --dry-run is passed, the command is still executed, but with the NX_DRY_RUN environment variable set to 'true'."
895
+ },
896
+ "conventionalCommits": {
897
+ "type": "boolean",
898
+ "description": "Shorthand for enabling the current version of projects to be resolved from git tags, and the next version to be determined by analyzing commit messages according to the Conventional Commits specification.",
899
+ "default": false
900
+ },
901
+ "git": {
902
+ "$ref": "#/definitions/NxReleaseGitConfiguration"
903
+ },
904
+ "specifierSource": {
905
+ "type": "string",
906
+ "enum": ["prompt", "conventional-commits", "version-plans"],
907
+ "default": "prompt",
908
+ "description": "The source to use for determining the specifier to use when versioning. 'prompt' is the default and will interactively prompt the user for an explicit/imperative specifier. 'conventional-commits' will attempt determine a specifier from commit messages conforming to the Conventional Commits specification. 'version-plans' will determine the specifier from the version plan files available on disk."
909
+ },
910
+ "manifestRootsToUpdate": {
911
+ "type": "array",
912
+ "items": {
913
+ "oneOf": [
914
+ {
915
+ "type": "string",
916
+ "description": "Path to the directory containing a manifest file to update. Supports placeholders like {projectRoot} and {projectName}."
917
+ },
918
+ {
919
+ "type": "object",
920
+ "properties": {
921
+ "path": {
922
+ "type": "string",
923
+ "description": "Path to the directory containing a manifest file to update. Supports placeholders like {projectRoot} and {projectName}."
924
+ },
925
+ "preserveLocalDependencyProtocols": {
926
+ "type": "boolean",
927
+ "description": "Whether to preserve local dependency references using protocols like 'workspace:' or 'file:'. Set this to false for dist files that need to be published if not using a package manager that swaps references at publish time like pnpm or bun.",
928
+ "default": true
929
+ }
930
+ },
931
+ "required": ["path"],
932
+ "additionalProperties": false
933
+ }
934
+ ]
935
+ },
936
+ "description": "A list of directories containing manifest files (such as package.json) to apply updates to when versioning. By default, only the project root will be used, but you could customize this to only version a manifest in a dist directory, or even version multiple manifests in different directories, such as both source and dist."
937
+ },
938
+ "currentVersionResolver": {
939
+ "type": "string",
940
+ "enum": ["registry", "disk", "git-tag", "none"],
941
+ "description": "The resolver to use for determining the current version of a project during versioning. This is needed for versioning approaches which involve relatively modifying a current version to arrive at a new version, such as semver bumps like 'patch', 'minor' etc. Using 'none' explicitly declares that the current version is not needed to compute the new version, and should only be used with appropriate version actions implementations that support it."
942
+ },
943
+ "currentVersionResolverMetadata": {
944
+ "type": "object",
945
+ "additionalProperties": true,
946
+ "description": "Metadata to provide to the configured currentVersionResolver to help it in determining the current version. What to pass here is specific to each resolver."
947
+ },
948
+ "fallbackCurrentVersionResolver": {
949
+ "type": "string",
950
+ "enum": ["disk"],
951
+ "description": "The fallback version resolver to use when the configured currentVersionResolver fails to resolve the current version."
952
+ },
953
+ "versionPrefix": {
954
+ "type": "string",
955
+ "enum": ["auto", "", "~", "^", "="],
956
+ "default": "auto",
957
+ "description": "The prefix to use when versioning dependencies. This can be one of the following: auto, '', '~', '^', '=', where auto means the existing prefix will be preserved."
958
+ },
959
+ "deleteVersionPlans": {
960
+ "type": "boolean",
961
+ "description": "Whether to delete the processed version plans file after versioning is complete. This is false by default because the version plans are also needed for changelog generation.",
962
+ "default": false
963
+ },
964
+ "updateDependents": {
965
+ "type": "string",
966
+ "enum": ["never", "auto"],
967
+ "default": "auto",
968
+ "description": "When versioning independent projects, this controls whether to update their dependents (i.e. the things that depend on them). 'never' means no dependents will be updated (unless they happen to be versioned directly as well). 'auto' is the default and will cause dependents to be updated (a patch version bump) when a dependency is versioned."
969
+ },
970
+ "logUnchangedProjects": {
971
+ "type": "boolean",
972
+ "description": "Whether to log projects that have not changed during versioning.",
973
+ "default": true
974
+ },
975
+ "preserveLocalDependencyProtocols": {
976
+ "type": "boolean",
977
+ "description": "Whether to preserve local dependency protocols (e.g. file references, or the `workspace:` protocol in package.json files) of local dependencies when updating them during versioning.",
978
+ "default": true
979
+ },
980
+ "preserveMatchingDependencyRanges": {
981
+ "type": ["boolean", "array"],
982
+ "description": "Whether to preserve matching dependency ranges when updating them during versioning. This is false by default. (e.g. The new version will be '1.2.0' and the current version range in dependents is already '^1.0.0'. Therefore, the manifest file is not updated.)",
983
+ "default": false,
984
+ "items": {
985
+ "type": "string",
986
+ "enum": [
987
+ "dependencies",
988
+ "devDependencies",
989
+ "peerDependencies",
990
+ "optionalDependencies"
991
+ ]
992
+ }
993
+ },
994
+ "versionActions": {
995
+ "type": "string",
996
+ "description": "The path to the version actions implementation to use for releasing all projects by default. This can also be overridden on the release group and project levels.",
997
+ "default": "@nx/js/src/release"
998
+ },
999
+ "versionActionsOptions": {
1000
+ "type": "object",
1001
+ "description": "The specific options that are defined by each version actions implementation. They will be passed to the version actions implementation when running a release.",
1002
+ "additionalProperties": true
927
1003
  }
928
1004
  },
929
- "additionalProperties": true
1005
+ "additionalProperties": false
930
1006
  },
931
1007
  "NxReleaseChangelogConfiguration": {
932
1008
  "type": "object",
@@ -1107,14 +1183,44 @@
1107
1183
  },
1108
1184
  "NxReleaseGroupDockerConfiguration": {
1109
1185
  "type": "object",
1110
- "$comment": "We need to improve this configuration definition to be more precise once legacy versioning is removed. Right now it needs to be left open and runtime validation will ensure correct behavior.",
1111
1186
  "properties": {
1112
1187
  "groupPreVersionCommand": {
1113
1188
  "type": "string",
1114
1189
  "description": "A command to run after validation of nx release configuration, but before docker versioning begins. Used for preparing docker build artifacts. If --dry-run is passed, the command is still executed, but with the NX_DRY_RUN environment variable set to 'true'. It will run in addition to the global `preVersionCommand`"
1190
+ },
1191
+ "skipVersionActions": {
1192
+ "oneOf": [
1193
+ {
1194
+ "type": "array",
1195
+ "items": {
1196
+ "type": "string"
1197
+ },
1198
+ "description": "Array of projects which should use a no-op VersionActions implementation rather than any potentially inferred by default or via Inference Plugins."
1199
+ },
1200
+ {
1201
+ "type": "boolean",
1202
+ "description": "When set to true, all projects in the release setup/release group will use a no-op VersionActions implementation."
1203
+ }
1204
+ ],
1205
+ "description": "Projects which should use a no-op VersionActions implementation rather than any potentially inferred by default or via Inference Plugins. Can be an array of project names (subset of projects in the release setup/release group) or a boolean (true means all projects)."
1206
+ },
1207
+ "versionSchemes": {
1208
+ "type": "object",
1209
+ "additionalProperties": {
1210
+ "type": "string"
1211
+ },
1212
+ "description": "Record of named version patterns to choose between when versioning docker projects. e.g. \"production\": \"{currentDate|YYMM.DD}.{shortCommitSha}\", \"hotfix\": \"{currentDate|YYMM.DD}-hotfix\""
1213
+ },
1214
+ "repositoryName": {
1215
+ "type": "string",
1216
+ "description": "Repository name for the image on the configured registry"
1217
+ },
1218
+ "registryUrl": {
1219
+ "type": "string",
1220
+ "description": "Url of the Docker Image/Container Registry to push images to. Defaults to Docker Hub."
1115
1221
  }
1116
1222
  },
1117
- "additionalProperties": true
1223
+ "additionalProperties": false
1118
1224
  }
1119
1225
  }
1120
1226
  }