mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-11 13:02:14 +00:00
Merge pull request #119742 from liggitt/unwanted-deps
Catch direct references to unwanted dependencies in kubernetes modules
This commit is contained in:
commit
ad15077193
@ -50,7 +50,13 @@ type UnwantedStatus struct {
|
|||||||
// runCommand runs the cmd and returns the combined stdout and stderr, or an
|
// runCommand runs the cmd and returns the combined stdout and stderr, or an
|
||||||
// error if the command failed.
|
// error if the command failed.
|
||||||
func runCommand(cmd ...string) (string, error) {
|
func runCommand(cmd ...string) (string, error) {
|
||||||
output, err := exec.Command(cmd[0], cmd[1:]...).CombinedOutput()
|
return runCommandInDir("", cmd)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runCommandInDir(dir string, cmd []string) (string, error) {
|
||||||
|
c := exec.Command(cmd[0], cmd[1:]...)
|
||||||
|
c.Dir = dir
|
||||||
|
output, err := c.CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("failed to run %q: %s (%s)", strings.Join(cmd, " "), err, output)
|
return "", fmt.Errorf("failed to run %q: %s (%s)", strings.Join(cmd, " "), err, output)
|
||||||
}
|
}
|
||||||
@ -155,8 +161,6 @@ func parseModule(s string) module {
|
|||||||
|
|
||||||
// option1: dependencyverifier dependencies.json
|
// option1: dependencyverifier dependencies.json
|
||||||
// it will run `go mod graph` and check it.
|
// it will run `go mod graph` and check it.
|
||||||
// option2: dependencyverifier dependencies.json mod.graph
|
|
||||||
// it will check the specified mod graph result file.
|
|
||||||
func main() {
|
func main() {
|
||||||
var modeGraphStr string
|
var modeGraphStr string
|
||||||
var err error
|
var err error
|
||||||
@ -166,15 +170,8 @@ func main() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error running 'go mod graph': %s", err)
|
log.Fatalf("Error running 'go mod graph': %s", err)
|
||||||
}
|
}
|
||||||
} else if len(os.Args) == 3 {
|
|
||||||
modGraphFile := string(os.Args[2])
|
|
||||||
modeGraphStr, err = readFile(modGraphFile)
|
|
||||||
// read file, such as `mod.graph`
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error reading mod file %s: %s", modGraphFile, err)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
log.Fatalf("Usage: %s dependencies.json {mod.graph}", os.Args[0])
|
log.Fatalf("Usage: %s dependencies.json", os.Args[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
dependenciesJSONPath := string(os.Args[1])
|
dependenciesJSONPath := string(os.Args[1])
|
||||||
@ -194,6 +191,22 @@ func main() {
|
|||||||
// convert from `go mod graph` to main module and map of from->[]to references
|
// convert from `go mod graph` to main module and map of from->[]to references
|
||||||
mainModules, moduleGraph := convertToMap(modeGraphStr)
|
mainModules, moduleGraph := convertToMap(modeGraphStr)
|
||||||
|
|
||||||
|
directDependencies := map[string]map[string]bool{}
|
||||||
|
for _, mainModule := range mainModules {
|
||||||
|
dir := ""
|
||||||
|
if mainModule.name != "k8s.io/kubernetes" {
|
||||||
|
dir = "staging/src/" + mainModule.name
|
||||||
|
}
|
||||||
|
listOutput, err := runCommandInDir(dir, []string{"go", "list", "-m", "-f", "{{if not .Indirect}}{{if not .Main}}{{.Path}}{{end}}{{end}}", "all"})
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Error running 'go list' for %s: %s", mainModule.name, err)
|
||||||
|
}
|
||||||
|
directDependencies[mainModule.name] = map[string]bool{}
|
||||||
|
for _, directDependency := range strings.Split(listOutput, "\n") {
|
||||||
|
directDependencies[mainModule.name][directDependency] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// gather the effective versions by looking at the versions required by the main modules
|
// gather the effective versions by looking at the versions required by the main modules
|
||||||
effectiveVersions := map[string]module{}
|
effectiveVersions := map[string]module{}
|
||||||
for _, mainModule := range mainModules {
|
for _, mainModule := range mainModules {
|
||||||
@ -253,6 +266,8 @@ func main() {
|
|||||||
// record specific names of versioned referents
|
// record specific names of versioned referents
|
||||||
if referencer.version != "" && referencer.version != "v0.0.0" {
|
if referencer.version != "" && referencer.version != "v0.0.0" {
|
||||||
config.Status.UnwantedReferences[unwanted] = append(config.Status.UnwantedReferences[unwanted], referencer.name)
|
config.Status.UnwantedReferences[unwanted] = append(config.Status.UnwantedReferences[unwanted], referencer.name)
|
||||||
|
} else if directDependencies[referencer.name][unwanted] {
|
||||||
|
config.Status.UnwantedReferences[unwanted] = append(config.Status.UnwantedReferences[unwanted], referencer.name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -271,7 +286,7 @@ func main() {
|
|||||||
if !bytes.Equal(expected, actual) {
|
if !bytes.Equal(expected, actual) {
|
||||||
log.Printf("Expected status of\n%s", string(expected))
|
log.Printf("Expected status of\n%s", string(expected))
|
||||||
log.Printf("Got status of\n%s", string(actual))
|
log.Printf("Got status of\n%s", string(actual))
|
||||||
log.Fatal("Status diff:\n", cmp.Diff(actual, expected))
|
log.Fatal("Status diff:\n", cmp.Diff(expected, actual))
|
||||||
}
|
}
|
||||||
for expectedRef, expectedFrom := range configFromFile.Status.UnwantedReferences {
|
for expectedRef, expectedFrom := range configFromFile.Status.UnwantedReferences {
|
||||||
actualFrom, ok := config.Status.UnwantedReferences[expectedRef]
|
actualFrom, ok := config.Status.UnwantedReferences[expectedRef]
|
||||||
|
@ -104,7 +104,19 @@
|
|||||||
"go.etcd.io/etcd/api/v3",
|
"go.etcd.io/etcd/api/v3",
|
||||||
"go.etcd.io/etcd/client/v3",
|
"go.etcd.io/etcd/client/v3",
|
||||||
"go.etcd.io/etcd/raft/v3",
|
"go.etcd.io/etcd/raft/v3",
|
||||||
"go.etcd.io/etcd/server/v3"
|
"go.etcd.io/etcd/server/v3",
|
||||||
|
"k8s.io/api",
|
||||||
|
"k8s.io/apiextensions-apiserver",
|
||||||
|
"k8s.io/apimachinery",
|
||||||
|
"k8s.io/apiserver",
|
||||||
|
"k8s.io/client-go",
|
||||||
|
"k8s.io/code-generator",
|
||||||
|
"k8s.io/cri-api",
|
||||||
|
"k8s.io/kms",
|
||||||
|
"k8s.io/kube-aggregator",
|
||||||
|
"k8s.io/kubelet",
|
||||||
|
"k8s.io/kubernetes",
|
||||||
|
"k8s.io/metrics"
|
||||||
],
|
],
|
||||||
"github.com/google/shlex": [
|
"github.com/google/shlex": [
|
||||||
"sigs.k8s.io/kustomize/api",
|
"sigs.k8s.io/kustomize/api",
|
||||||
@ -149,6 +161,8 @@
|
|||||||
"github.com/grpc-ecosystem/go-grpc-middleware",
|
"github.com/grpc-ecosystem/go-grpc-middleware",
|
||||||
"go.uber.org/zap",
|
"go.uber.org/zap",
|
||||||
"gotest.tools/v3",
|
"gotest.tools/v3",
|
||||||
|
"k8s.io/kubectl",
|
||||||
|
"k8s.io/kubernetes",
|
||||||
"k8s.io/system-validators",
|
"k8s.io/system-validators",
|
||||||
"sigs.k8s.io/kustomize/api",
|
"sigs.k8s.io/kustomize/api",
|
||||||
"sigs.k8s.io/kustomize/kustomize/v5"
|
"sigs.k8s.io/kustomize/kustomize/v5"
|
||||||
@ -163,7 +177,9 @@
|
|||||||
"cloud.google.com/go/compute",
|
"cloud.google.com/go/compute",
|
||||||
"cloud.google.com/go/storage",
|
"cloud.google.com/go/storage",
|
||||||
"github.com/GoogleCloudPlatform/k8s-cloud-provider",
|
"github.com/GoogleCloudPlatform/k8s-cloud-provider",
|
||||||
"github.com/googleapis/gax-go/v2"
|
"github.com/googleapis/gax-go/v2",
|
||||||
|
"k8s.io/kubernetes",
|
||||||
|
"k8s.io/legacy-cloud-providers"
|
||||||
],
|
],
|
||||||
"google.golang.org/genproto": [
|
"google.golang.org/genproto": [
|
||||||
"cloud.google.com/go",
|
"cloud.google.com/go",
|
||||||
|
Loading…
Reference in New Issue
Block a user