Hive Hive
Sign in

fix(server): stop leaking component release titles into the CLI deprecation warning

GitHub issue · Closed

Metadata
Source
tuist/tuist #11122
Updated
Jun 24, 2026
Domains
Distribution
Details

What changed

The deprecation warning emitted by TuistWeb.WarningsHeaderPlug to old CLI clients was producing a wrong, customer-confusing message — e.g. “Please upgrade to version Runners Controller 0.9.0 for server-side features to continue working.” This PR fixes the two bugs combining to produce that.

Bug 1 — filter looks at the wrong field

Tuist.GitHub.Releases.get_latest_cli_release/1 filtered on the GitHub release name field:

Enum.find(releases, fn release -> not String.contains?(release["name"], "@") end)

But on real GitHub releases for this repo:

Release name tag_name
CLI "CLI 4.196.0" "4.196.0"
Server "Server 1.207.0" "server@1.207.0"
Runners Controller "Runners Controller 0.11.0" "runners-controller@0.11.0"

The human-readable name never contains "@", so the filter was a no-op and the latest release won regardless of type. Whenever a component release shipped after the most recent CLI release, the plug picked it up.

Fix: filter on tag_name, where the scoped format <component>@<version> actually distinguishes components from CLI releases.

Bug 2 — message interpolates the wrong field

The plug built the user-facing message from release.name:

"... Please upgrade to version #{release.name} ..."

Even with the filter fixed, that yields “Please upgrade to version CLI 4.196.0”, which reads awkwardly (“version CLI version 4.196.0”). Fix: interpolate release.tag_name ("4.196.0") — the bare semver users actually install.

Tests

  • Updated existing releases_test.exs fixtures to include tag_name and realistic name values, so they exercise the new filter.
  • Rewrote the “returns the latest CLI release if the latest release is an App release” case as “skips component releases (scoped tags) and returns the CLI release”, modelled directly on the real GitHub release shape (humanized name, scoped tag_name). Component releases now use name: "Runners Controller 0.11.0" / tag_name: "runners-controller@0.11.0" — i.e. the exact regression case from the customer report.
  • Updated the plug-test stubs to return both :name and :tag_name. The existing assertion on the deprecation message format ("... Please upgrade to version 4.160.0 ...") now doubles as a regression test: a future revert to release.name would produce "... version CLI 4.160.0 ..." and fail.

Scope

This is scoped to the warning-text bug. The unrelated 4.154.0 issue in the lower-than-floor deprecation test is fixed separately in #11121; the two PRs touch non-overlapping lines and merge cleanly in either order.

🤖 Generated with Claude Code

Comments
TA
tuist-atlas[bot] Jun 9, 2026

The fix for stopping component release titles from leaking into the CLI deprecation warning is now available in version xcresult-processor-image@0.12.2. Update to this version to get the corrected deprecation warnings.

TA
tuist-atlas[bot] Jun 9, 2026

The fix to stop leaking component release titles into the CLI deprecation warning is available in server@1.207.2. Update to this version to apply the fix.