If you wish to bypass the versioning prompt, you can configure Nx Release to defer to the Conventional Commits standard to determine the version bump automatically. This is useful for automating the versioning process in a CI/CD pipeline.
Enable Automatic Versioning
Section titled “Enable Automatic Versioning”To enable automatic versioning via conventional commits, set the release.version.conventionalCommits
property to true
in nx.json
:
{ "release": { "version": { "conventionalCommits": true } }}
Determine the Version Bump
Section titled “Determine the Version Bump”Nx Release will use the commit messages since the last release to determine the version bump. It will look at the type of each commit and determine the highest version bump from the following list:
- 'feat' -> minor
- 'fix' -> patch
For example, if the git history looks like this:
- fix(pkg-1): fix something - feat(pkg-2): add a new feature - chore(pkg-3): update docs - chore(release): 1.0.0
then Nx Release will select the minor
version bump and elect to release version 1.1.0. This is because there is a feat
commit since the last release of 1.0.0. To customize the version bump for different types of commits, or to trigger a version bump with custom commit types, see the Customize Conventional Commit Types recipe.
Usage with Independent Releases
Section titled “Usage with Independent Releases”If you are using independent releases, Nx Release will determine the version bump for each project independently. For example, if the git history looks like this:
- fix(pkg-1): fix something - feat(pkg-2): add a new feature - chore(pkg-3): update docs - chore(release): publish
Nx Release will select the patch
version bump for pkg-1
and minor
for pkg-2
. pkg-3
will be skipped entirely, since it has no feat
or fix
commits.
An example partial output of running Nx Release with independent releases and conventional commits enabled:
NX Running release version for project: pkg-1
pkg-1 🏷️ Resolved the current version as 0.4.0 from git tag "pkg-1@0.4.0", based on releaseTagPattern "{projectName}@{version}"pkg-1 📄 Resolved the specifier as "patch" using git history and the conventional commits standardpkg-1 ❓ Applied semver relative bump "patch", derived from conventional commits data, to get new version 0.4.1pkg-1 ✍️ New version 0.4.1 written to manifest: packages/pkg-1/package.json
NX Running release version for project: pkg-2
pkg-2 🏷️ Resolved the current version as 0.4.0 from git tag "pkg-2@0.4.0", based on releaseTagPattern "{projectName}@{version}"pkg-2 📄 Resolved the specifier as "minor" using git history and the conventional commits standardpkg-2 ❓ Applied semver relative bump "minor", derived from conventional commits data, to get new version 0.5.0pkg-2 ✍️ New version 0.5.0 written to manifest: packages/pkg-2/package.json
NX Running release version for project: pkg-3
pkg-3 🏷️ Resolved the current version as 0.4.0 from git tag "pkg-3@0.4.0", based on releaseTagPattern "{projectName}@{version}"pkg-3 🚫 No changes were detected using git history and the conventional commits standard