Skip to content

[BUG] release: workflow reports success on no-op when no changeset in merge #55

Description

@martyy-code

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

  1. 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).
  2. Merge the PR into main.
  3. Observe the Release workflow on the merge commit.
  4. Wait for the run to complete.
  5. Confirm no Git tag (@deessejs/errors@X.Y.Z) is pushed and no GitHub Release is created.
  6. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions