diff --git a/cmd/prune-junit-xml/prunexml.go b/cmd/prune-junit-xml/prunexml.go index 21d0b0fa312..9fbf506d988 100644 --- a/cmd/prune-junit-xml/prunexml.go +++ b/cmd/prune-junit-xml/prunexml.go @@ -17,23 +17,33 @@ limitations under the License. package main import ( + "bufio" + "bytes" "encoding/xml" "flag" "fmt" "io" "os" + "os/exec" + "path" "regexp" "strings" "k8s.io/kubernetes/cmd/prune-junit-xml/logparse" "k8s.io/kubernetes/third_party/forked/gotestsum/junitxml" + "sigs.k8s.io/yaml" ) func main() { maxTextSize := flag.Int("max-text-size", 1, "maximum size of attribute or text (in MB)") pruneTests := flag.Bool("prune-tests", true, "prune's xml files to display only top level tests and failed sub-tests") + addOwners := flag.Bool("add-owners", true, + "when pruning tests, also look for OWNERs files of the packages and prefix the names with [sig-...] if found") flag.Parse() + + pkgs := newPackageOwners(*addOwners) + for _, path := range flag.Args() { fmt.Printf("processing junit xml file : %s\n", path) xmlReader, err := os.Open(path) @@ -48,7 +58,7 @@ func main() { pruneXML(suites, *maxTextSize*1e6) // convert MB into bytes (roughly!) if *pruneTests { - pruneTESTS(suites) + pruneTESTS(suites, pkgs) } xmlWriter, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) @@ -121,7 +131,7 @@ func pruneStringIfNeeded(str *string, maxBytes int, msg string, args ...any) { // This function condenses the junit xml to have package name as top level identifier // and nesting under that. -func pruneTESTS(suites *junitxml.JUnitTestSuites) { +func pruneTESTS(suites *junitxml.JUnitTestSuites, pkgs *packageOwners) { var updatedTestsuites []junitxml.JUnitTestSuite for _, suite := range suites.Suites { @@ -130,10 +140,23 @@ func pruneTESTS(suites *junitxml.JUnitTestSuites) { var updatedTestcaseFailure junitxml.JUnitFailure failflag := false name := suite.Name + + // Inject the owning SIG prefix, if possible. + // This has to be done while we still have what + // is likely to be the full package name. + name = pkgs.addOwner(name) + regex := regexp.MustCompile(`^(.*?)/([^/]+)/?$`) match := regex.FindStringSubmatch(name) - updatedTestcase.Classname = match[1] - updatedTestcase.Name = match[2] + baseName := match[1] + leafName := match[2] + + // testgrid uses suite.Name. + // Spyglass/Prow use testcase.Classname. + // Therefore we need to update both. + suite.Name = baseName + updatedTestcase.Classname = baseName + updatedTestcase.Name = leafName updatedTestcase.Time = suite.Time updatedSystemOut := "" updatedSystemErr := "" @@ -208,3 +231,79 @@ func streamXML(writer io.Writer, in *junitxml.JUnitTestSuites) error { } return encoder.Flush() } + +type packageOwners struct { + // pkgs maps from import path to directory. + pkgs map[string]string +} + +func newPackageOwners(enabled bool) *packageOwners { + if !enabled { + return nil + } + + return &packageOwners{ + pkgs: make(map[string]string), + } +} + +// addOwner takes a package name (= import path, like k8s.io/client-go), +// tries to look up the source code of the package, and then +// walks up until it finds an OWNERS file with some sig label. +// The first sig label found this way is used. +// +// If successful, that SIG gets added to the name. +// If not, the name remains unchanged. +func (p *packageOwners) addOwner(name string) string { + if p == nil { + return name + } + + dir := p.pkgs[name] + if dir == "" { + // Look up via `go list`. To invoke it less often, + // we also ask for sub-packages and cache the results. + // We don't care about errors. + // + // This is roughly what golang.org/x/tools/go/packages does, + // which we can't use here because it would add a new + // dependency to k/k. + cmd := exec.Command("go", "list", "-f", "{{.ImportPath}}:{{.Dir}}", name+"/...") + out, _ := cmd.Output() + scanner := bufio.NewScanner(bytes.NewReader(out)) + for scanner.Scan() { + line := scanner.Text() + parts := strings.SplitN(line, ":", 2) + if len(parts) != 2 { + continue + } + p.pkgs[parts[0]] = parts[1] + } + dir = p.pkgs[name] + } + + // Walk up starting from an absolute path until we cannot go up further. + for ; dir != "" && dir != "." && dir != "/"; dir = path.Dir(dir) { + data, err := os.ReadFile(path.Join(dir, "OWNERS")) + if err != nil { + continue + } + var owners owners + if err := yaml.Unmarshal(data, &owners); err != nil { + continue + } + for _, label := range owners.Labels { + if strings.HasPrefix(label, "sig/") { + // Bingo! + return fmt.Sprintf("[sig-%s] %s", label[4:], name) + } + } + } + + return name +} + +// owners contains only fields from https://go.k8s.io/owners that we care about. +type owners struct { + Labels []string `json:"labels"` +} diff --git a/cmd/prune-junit-xml/prunexml_test.go b/cmd/prune-junit-xml/prunexml_test.go index 3dde79a0691..bd82abde716 100644 --- a/cmd/prune-junit-xml/prunexml_test.go +++ b/cmd/prune-junit-xml/prunexml_test.go @@ -76,16 +76,16 @@ func TestPruneXML(t *testing.T) { func TestPruneTESTS(t *testing.T) { sourceXML := ` - + - - - - - - + + + + + + @@ -129,25 +129,34 @@ func TestPruneTESTS(t *testing.T) { sub-test failed + + + + ` + // This test uses the real OWNERS files from k/k because those exist. + // The downside it that OWNERS changes (not unlikely in the case of cluster/gce) + // imply changing this test data. + // + // Fake packages have no source and thus no OWNERS. outputXML := ` - + - + - + - + FailureContent - + @@ -155,7 +164,7 @@ func TestPruneTESTS(t *testing.T) { FailureContentA FailureContentB - + @@ -165,9 +174,13 @@ func TestPruneTESTS(t *testing.T) { err A err B + + + + ` suites, _ := fetchXML(strings.NewReader(sourceXML)) - pruneTESTS(suites) + pruneTESTS(suites, newPackageOwners(true)) var output bytes.Buffer writer := bufio.NewWriter(&output) _ = streamXML(writer, suites) diff --git a/test/integration/apimachinery/OWNERS b/test/integration/apimachinery/OWNERS new file mode 100644 index 00000000000..55a1deac4ea --- /dev/null +++ b/test/integration/apimachinery/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/api-machinery diff --git a/test/integration/apiserver/OWNERS b/test/integration/apiserver/OWNERS index 259d204ec55..9f0d5365c9f 100644 --- a/test/integration/apiserver/OWNERS +++ b/test/integration/apiserver/OWNERS @@ -3,3 +3,5 @@ approvers: - alexzielenski - jefftree - jpbetz +labels: + - sig/api-machinery diff --git a/test/integration/auth/OWNERS b/test/integration/auth/OWNERS new file mode 100644 index 00000000000..f357da7076c --- /dev/null +++ b/test/integration/auth/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/auth diff --git a/test/integration/authutil/OWNERS b/test/integration/authutil/OWNERS new file mode 100644 index 00000000000..f357da7076c --- /dev/null +++ b/test/integration/authutil/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/auth diff --git a/test/integration/certificates/OWNERS b/test/integration/certificates/OWNERS new file mode 100644 index 00000000000..f357da7076c --- /dev/null +++ b/test/integration/certificates/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/auth diff --git a/test/integration/client/OWNERS b/test/integration/client/OWNERS new file mode 100644 index 00000000000..55a1deac4ea --- /dev/null +++ b/test/integration/client/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/api-machinery diff --git a/test/integration/cloudprovider/OWNERS b/test/integration/cloudprovider/OWNERS new file mode 100644 index 00000000000..1cb61c828f1 --- /dev/null +++ b/test/integration/cloudprovider/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/cloud-provider diff --git a/test/integration/clustertrustbundles/OWNERS b/test/integration/clustertrustbundles/OWNERS new file mode 100644 index 00000000000..f357da7076c --- /dev/null +++ b/test/integration/clustertrustbundles/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/auth diff --git a/test/integration/configmap/configmap_test.go b/test/integration/configmap/configmap_test.go deleted file mode 100644 index 16d8565a9a6..00000000000 --- a/test/integration/configmap/configmap_test.go +++ /dev/null @@ -1,125 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package configmap - -// This file tests use of the configMap API resource. - -import ( - "context" - "testing" - - "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - clientset "k8s.io/client-go/kubernetes" - kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" - "k8s.io/kubernetes/test/integration" - "k8s.io/kubernetes/test/integration/framework" -) - -// TestConfigMap tests apiserver-side behavior of creation of ConfigMaps and pods that consume them. -func TestConfigMap(t *testing.T) { - // Disable ServiceAccount admission plugin as we don't have serviceaccount controller running. - server := kubeapiservertesting.StartTestServerOrDie(t, nil, framework.DefaultTestServerFlags(), framework.SharedEtcd()) - defer server.TearDownFn() - - client := clientset.NewForConfigOrDie(server.ClientConfig) - - ns := framework.CreateNamespaceOrDie(client, "config-map", t) - defer framework.DeleteNamespaceOrDie(client, ns, t) - - DoTestConfigMap(t, client, ns) -} - -func DoTestConfigMap(t *testing.T, client clientset.Interface, ns *v1.Namespace) { - cfg := v1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Name: "configmap", - Namespace: ns.Name, - }, - Data: map[string]string{ - "data-1": "value-1", - "data-2": "value-2", - "data-3": "value-3", - }, - } - - if _, err := client.CoreV1().ConfigMaps(cfg.Namespace).Create(context.TODO(), &cfg, metav1.CreateOptions{}); err != nil { - t.Errorf("unable to create test configMap: %v", err) - } - defer deleteConfigMapOrErrorf(t, client, cfg.Namespace, cfg.Name) - - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "XXX", - Namespace: ns.Name, - }, - Spec: v1.PodSpec{ - Containers: []v1.Container{ - { - Name: "fake-name", - Image: "fakeimage", - Env: []v1.EnvVar{ - { - Name: "CONFIG_DATA_1", - ValueFrom: &v1.EnvVarSource{ - ConfigMapKeyRef: &v1.ConfigMapKeySelector{ - LocalObjectReference: v1.LocalObjectReference{ - Name: "configmap", - }, - Key: "data-1", - }, - }, - }, - { - Name: "CONFIG_DATA_2", - ValueFrom: &v1.EnvVarSource{ - ConfigMapKeyRef: &v1.ConfigMapKeySelector{ - LocalObjectReference: v1.LocalObjectReference{ - Name: "configmap", - }, - Key: "data-2", - }, - }, - }, { - Name: "CONFIG_DATA_3", - ValueFrom: &v1.EnvVarSource{ - ConfigMapKeyRef: &v1.ConfigMapKeySelector{ - LocalObjectReference: v1.LocalObjectReference{ - Name: "configmap", - }, - Key: "data-3", - }, - }, - }, - }, - }, - }, - }, - } - - pod.ObjectMeta.Name = "uses-configmap" - if _, err := client.CoreV1().Pods(ns.Name).Create(context.TODO(), pod, metav1.CreateOptions{}); err != nil { - t.Errorf("Failed to create pod: %v", err) - } - defer integration.DeletePodOrErrorf(t, client, ns.Name, pod.Name) -} - -func deleteConfigMapOrErrorf(t *testing.T, c clientset.Interface, ns, name string) { - if err := c.CoreV1().ConfigMaps(ns).Delete(context.TODO(), name, metav1.DeleteOptions{}); err != nil { - t.Errorf("unable to delete ConfigMap %v: %v", name, err) - } -} diff --git a/test/integration/configmap/main_test.go b/test/integration/configmap/main_test.go deleted file mode 100644 index c05a94633b4..00000000000 --- a/test/integration/configmap/main_test.go +++ /dev/null @@ -1,27 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package configmap - -import ( - "testing" - - "k8s.io/kubernetes/test/integration/framework" -) - -func TestMain(m *testing.M) { - framework.EtcdMain(m.Run) -} diff --git a/test/integration/cronjob/OWNERS b/test/integration/cronjob/OWNERS new file mode 100644 index 00000000000..688ea8bd0cf --- /dev/null +++ b/test/integration/cronjob/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/apps diff --git a/test/integration/defaulttolerationseconds/OWNERS b/test/integration/defaulttolerationseconds/OWNERS new file mode 100644 index 00000000000..688ea8bd0cf --- /dev/null +++ b/test/integration/defaulttolerationseconds/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/apps diff --git a/test/integration/disruption/OWNERS b/test/integration/disruption/OWNERS new file mode 100644 index 00000000000..688ea8bd0cf --- /dev/null +++ b/test/integration/disruption/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/apps diff --git a/test/integration/dryrun/OWNERS b/test/integration/dryrun/OWNERS index 2d24eb2504a..48304a74352 100644 --- a/test/integration/dryrun/OWNERS +++ b/test/integration/dryrun/OWNERS @@ -6,3 +6,5 @@ approvers: reviewers: - deads2k - liggitt +labels: + - sig/api-machinery diff --git a/test/integration/dualstack/OWNERS b/test/integration/dualstack/OWNERS new file mode 100644 index 00000000000..c8324a82542 --- /dev/null +++ b/test/integration/dualstack/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/network diff --git a/test/integration/endpoints/OWNERS b/test/integration/endpoints/OWNERS new file mode 100644 index 00000000000..c8324a82542 --- /dev/null +++ b/test/integration/endpoints/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/network diff --git a/test/integration/endpointslice/OWNERS b/test/integration/endpointslice/OWNERS new file mode 100644 index 00000000000..c8324a82542 --- /dev/null +++ b/test/integration/endpointslice/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/network diff --git a/test/integration/events/OWNERS b/test/integration/events/OWNERS new file mode 100644 index 00000000000..c75722ecff5 --- /dev/null +++ b/test/integration/events/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/instrumentation diff --git a/test/integration/evictions/OWNERS b/test/integration/evictions/OWNERS new file mode 100644 index 00000000000..688ea8bd0cf --- /dev/null +++ b/test/integration/evictions/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/apps diff --git a/test/integration/examples/OWNERS b/test/integration/examples/OWNERS new file mode 100644 index 00000000000..55a1deac4ea --- /dev/null +++ b/test/integration/examples/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/api-machinery diff --git a/test/integration/garbagecollector/OWNERS b/test/integration/garbagecollector/OWNERS new file mode 100644 index 00000000000..55a1deac4ea --- /dev/null +++ b/test/integration/garbagecollector/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/api-machinery diff --git a/test/integration/ipamperf/OWNERS b/test/integration/ipamperf/OWNERS new file mode 100644 index 00000000000..c8324a82542 --- /dev/null +++ b/test/integration/ipamperf/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/network diff --git a/test/integration/kubelet/OWNERS b/test/integration/kubelet/OWNERS new file mode 100644 index 00000000000..fbc36618c83 --- /dev/null +++ b/test/integration/kubelet/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/node diff --git a/test/integration/namespace/OWNERS b/test/integration/namespace/OWNERS new file mode 100644 index 00000000000..55a1deac4ea --- /dev/null +++ b/test/integration/namespace/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/api-machinery diff --git a/test/integration/network/OWNERS b/test/integration/network/OWNERS new file mode 100644 index 00000000000..c8324a82542 --- /dev/null +++ b/test/integration/network/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/network diff --git a/test/integration/node/OWNERS b/test/integration/node/OWNERS index d8a9ea055d4..65e322510c3 100644 --- a/test/integration/node/OWNERS +++ b/test/integration/node/OWNERS @@ -4,3 +4,5 @@ approvers: - sig-node-approvers reviewers: - sig-node-reviewers +labels: + - sig/node diff --git a/test/integration/objectmeta/main_test.go b/test/integration/objectmeta/main_test.go deleted file mode 100644 index ca65234eb42..00000000000 --- a/test/integration/objectmeta/main_test.go +++ /dev/null @@ -1,27 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package objectmeta - -import ( - "testing" - - "k8s.io/kubernetes/test/integration/framework" -) - -func TestMain(m *testing.M) { - framework.EtcdMain(m.Run) -} diff --git a/test/integration/openshift/OWNERS b/test/integration/openshift/OWNERS new file mode 100644 index 00000000000..55a1deac4ea --- /dev/null +++ b/test/integration/openshift/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/api-machinery diff --git a/test/integration/podcertificaterequests/OWNERS b/test/integration/podcertificaterequests/OWNERS new file mode 100644 index 00000000000..f357da7076c --- /dev/null +++ b/test/integration/podcertificaterequests/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/auth diff --git a/test/integration/pods/OWNERS b/test/integration/pods/OWNERS index 7ed78e3d1cc..a21b4289d3e 100644 --- a/test/integration/pods/OWNERS +++ b/test/integration/pods/OWNERS @@ -10,3 +10,5 @@ reviewers: emeritus_approvers: - vishh - dchen1107 +labels: + - sig/node diff --git a/test/integration/pvc/OWNERS b/test/integration/pvc/OWNERS new file mode 100644 index 00000000000..b3a806c0a19 --- /dev/null +++ b/test/integration/pvc/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/storage diff --git a/test/integration/quota/OWNERS b/test/integration/quota/OWNERS new file mode 100644 index 00000000000..55a1deac4ea --- /dev/null +++ b/test/integration/quota/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/api-machinery diff --git a/test/integration/replicaset/OWNERS b/test/integration/replicaset/OWNERS new file mode 100644 index 00000000000..688ea8bd0cf --- /dev/null +++ b/test/integration/replicaset/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/apps diff --git a/test/integration/replicationcontroller/OWNERS b/test/integration/replicationcontroller/OWNERS new file mode 100644 index 00000000000..688ea8bd0cf --- /dev/null +++ b/test/integration/replicationcontroller/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/apps diff --git a/test/integration/scale/OWNERS b/test/integration/scale/OWNERS new file mode 100644 index 00000000000..688ea8bd0cf --- /dev/null +++ b/test/integration/scale/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/apps diff --git a/test/integration/secrets/OWNERS b/test/integration/secrets/OWNERS new file mode 100644 index 00000000000..f357da7076c --- /dev/null +++ b/test/integration/secrets/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/auth diff --git a/test/integration/service/OWNERS b/test/integration/service/OWNERS new file mode 100644 index 00000000000..c8324a82542 --- /dev/null +++ b/test/integration/service/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/network diff --git a/test/integration/serviceaccount/OWNERS b/test/integration/serviceaccount/OWNERS new file mode 100644 index 00000000000..f357da7076c --- /dev/null +++ b/test/integration/serviceaccount/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/auth diff --git a/test/integration/servicecidr/OWNERS b/test/integration/servicecidr/OWNERS new file mode 100644 index 00000000000..c8324a82542 --- /dev/null +++ b/test/integration/servicecidr/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/network diff --git a/test/integration/serving/OWNERS b/test/integration/serving/OWNERS new file mode 100644 index 00000000000..f357da7076c --- /dev/null +++ b/test/integration/serving/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/auth diff --git a/test/integration/staleness/OWNERS b/test/integration/staleness/OWNERS new file mode 100644 index 00000000000..55a1deac4ea --- /dev/null +++ b/test/integration/staleness/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/api-machinery diff --git a/test/integration/statefulset/OWNERS b/test/integration/statefulset/OWNERS new file mode 100644 index 00000000000..688ea8bd0cf --- /dev/null +++ b/test/integration/statefulset/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/apps diff --git a/test/integration/storageclasses/OWNERS b/test/integration/storageclasses/OWNERS new file mode 100644 index 00000000000..b3a806c0a19 --- /dev/null +++ b/test/integration/storageclasses/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/storage diff --git a/test/integration/storageversion/OWNERS b/test/integration/storageversion/OWNERS new file mode 100644 index 00000000000..55a1deac4ea --- /dev/null +++ b/test/integration/storageversion/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/api-machinery diff --git a/test/integration/storageversionmigrator/OWNERS b/test/integration/storageversionmigrator/OWNERS new file mode 100644 index 00000000000..55a1deac4ea --- /dev/null +++ b/test/integration/storageversionmigrator/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/api-machinery diff --git a/test/integration/tls/OWNERS b/test/integration/tls/OWNERS new file mode 100644 index 00000000000..f357da7076c --- /dev/null +++ b/test/integration/tls/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/auth diff --git a/test/integration/ttlcontroller/OWNERS b/test/integration/ttlcontroller/OWNERS new file mode 100644 index 00000000000..688ea8bd0cf --- /dev/null +++ b/test/integration/ttlcontroller/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +labels: + - sig/apps