From fec338f19456a123f7dadcf5cc1c3e6689ea9350 Mon Sep 17 00:00:00 2001 From: Kristoffer Dalby Date: Thu, 11 Sep 2025 14:21:53 +0200 Subject: [PATCH] capver: generate Signed-off-by: Kristoffer Dalby --- CHANGELOG.md | 2 +- hscontrol/capver/capver.go | 7 +++-- hscontrol/capver/capver_generated.go | 33 +++++++++++++---------- hscontrol/capver/capver_test.go | 40 ++-------------------------- hscontrol/capver/capver_test_data.go | 40 ++++++++++++++++++++++++++++ 5 files changed, 67 insertions(+), 55 deletions(-) create mode 100644 hscontrol/capver/capver_test_data.go diff --git a/CHANGELOG.md b/CHANGELOG.md index e77eb3e8..c64ac204 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## Next -**Minimum supported Tailscale client version: v1.64.0** +**Minimum supported Tailscale client version: v1.68.0** ### Database integrity improvements diff --git a/hscontrol/capver/capver.go b/hscontrol/capver/capver.go index b6bbca5b..b471ebcc 100644 --- a/hscontrol/capver/capver.go +++ b/hscontrol/capver/capver.go @@ -12,8 +12,6 @@ import ( "tailscale.com/util/set" ) -const MinSupportedCapabilityVersion tailcfg.CapabilityVersion = 90 - // CanOldCodeBeCleanedUp is intended to be called on startup to see if // there are old code that can ble cleaned up, entries should contain // a CapVer where something can be cleaned up and a panic if it can. @@ -29,12 +27,14 @@ func CanOldCodeBeCleanedUp() { func tailscaleVersSorted() []string { vers := xmaps.Keys(tailscaleToCapVer) sort.Strings(vers) + return vers } func capVersSorted() []tailcfg.CapabilityVersion { capVers := xmaps.Keys(capVerToTailscaleVer) slices.Sort(capVers) + return capVers } @@ -48,6 +48,7 @@ func CapabilityVersion(ver string) tailcfg.CapabilityVersion { if !strings.HasPrefix(ver, "v") { ver = "v" + ver } + return tailscaleToCapVer[ver] } @@ -73,10 +74,12 @@ func TailscaleLatestMajorMinor(n int, stripV bool) []string { } majors := set.Set[string]{} + for _, vers := range tailscaleVersSorted() { if stripV { vers = strings.TrimPrefix(vers, "v") } + v := strings.Split(vers, ".") majors.Add(v[0] + "." + v[1]) } diff --git a/hscontrol/capver/capver_generated.go b/hscontrol/capver/capver_generated.go index 79590000..7f73f058 100644 --- a/hscontrol/capver/capver_generated.go +++ b/hscontrol/capver/capver_generated.go @@ -1,12 +1,10 @@ package capver -//Generated DO NOT EDIT +// Generated DO NOT EDIT import "tailscale.com/tailcfg" var tailscaleToCapVer = map[string]tailcfg.CapabilityVersion{ - "v1.64.0": 90, - "v1.64.1": 90, "v1.64.2": 90, "v1.66.0": 95, "v1.66.1": 95, @@ -35,18 +33,25 @@ var tailscaleToCapVer = map[string]tailcfg.CapabilityVersion{ "v1.84.0": 116, "v1.84.1": 116, "v1.84.2": 116, + "v1.86.0": 122, + "v1.86.2": 123, } - var capVerToTailscaleVer = map[tailcfg.CapabilityVersion]string{ - 90: "v1.64.0", - 95: "v1.66.0", - 97: "v1.68.0", - 102: "v1.70.0", - 104: "v1.72.0", - 106: "v1.74.0", - 109: "v1.78.0", - 113: "v1.80.0", - 115: "v1.82.0", - 116: "v1.84.0", + 90: "v1.64.2", + 95: "v1.66.0", + 97: "v1.68.0", + 102: "v1.70.0", + 104: "v1.72.0", + 106: "v1.74.0", + 109: "v1.78.0", + 113: "v1.80.0", + 115: "v1.82.0", + 116: "v1.84.0", + 122: "v1.86.0", + 123: "v1.86.2", } + +// MinSupportedCapabilityVersion represents the minimum capability version +// supported by this Headscale instance (latest 10 minor versions) +const MinSupportedCapabilityVersion tailcfg.CapabilityVersion = 97 diff --git a/hscontrol/capver/capver_test.go b/hscontrol/capver/capver_test.go index 42f1df71..5c5d5b44 100644 --- a/hscontrol/capver/capver_test.go +++ b/hscontrol/capver/capver_test.go @@ -4,34 +4,10 @@ import ( "testing" "github.com/google/go-cmp/cmp" - "tailscale.com/tailcfg" ) func TestTailscaleLatestMajorMinor(t *testing.T) { - tests := []struct { - n int - stripV bool - expected []string - }{ - {3, false, []string{"v1.80", "v1.82", "v1.84"}}, - {2, true, []string{"1.82", "1.84"}}, - // Lazy way to see all supported versions - {10, true, []string{ - "1.66", - "1.68", - "1.70", - "1.72", - "1.74", - "1.76", - "1.78", - "1.80", - "1.82", - "1.84", - }}, - {0, false, nil}, - } - - for _, test := range tests { + for _, test := range tailscaleLatestMajorMinorTests { t.Run("", func(t *testing.T) { output := TailscaleLatestMajorMinor(test.n, test.stripV) if diff := cmp.Diff(output, test.expected); diff != "" { @@ -42,19 +18,7 @@ func TestTailscaleLatestMajorMinor(t *testing.T) { } func TestCapVerMinimumTailscaleVersion(t *testing.T) { - tests := []struct { - input tailcfg.CapabilityVersion - expected string - }{ - {90, "v1.64.0"}, - {95, "v1.66.0"}, - {106, "v1.74.0"}, - {109, "v1.78.0"}, - {9001, ""}, // Test case for a version higher than any in the map - {60, ""}, // Test case for a version lower than any in the map - } - - for _, test := range tests { + for _, test := range capVerMinimumTailscaleVersionTests { t.Run("", func(t *testing.T) { output := TailscaleVersion(test.input) if output != test.expected { diff --git a/hscontrol/capver/capver_test_data.go b/hscontrol/capver/capver_test_data.go new file mode 100644 index 00000000..4c2a4c34 --- /dev/null +++ b/hscontrol/capver/capver_test_data.go @@ -0,0 +1,40 @@ +package capver + +// Generated DO NOT EDIT + +import "tailscale.com/tailcfg" + +var tailscaleLatestMajorMinorTests = []struct { + n int + stripV bool + expected []string +}{ + {3, false, []string{"v1.82", "v1.84", "v1.86"}}, + {2, true, []string{"1.84", "1.86"}}, + {10, true, []string{ + "1.68", + "1.70", + "1.72", + "1.74", + "1.76", + "1.78", + "1.80", + "1.82", + "1.84", + "1.86", + }}, + {0, false, nil}, +} + +var capVerMinimumTailscaleVersionTests = []struct { + input tailcfg.CapabilityVersion + expected string +}{ + {97, "v1.68.0"}, + {90, "v1.64.2"}, + {95, "v1.66.0"}, + {102, "v1.70.0"}, + {104, "v1.72.0"}, + {9001, ""}, // Test case for a version higher than any in the map + {60, ""}, // Test case for a version lower than any in the map +}