fix: stop amputating RC suffixes from docs URLs (#23903)

Fixes #23897 (docs link only — naming rename is in #23905)

- Fix version stripping logic in both Go (`codersdk/deployment.go`) and
TypeScript (`site/src/utils/docs.ts`) to preserve `-rc.X` suffixes
instead of amputating them along with `-devel`
- Add `v0.0.0` fallback in the TS frontend to match Go backend behavior
for dev builds
- Add tests covering RC, devel, and plain release version strings

> 🤖 Written by a Coder Agent. Will be reviewed by a human.
This commit is contained in:
Cian Johnston
2026-04-01 13:05:14 +00:00
committed by GitHub
parent 19e44f4136
commit 2a51687ff3
4 changed files with 106 additions and 7 deletions
+5 -1
View File
@@ -1251,7 +1251,11 @@ func DefaultSupportLinks(docsURL string) []LinkConfig {
}
func removeTrailingVersionInfo(v string) string {
return strings.Split(strings.Split(v, "-")[0], "+")[0]
// Strip build metadata (everything after '+').
v, _, _ = strings.Cut(v, "+")
// Strip '-devel' suffix if present.
v = strings.TrimSuffix(v, "-devel")
return v
}
func DefaultDocsURL() string {
+28 -2
View File
@@ -25,10 +25,36 @@ func TestRemoveTrailingVersionInfo(t *testing.T) {
Version: "v2.16.0+683a720-devel",
ExpectedAfterStrippingInfo: "v2.16.0",
},
// RC versions: preserve the -rc.X suffix, strip build metadata.
{
Version: "v2.32.0-rc.1+abc123",
ExpectedAfterStrippingInfo: "v2.32.0-rc.1",
},
{
Version: "v2.32.0-rc.0",
ExpectedAfterStrippingInfo: "v2.32.0-rc.0",
},
{
Version: "v2.32.0-rc.1+683a720-devel",
ExpectedAfterStrippingInfo: "v2.32.0-rc.1",
},
// Bare devel suffix, no build metadata.
{
Version: "v2.32.0-devel",
ExpectedAfterStrippingInfo: "v2.32.0",
},
// Plain release, identity case.
{
Version: "v2.16.0",
ExpectedAfterStrippingInfo: "v2.16.0",
},
}
for _, tc := range testCases {
stripped := removeTrailingVersionInfo(tc.Version)
require.Equal(t, tc.ExpectedAfterStrippingInfo, stripped)
t.Run(tc.Version, func(t *testing.T) {
t.Parallel()
stripped := removeTrailingVersionInfo(tc.Version)
require.Equal(t, tc.ExpectedAfterStrippingInfo, stripped)
})
}
}