1
0
mirror of https://github.com/juanfont/headscale.git synced 2025-09-25 17:51:11 +02:00

capver: generate

Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
Kristoffer Dalby 2025-09-11 14:21:53 +02:00
parent ec37b32d4a
commit fec338f194
No known key found for this signature in database
5 changed files with 67 additions and 55 deletions

View File

@ -2,7 +2,7 @@
## Next ## Next
**Minimum supported Tailscale client version: v1.64.0** **Minimum supported Tailscale client version: v1.68.0**
### Database integrity improvements ### Database integrity improvements

View File

@ -12,8 +12,6 @@ import (
"tailscale.com/util/set" "tailscale.com/util/set"
) )
const MinSupportedCapabilityVersion tailcfg.CapabilityVersion = 90
// CanOldCodeBeCleanedUp is intended to be called on startup to see if // CanOldCodeBeCleanedUp is intended to be called on startup to see if
// there are old code that can ble cleaned up, entries should contain // 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. // a CapVer where something can be cleaned up and a panic if it can.
@ -29,12 +27,14 @@ func CanOldCodeBeCleanedUp() {
func tailscaleVersSorted() []string { func tailscaleVersSorted() []string {
vers := xmaps.Keys(tailscaleToCapVer) vers := xmaps.Keys(tailscaleToCapVer)
sort.Strings(vers) sort.Strings(vers)
return vers return vers
} }
func capVersSorted() []tailcfg.CapabilityVersion { func capVersSorted() []tailcfg.CapabilityVersion {
capVers := xmaps.Keys(capVerToTailscaleVer) capVers := xmaps.Keys(capVerToTailscaleVer)
slices.Sort(capVers) slices.Sort(capVers)
return capVers return capVers
} }
@ -48,6 +48,7 @@ func CapabilityVersion(ver string) tailcfg.CapabilityVersion {
if !strings.HasPrefix(ver, "v") { if !strings.HasPrefix(ver, "v") {
ver = "v" + ver ver = "v" + ver
} }
return tailscaleToCapVer[ver] return tailscaleToCapVer[ver]
} }
@ -73,10 +74,12 @@ func TailscaleLatestMajorMinor(n int, stripV bool) []string {
} }
majors := set.Set[string]{} majors := set.Set[string]{}
for _, vers := range tailscaleVersSorted() { for _, vers := range tailscaleVersSorted() {
if stripV { if stripV {
vers = strings.TrimPrefix(vers, "v") vers = strings.TrimPrefix(vers, "v")
} }
v := strings.Split(vers, ".") v := strings.Split(vers, ".")
majors.Add(v[0] + "." + v[1]) majors.Add(v[0] + "." + v[1])
} }

View File

@ -1,12 +1,10 @@
package capver package capver
//Generated DO NOT EDIT // Generated DO NOT EDIT
import "tailscale.com/tailcfg" import "tailscale.com/tailcfg"
var tailscaleToCapVer = map[string]tailcfg.CapabilityVersion{ var tailscaleToCapVer = map[string]tailcfg.CapabilityVersion{
"v1.64.0": 90,
"v1.64.1": 90,
"v1.64.2": 90, "v1.64.2": 90,
"v1.66.0": 95, "v1.66.0": 95,
"v1.66.1": 95, "v1.66.1": 95,
@ -35,18 +33,25 @@ var tailscaleToCapVer = map[string]tailcfg.CapabilityVersion{
"v1.84.0": 116, "v1.84.0": 116,
"v1.84.1": 116, "v1.84.1": 116,
"v1.84.2": 116, "v1.84.2": 116,
"v1.86.0": 122,
"v1.86.2": 123,
} }
var capVerToTailscaleVer = map[tailcfg.CapabilityVersion]string{ var capVerToTailscaleVer = map[tailcfg.CapabilityVersion]string{
90: "v1.64.0", 90: "v1.64.2",
95: "v1.66.0", 95: "v1.66.0",
97: "v1.68.0", 97: "v1.68.0",
102: "v1.70.0", 102: "v1.70.0",
104: "v1.72.0", 104: "v1.72.0",
106: "v1.74.0", 106: "v1.74.0",
109: "v1.78.0", 109: "v1.78.0",
113: "v1.80.0", 113: "v1.80.0",
115: "v1.82.0", 115: "v1.82.0",
116: "v1.84.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

View File

@ -4,34 +4,10 @@ import (
"testing" "testing"
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
"tailscale.com/tailcfg"
) )
func TestTailscaleLatestMajorMinor(t *testing.T) { func TestTailscaleLatestMajorMinor(t *testing.T) {
tests := []struct { for _, test := range tailscaleLatestMajorMinorTests {
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 {
t.Run("", func(t *testing.T) { t.Run("", func(t *testing.T) {
output := TailscaleLatestMajorMinor(test.n, test.stripV) output := TailscaleLatestMajorMinor(test.n, test.stripV)
if diff := cmp.Diff(output, test.expected); diff != "" { if diff := cmp.Diff(output, test.expected); diff != "" {
@ -42,19 +18,7 @@ func TestTailscaleLatestMajorMinor(t *testing.T) {
} }
func TestCapVerMinimumTailscaleVersion(t *testing.T) { func TestCapVerMinimumTailscaleVersion(t *testing.T) {
tests := []struct { for _, test := range capVerMinimumTailscaleVersionTests {
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 {
t.Run("", func(t *testing.T) { t.Run("", func(t *testing.T) {
output := TailscaleVersion(test.input) output := TailscaleVersion(test.input)
if output != test.expected { if output != test.expected {

View File

@ -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
}