Bug Description
The Release workflow (.github/workflows/release.yml) reports success when the merge into main does not contain any .changeset/*.md. From the GitHub UI the run appears green, but no publish, no tag, and no GitHub Release are produced. The release engineer has no signal that the workflow was effectively a no-op.
This was first observed on PR #52 (release/1.3.0 -, merged 2026-08-04): the workflow ran in ~30s with status success but @deessejs/errors was not published. It took ~20 minutes of investigation (running gh api .../jobs and checking per-step conclusion=skipped) to discover the no-op.
Steps to Reproduce
- Open a release PR release/vX.Y.Z - whose branch already has pnpm changeset version consumed (i.e. version bump and changelog edit are baked into the merge commits, but .changeset/*.md files have already been deleted from the working tree before merge).
- Merge the PR into main.
- Observe the Release workflow on the merge commit.
- Wait for the run to complete.
- Confirm no Git tag (@deessejs/errors@X.Y.Z) is pushed and no GitHub Release is created.
- Confirm the workflow run status is success.
Expected Behavior
The Release workflow should make the no-op case visible:
- Either finish with status neutral (or success annotated) when has_changesets=false and the trigger was a PR merge.
- Or fail with a clear error message.
- Add a job-level output (e.g. skipped=true) and a step summary so the release engineer can see the reason without inspecting raw job JSON.
Actual Behavior
The job ends with success. All gated steps show conclusion=skipped in the API but the overall run is green. From the GitHub UI it looks like the release happened.
Environment
- Node.js: 24 (runner default)
- pnpm: 10.34.5
- OS: GitHub-hosted Ubuntu runner
- Affected workflow: .github/workflows/release.yml
Suggested Fix
Add a final step in the job with if: always() that fails explicitly when has_changesets is false.
Related
Bug Description
The Release workflow (.github/workflows/release.yml) reports success when the merge into main does not contain any .changeset/*.md. From the GitHub UI the run appears green, but no publish, no tag, and no GitHub Release are produced. The release engineer has no signal that the workflow was effectively a no-op.
This was first observed on PR #52 (release/1.3.0 -, merged 2026-08-04): the workflow ran in ~30s with status success but @deessejs/errors was not published. It took ~20 minutes of investigation (running gh api .../jobs and checking per-step conclusion=skipped) to discover the no-op.
Steps to Reproduce
Expected Behavior
The Release workflow should make the no-op case visible:
Actual Behavior
The job ends with success. All gated steps show conclusion=skipped in the API but the overall run is green. From the GitHub UI it looks like the release happened.
Environment
Suggested Fix
Add a final step in the job with if: always() that fails explicitly when has_changesets is false.
Related