Hive
fix(server): stop leaking component release titles into the CLI deprecation warning
GitHub issue · Closed
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.exsfixtures to includetag_nameand realisticnamevalues, 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, scopedtag_name). Component releases now usename: "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
:nameand: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 torelease.namewould 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