Environment details
- OS: macOS 26.6 (local investigation); observed in a GitHub Actions
ubuntu-latest run
- Node.js version: v26.5.0
- npm version: 11.17.0
release-please version: 17.11.2 (current main checkout); Grafana Alloy’s runner depends on release-please: ^17.11.1
Steps to reproduce
-
Configure manifest mode with an excluded path:
{
"packages": {
".": {
"release-type": "node",
"exclude-paths": ["syntax"]
}
}
}
-
Merge an empty commit containing a Release-As footer:
git commit --allow-empty \
-m "chore: force a release" \
-m "Release-As: 1.0.1"
-
Run Release Please in manifest mode.
Expected behavior
Release Please creates a release PR for the root package at 1.0.1.
Empty commits are intentionally included in manifest-mode processing to support the documented Release-As workflow. An empty commit has no changed files, so it cannot be determined to contain changes exclusively under an excluded path.
Actual behavior
No release PR is created for the package configured with exclude-paths.
CommitExclude.shouldInclude() filters the empty commit’s files: [] array and then calls every(). Since [].every(...) is true, the predicate concludes that all files are excluded and removes the commit before versioning and changelog generation. The Release-As footer is parsed, but never reaches the release strategy.
Observed downstream
Grafana Alloy’s root package config excludes syntax. On its release/v1.19 branch, PR grafana/alloy#6991 merged an empty commit whose PR-body override includes:
BEGIN_COMMIT_OVERRIDE
fix: Align latest patch release with correct git tag (#6991)
Release-As: v1.19.2
END_COMMIT_OVERRIDE
The subsequent Release Please run did not create the expected root release PR. That workflow uses --root-only, so the root package is the relevant release target.
Related issues
A narrow fix would retain commits when files is absent or empty, while continuing to exclude commits whose changed files are all under configured excluded paths.
Prospective fix located here
Environment details
ubuntu-latestrunrelease-pleaseversion: 17.11.2 (current main checkout); Grafana Alloy’s runner depends onrelease-please: ^17.11.1Steps to reproduce
Configure manifest mode with an excluded path:
{ "packages": { ".": { "release-type": "node", "exclude-paths": ["syntax"] } } }Merge an empty commit containing a
Release-Asfooter:Run Release Please in manifest mode.
Expected behavior
Release Please creates a release PR for the root package at
1.0.1.Empty commits are intentionally included in manifest-mode processing to support the documented
Release-Asworkflow. An empty commit has no changed files, so it cannot be determined to contain changes exclusively under an excluded path.Actual behavior
No release PR is created for the package configured with
exclude-paths.CommitExclude.shouldInclude()filters the empty commit’sfiles: []array and then callsevery(). Since[].every(...)istrue, the predicate concludes that all files are excluded and removes the commit before versioning and changelog generation. TheRelease-Asfooter is parsed, but never reaches the release strategy.Observed downstream
Grafana Alloy’s root package config excludes
syntax. On itsrelease/v1.19branch, PR grafana/alloy#6991 merged an empty commit whose PR-body override includes:The subsequent Release Please run did not create the expected root release PR. That workflow uses
--root-only, so the root package is the relevant release target.Related issues
Release-Ascommits are expected to produce releases in manifest mode; it concerns targeting a subset of components.exclude-pathsignoring every commit? #2301 reports the sameexclude-pathsand emptyRelease-Asinteraction, but also describes a separate non-empty-commit symptom.A narrow fix would retain commits when
filesis absent or empty, while continuing to exclude commits whose changed files are all under configured excluded paths.Prospective fix located here