From 7dfc693981c6c42a39f6a24dba53ab2e948f5312 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Wed, 15 Jul 2026 10:29:31 +0000 Subject: [PATCH 1/2] fix(scripts/releaser/v1): remove doubled "v" in release calendar latest release link --- scripts/releaser/v1/docs.go | 2 +- scripts/releaser/v1/docs_test.go | 85 ++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 scripts/releaser/v1/docs_test.go diff --git a/scripts/releaser/v1/docs.go b/scripts/releaser/v1/docs.go index 19e59e76958..359a9fb117a 100644 --- a/scripts/releaser/v1/docs.go +++ b/scripts/releaser/v1/docs.go @@ -171,7 +171,7 @@ func updateCalendar( for i, r := range rows { if r.Major == newVer.Major && r.Minor == newVer.Minor { rows[i].LatestRelease = fmt.Sprintf( - "[v%s](%s)", + "[%s](%s)", newVer.String(), fmt.Sprintf(releaseTagURLFmt, newVer.String()), ) diff --git a/scripts/releaser/v1/docs_test.go b/scripts/releaser/v1/docs_test.go new file mode 100644 index 00000000000..1095eedb220 --- /dev/null +++ b/scripts/releaser/v1/docs_test.go @@ -0,0 +1,85 @@ +package v1 + +import "testing" + +// TestUpdateCalendarLatestReleaseVersionPrefix checks the formatting of the +// "Latest Release" cell produced by updateCalendar. version.String() already +// includes a leading "v", so the link label must not add a second one, while +// the release tag URL keeps the "v" because tags are prefixed with it. +func TestUpdateCalendarLatestReleaseVersionPrefix(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + newVer version + channel string + want string + }{ + { + name: "patch release", + newVer: version{Major: 2, Minor: 35, Patch: 1}, + channel: "mainline", + want: "[v2.35.1](https://github.com/coder/coder/releases/tag/v2.35.1)", + }, + { + name: "minor release", + newVer: version{Major: 2, Minor: 35, Patch: 0}, + channel: "mainline", + want: "[v2.35.0](https://github.com/coder/coder/releases/tag/v2.35.0)", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + rows := []calendarRow{{ + ReleaseName: "2.35", + Major: 2, + Minor: 35, + ReleaseDate: "February 03, 2026", + Status: "Mainline", + LatestRelease: "N/A", + }} + + got := updateCalendar(rows, tt.newVer, tt.channel) + + var cell string + for _, r := range got { + if r.Major == tt.newVer.Major && r.Minor == tt.newVer.Minor { + cell = r.LatestRelease + break + } + } + + if cell != tt.want { + t.Fatalf("LatestRelease = %q, want %q", cell, tt.want) + } + }) + } +} + +// TestUpdateCalendarNotReleasedRowName checks that a "Not Released" row is +// promoted to "Mainline" with a major.minor "Release name" link (patch +// omitted) once its minor version is released. +func TestUpdateCalendarNotReleasedRowName(t *testing.T) { + t.Parallel() + + rows := []calendarRow{{ + ReleaseName: "2.36", + Major: 2, + Minor: 36, + Status: "Not Released", + LatestRelease: "N/A", + }} + + got := updateCalendar(rows, version{Major: 2, Minor: 36, Patch: 0}, "mainline") + + if got[0].Status != "Mainline" { + t.Errorf("Status = %q, want %q", got[0].Status, "Mainline") + } + const want = "[2.36](https://coder.com/changelog/coder-2-36)" + if got[0].ReleaseName != want { + t.Fatalf("ReleaseName = %q, want %q", got[0].ReleaseName, want) + } +} From 61861c78c52eb7c62fb1174cd5ae8e16860e820d Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Wed, 15 Jul 2026 10:35:21 +0000 Subject: [PATCH 2/2] test(scripts/releaser/v1): nolint testpackage for unexported helpers --- scripts/releaser/v1/docs_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/releaser/v1/docs_test.go b/scripts/releaser/v1/docs_test.go index 1095eedb220..052b07169d7 100644 --- a/scripts/releaser/v1/docs_test.go +++ b/scripts/releaser/v1/docs_test.go @@ -1,4 +1,4 @@ -package v1 +package v1 //nolint:testpackage // Tests unexported release helpers. import "testing"