Skip to content

fix(ci): notify success on releases that skip CLI tests#1484

Open
mishushakov wants to merge 1 commit into
mainfrom
mishushakov/notify-success-not-triggered
Open

fix(ci): notify success on releases that skip CLI tests#1484
mishushakov wants to merge 1 commit into
mainfrom
mishushakov/notify-success-not-triggered

Conversation

@mishushakov

Copy link
Copy Markdown
Member

What

report-success (the Release Succeeded Slack notification) silently skips on releases that don't bump the CLI — even when the release publishes successfully.

Why

The job used:

report-success:
  needs: [preflight, publish]
  if: needs.publish.result == 'success'

That if contains no status-check function (always(), !cancelled(), failure(), success()). When cli-tests is skipped — which happens whenever the changeset releases the SDKs but not the CLI (cli-tests has if: needs.preflight.outputs.cli == 'true') — GitHub Actions skip propagation cascades through the dependency graph and skips report-success too, before its condition is meaningfully evaluated. So no success notification fires.

The publish job avoids this exact trap because its if already starts with (!cancelled()), which is why publish runs (and succeeds) regardless. report-success just lacked the same guard.

Evidence

report-success skipped iff cli-tests skipped, across recent releases:

Run cli-tests report-success
28189674867 skipped skipped
27978450216 skipped skipped
28150204186 ran ✅ fired ✅
27843301597 ran ✅ fired ✅

Fix

 report-success:
   needs: [preflight, publish]
-  if: needs.publish.result == 'success'
+  if: (!cancelled()) && needs.publish.result == 'success'

(!cancelled()) disables skip propagation so the condition is always evaluated, while needs.publish.result == 'success' preserves the original intent: notify only when the publish actually succeeded.

report-failure (if: failure()) and report-start are unaffected — both already evaluate correctly.

🤖 Generated with Claude Code

report-success used `if: needs.publish.result == 'success'`, which lacks a
status-check function. When cli-tests is skipped (a release that doesn't bump
the CLI), GitHub Actions skip propagation cascades through the dependency
graph and skips report-success too — so no Slack success notification fires,
even though publish succeeded.

Guard the condition with `(!cancelled())` (the same pattern the publish job
already uses) so the `if` is actually evaluated regardless of upstream skips,
while still only notifying when publish succeeded.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

@changeset-bot

changeset-bot Bot commented Jun 25, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: beb6a10

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@cursor

cursor Bot commented Jun 25, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Only changes when a Slack notification job runs; no effect on publish, tests, or package release logic.

Overview
The Release Succeeded Slack job in release.yml used if: needs.publish.result == 'success' without a status function, so when cli-tests was skipped (SDK-only releases), GitHub Actions skip propagation could skip report-success even after publish succeeded. The condition is now (!cancelled()) && needs.publish.result == 'success', matching the guard on publish, so the success notification runs whenever publish actually succeeds.

Reviewed by Cursor Bugbot for commit beb6a10. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions

Copy link
Copy Markdown
Contributor

Package Artifacts

Built from 872fbd2. Download artifacts from this workflow run.

JS SDK (e2b@2.31.1-mishushakov-notify-success-not-triggered.0):

npm install ./e2b-2.31.1-mishushakov-notify-success-not-triggered.0.tgz

CLI (@e2b/cli@2.13.1-mishushakov-notify-success-not-triggered.0):

npm install ./e2b-cli-2.13.1-mishushakov-notify-success-not-triggered.0.tgz

Python SDK (e2b==2.30.0+mishushakov-notify-success-not-triggered):

pip install ./e2b-2.30.0+mishushakov.notify.success.not.triggered-py3-none-any.whl

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM — one-line CI fix that mirrors the existing (!cancelled()) guard already used by the publish job.

Extended reasoning...

Overview

This PR modifies a single if condition in .github/workflows/release.yml for the report-success Slack notification job, adding (!cancelled()) && before needs.publish.result == 'success'. The change addresses a known GitHub Actions skip-propagation behavior where a job's if is not meaningfully evaluated when an upstream needed job (here, cli-tests) is skipped — even if other needs succeeded.

Security risks

None. This is a CI workflow change that only affects when a Slack notification job fires. It does not touch authentication, credentials, publish logic, or any package code. The Slack webhook secret usage is unchanged.

Level of scrutiny

Low. This is a mechanical one-line fix to a notification job, with strong precedent in the same file: the publish job already uses the same (!cancelled()) && ... pattern (line ~128) for the same reason. The PR description includes empirical evidence (run IDs) showing the exact correlation between skipped cli-tests and skipped report-success, and the fix preserves the original intent (needs.publish.result == 'success').

Other factors

The changeset-bot warning about no changeset is expected and correct — CI workflow changes don't ship to users and don't need a version bump. No prior reviewer comments are outstanding. The PR is self-contained and reversible.

@mishushakov mishushakov enabled auto-merge (squash) June 25, 2026 19:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant