nx release: projectChangelogs.createRelease on a fixed release group creates one remote release per project on the same tag (last body wins)
Current Behavior
For a fixed release group with changelog.projectChangelogs.createRelease set, the top-level nx release creates the remote release once per project (packages/nx/src/command-line/release/release.ts, still on master):
for (const project of projectNodes) {
const changelog = changelogResult.projectChangelogs[project.name];
...
await remoteReleaseClient.createOrUpdateRelease(changelog.releaseVersion, changelog.contents, latestCommit, { dryRun: args.dryRun });
}All projects in a fixed group share one releaseVersion / tag, so the same release is created and then updated N−1 times. With the default renderer each project's contents differ (project-scoped entries, or "This was a version bump only …" for untouched projects), so the published notes are whichever project is last in projects order.
Measured by instrumenting createOrUpdateRelease on a six-project fixed group: six calls for tag=release/1.38.0 with six distinct bodies (386 / 563 / 1539 / 386 / 961 / 724 bytes). The published body was the last project's 724-byte "version bump only" entry.
Expected Behavior
- One remote release per fixed group with the group's combined notes, or
- a validation error / docs note that
projectChangelogs.createReleaseis only meaningful for independent groups.
workspaceChangelog.createRelease is not an alternative: the workspace changelog is disabled whenever more than one release group exists.
GitHub Repo
No response
Steps to Reproduce
- Fixed release group with ≥2 projects;
changelog: { projectChangelogs: { createRelease: "github" }, workspaceChangelog: false }. - Commit a
feattouching only the first project. npx nx releasewith a GitHub token.- The created release's body is the last project's "This was a version bump only …" entry, not the feature.
Workaround: a custom renderer that ignores project and renders the whole group, so all N bodies are identical.
Nx Report
Node : 24.14.0
OS : darwin-arm64
Native Target : aarch64-macos
npm : 11.9.0
nx : 23.1.3
@nx/js : 23.1.3
@nx/devkit : 23.1.3
@nx/workspace : 23.1.3
typescript : 6.0.3Package Manager Version
npm 11.9.0
Operating System
- macOS
- Linux
- Windows
Source: nrwl/nx