feature/featuretags: add test that all ts_omit_foo tags are declared

Updates #12614

Change-Id: I49351fe0c463af0b8d940e8088d4748906a8aec3
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
main
Brad Fitzpatrick 2 months ago committed by Brad Fitzpatrick
parent 642d1aaa60
commit 036b6a1262
  1. 13
      feature/buildfeatures/feature_completion_scripts_disabled.go
  2. 13
      feature/buildfeatures/feature_completion_scripts_enabled.go
  3. 6
      feature/featuretags/featuretags.go
  4. 40
      feature/featuretags/featuretags_test.go

@ -0,0 +1,13 @@
// Copyright (c) Tailscale Inc & contributors
// SPDX-License-Identifier: BSD-3-Clause
// Code generated by gen.go; DO NOT EDIT.
//go:build ts_omit_completion_scripts
package buildfeatures
// HasCompletionScripts is whether the binary was built with support for modular feature "embed CLI shell completion scripts".
// Specifically, it's whether the binary was NOT built with the "ts_omit_completion_scripts" build tag.
// It's a const so it can be used for dead code elimination.
const HasCompletionScripts = false

@ -0,0 +1,13 @@
// Copyright (c) Tailscale Inc & contributors
// SPDX-License-Identifier: BSD-3-Clause
// Code generated by gen.go; DO NOT EDIT.
//go:build !ts_omit_completion_scripts
package buildfeatures
// HasCompletionScripts is whether the binary was built with support for modular feature "embed CLI shell completion scripts".
// Specifically, it's whether the binary was NOT built with the "ts_omit_completion_scripts" build tag.
// It's a const so it can be used for dead code elimination.
const HasCompletionScripts = true

@ -139,7 +139,11 @@ var Features = map[FeatureTag]FeatureMeta{
},
"completion": {Sym: "Completion", Desc: "CLI shell completion"},
"conn25": {Sym: "Conn25", Desc: "Route traffic for configured domains through connector devices"},
"cloud": {Sym: "Cloud", Desc: "detect cloud environment to learn instances IPs and DNS servers"},
"completion_scripts": {
Sym: "CompletionScripts", Desc: "embed CLI shell completion scripts",
Deps: []FeatureTag{"completion"},
},
"cloud": {Sym: "Cloud", Desc: "detect cloud environment to learn instances IPs and DNS servers"},
"dbus": {
Sym: "DBus",
Desc: "Linux DBus support",

@ -5,7 +5,12 @@ package featuretags
import (
"maps"
"os"
"os/exec"
"path/filepath"
"regexp"
"slices"
"strings"
"testing"
"tailscale.com/util/set"
@ -83,3 +88,38 @@ func TestRequiredBy(t *testing.T) {
}
}
}
// Verify that all "ts_omit_foo" build tags are declared in featuretags.go
func TestAllOmitBuildTagsDeclared(t *testing.T) {
dir, err := os.Getwd()
if err != nil {
t.Fatal(err)
}
root := filepath.Join(dir, "..", "..")
cmd := exec.Command("git", "grep", "ts_omit_")
cmd.Dir = root
out, err := cmd.CombinedOutput()
if err != nil {
if _, err := exec.LookPath("git"); err != nil {
t.Skipf("git not found in PATH; skipping test")
}
t.Fatalf("git grep failed: %v\nOutput:\n%s", err, out)
}
rx := regexp.MustCompile(`\bts_omit_[\w_]+\b`)
found := set.Set[string]{}
rx.ReplaceAllFunc(out, func(tag []byte) []byte {
tagStr := string(tag)
found.Add(tagStr)
return tag
})
for tag := range found {
if strings.EqualFold(tag, "ts_omit_foo") {
continue
}
ft := FeatureTag(strings.TrimPrefix(tag, "ts_omit_"))
if _, ok := Features[ft]; !ok {
t.Errorf("found undeclared ts_omit_* build tags: %v", tag)
}
}
}

Loading…
Cancel
Save