mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 06:54:01 +00:00
Change verify-imports to use new setup_env
Also clean up the tool a bit and drop vendor as an explicit thing to be handled.
This commit is contained in:
parent
3be358ecc1
commit
7a7dff1eeb
@ -33,7 +33,7 @@ import (
|
||||
// Package is a subset of cmd/go.Package
|
||||
type Package struct {
|
||||
Dir string `yaml:",omitempty"` // directory containing package sources
|
||||
ImportPath string `yaml:",omitempty"` // import path of package in dir
|
||||
ImportPath string `yaml:",omitempty"` // import path of package
|
||||
Imports []string `yaml:",omitempty"` // import paths used by this package
|
||||
TestImports []string `yaml:",omitempty"` // imports from TestGoFiles
|
||||
XTestImports []string `yaml:",omitempty"` // imports from XTestGoFiles
|
||||
@ -42,19 +42,18 @@ type Package struct {
|
||||
// ImportRestriction describes a set of allowable import
|
||||
// trees for a tree of source code
|
||||
type ImportRestriction struct {
|
||||
// BaseDir is the root of the package tree that is
|
||||
// restricted by this configuration, given as a
|
||||
// relative path from the root of the repository
|
||||
// BaseDir is the root of a package tree that is restricted by this
|
||||
// configuration, given as a relative path from the root of the repository.
|
||||
// This is a directory which `go list` might not consider a package (if it
|
||||
// has not .go files)
|
||||
BaseDir string `yaml:"baseImportPath"`
|
||||
// IgnoredSubTrees are roots of sub-trees of the
|
||||
// BaseDir for which we do not want to enforce
|
||||
// any import restrictions whatsoever, given as
|
||||
// relative paths from the root of the repository
|
||||
// IgnoredSubTrees are roots of sub-trees of the BaseDir for which we do
|
||||
// not want to enforce any import restrictions whatsoever, given as
|
||||
// relative paths from the root of the repository.
|
||||
IgnoredSubTrees []string `yaml:"ignoredSubTrees,omitempty"`
|
||||
// AllowedImports are roots of package trees that
|
||||
// are allowed to be imported from the BaseDir,
|
||||
// given as paths that would be used in a Go
|
||||
// import statement
|
||||
// AllowedImports are roots of package trees that are allowed to be
|
||||
// imported from the BaseDir, given as paths that would be used in a Go
|
||||
// import statement.
|
||||
AllowedImports []string `yaml:"allowedImports"`
|
||||
// ExcludeTests will skip checking test dependencies.
|
||||
ExcludeTests bool `yaml:"excludeTests"`
|
||||
@ -126,9 +125,8 @@ func (i *ImportRestriction) forbiddenImportsFor(pkg Package) []string {
|
||||
imports = append(imports, append(pkg.TestImports, pkg.XTestImports...)...)
|
||||
}
|
||||
for _, imp := range imports {
|
||||
path := extractVendorPath(imp)
|
||||
if i.isForbidden(path) {
|
||||
forbiddenImportSet[path] = struct{}{}
|
||||
if i.isForbidden(imp) {
|
||||
forbiddenImportSet[imp] = struct{}{}
|
||||
}
|
||||
}
|
||||
|
||||
@ -139,16 +137,6 @@ func (i *ImportRestriction) forbiddenImportsFor(pkg Package) []string {
|
||||
return forbiddenImports
|
||||
}
|
||||
|
||||
// extractVendorPath removes a vendor prefix if one exists
|
||||
func extractVendorPath(path string) string {
|
||||
vendorPath := "/vendor/"
|
||||
if !strings.Contains(path, vendorPath) {
|
||||
return path
|
||||
}
|
||||
|
||||
return path[strings.Index(path, vendorPath)+len(vendorPath):]
|
||||
}
|
||||
|
||||
// isForbidden determines if an import is forbidden,
|
||||
// which is true when the import is:
|
||||
// - of a package under the rootPackage
|
||||
@ -171,7 +159,7 @@ var rootPackage string
|
||||
|
||||
func main() {
|
||||
if len(os.Args) != 3 {
|
||||
log.Fatalf("Usage: %s ROOT RESTRICTIONS.yaml", os.Args[0])
|
||||
log.Fatalf("Usage: %s <root> <restrictions.yaml>", os.Args[0])
|
||||
}
|
||||
|
||||
rootPackage = os.Args[1]
|
||||
@ -183,15 +171,24 @@ func main() {
|
||||
|
||||
foundForbiddenImports := false
|
||||
for _, restriction := range importRestrictions {
|
||||
log.Printf("Inspecting imports under %s...\n", restriction.BaseDir)
|
||||
packages, err := resolvePackageTree(restriction.BaseDir)
|
||||
baseDir := restriction.BaseDir
|
||||
if filepath.IsAbs(baseDir) {
|
||||
log.Fatalf("%q appears to be an absolute path", baseDir)
|
||||
}
|
||||
if !strings.HasPrefix(baseDir, "./") {
|
||||
baseDir = "./" + baseDir
|
||||
}
|
||||
baseDir = strings.TrimRight(baseDir, "/")
|
||||
log.Printf("Inspecting imports under %s/...\n", baseDir)
|
||||
|
||||
packages, err := resolvePackageTree(baseDir)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to resolve package tree: %v", err)
|
||||
} else if len(packages) == 0 {
|
||||
log.Fatalf("Found no packages under tree %s", restriction.BaseDir)
|
||||
log.Fatalf("Found no packages under tree %s", baseDir)
|
||||
}
|
||||
|
||||
log.Printf("- validating imports for %d packages in the tree", len(packages))
|
||||
log.Printf("- validating imports for %d packages", len(packages))
|
||||
restrictionViolated := false
|
||||
for _, pkg := range packages {
|
||||
if forbidden, err := restriction.ForbiddenImportsFor(pkg); err != nil {
|
||||
@ -229,25 +226,9 @@ func loadImportRestrictions(configFile string) ([]ImportRestriction, error) {
|
||||
}
|
||||
|
||||
func resolvePackageTree(treeBase string) ([]Package, error) {
|
||||
// try resolving with $cwd
|
||||
packages, err := resolvePackageTreeInDir("", treeBase)
|
||||
if err != nil || len(packages) == 0 {
|
||||
// if that fails or finds no packages, resolve under ./vendor/$treeBase
|
||||
stagingPackages, stagingErr := resolvePackageTreeInDir(filepath.Join("./vendor", treeBase), treeBase)
|
||||
if stagingErr == nil && len(stagingPackages) > 0 {
|
||||
// if that succeeds, return
|
||||
return stagingPackages, stagingErr
|
||||
}
|
||||
}
|
||||
// otherwise, return original packages and error
|
||||
return packages, err
|
||||
}
|
||||
|
||||
func resolvePackageTreeInDir(dir string, treeBase string) ([]Package, error) {
|
||||
cmd := "go"
|
||||
args := []string{"list", "-json", fmt.Sprintf("%s...", treeBase)}
|
||||
args := []string{"list", "-json", fmt.Sprintf("%s/...", treeBase)}
|
||||
c := exec.Command(cmd, args...)
|
||||
c.Dir = dir
|
||||
stdout, err := c.Output()
|
||||
if err != nil {
|
||||
var message string
|
||||
|
@ -26,7 +26,7 @@ set -o pipefail
|
||||
KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||
source "${KUBE_ROOT}/hack/lib/init.sh"
|
||||
|
||||
kube::golang::old::setup_env
|
||||
kube::golang::new::setup_env
|
||||
|
||||
make -C "${KUBE_ROOT}" WHAT=cmd/importverifier
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
- baseImportPath: "./pkg/apis/core/"
|
||||
- baseImportPath: "./pkg/apis/core"
|
||||
allowedImports:
|
||||
- k8s.io/apimachinery
|
||||
- k8s.io/apiserver/pkg/util/feature
|
||||
@ -21,7 +21,7 @@
|
||||
ignoredSubTrees:
|
||||
- "./pkg/apis/core/validation"
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/cli-runtime/pkg/genericclioptions/"
|
||||
- baseImportPath: "./staging/src/k8s.io/cli-runtime/pkg/genericclioptions"
|
||||
allowedImports:
|
||||
- k8s.io/apimachinery
|
||||
- k8s.io/client-go
|
||||
@ -33,7 +33,7 @@
|
||||
- k8s.io/cli-runtime/pkg/kustomize
|
||||
- k8s.io/utils/pointer
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/apimachinery/"
|
||||
- baseImportPath: "./staging/src/k8s.io/apimachinery"
|
||||
allowedImports:
|
||||
- k8s.io/apimachinery
|
||||
- k8s.io/kube-openapi
|
||||
@ -42,22 +42,22 @@
|
||||
- k8s.io/utils/strings
|
||||
- k8s.io/klog
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/api/"
|
||||
- baseImportPath: "./staging/src/k8s.io/api"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
- k8s.io/klog
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/code-generator/"
|
||||
- baseImportPath: "./staging/src/k8s.io/code-generator"
|
||||
ignoredSubTrees:
|
||||
- "./vendor/k8s.io/code-generator/examples"
|
||||
- "./staging/src/k8s.io/code-generator/examples"
|
||||
allowedImports:
|
||||
- k8s.io/gengo
|
||||
- k8s.io/code-generator
|
||||
- k8s.io/kube-openapi
|
||||
- k8s.io/klog
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/component-base/"
|
||||
- baseImportPath: "./staging/src/k8s.io/component-base"
|
||||
allowedImports:
|
||||
- k8s.io/apimachinery
|
||||
- k8s.io/component-base
|
||||
@ -66,7 +66,7 @@
|
||||
- k8s.io/klog
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/client-go/"
|
||||
- baseImportPath: "./staging/src/k8s.io/client-go"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -77,30 +77,30 @@
|
||||
|
||||
# prevent core machinery from taking explicit v1 references unless
|
||||
# necessary
|
||||
- baseImportPath: "./vendor/k8s.io/client-go/rest/"
|
||||
- baseImportPath: "./staging/src/k8s.io/client-go/rest"
|
||||
excludeTests: true
|
||||
allowedImports:
|
||||
- k8s.io/apimachinery
|
||||
- k8s.io/client-go
|
||||
- k8s.io/klog
|
||||
- k8s.io/utils
|
||||
- baseImportPath: "./vendor/k8s.io/client-go/tools/"
|
||||
- baseImportPath: "./staging/src/k8s.io/client-go/tools"
|
||||
excludeTests: true
|
||||
ignoredSubTrees:
|
||||
- "./vendor/k8s.io/client-go/tools/cache/testing"
|
||||
- "./vendor/k8s.io/client-go/tools/leaderelection/resourcelock"
|
||||
- "./vendor/k8s.io/client-go/tools/portforward"
|
||||
- "./vendor/k8s.io/client-go/tools/record"
|
||||
- "./vendor/k8s.io/client-go/tools/events"
|
||||
- "./vendor/k8s.io/client-go/tools/reference"
|
||||
- "./vendor/k8s.io/client-go/tools/remotecommand"
|
||||
- "./staging/src/k8s.io/client-go/tools/cache/testing"
|
||||
- "./staging/src/k8s.io/client-go/tools/leaderelection/resourcelock"
|
||||
- "./staging/src/k8s.io/client-go/tools/portforward"
|
||||
- "./staging/src/k8s.io/client-go/tools/record"
|
||||
- "./staging/src/k8s.io/client-go/tools/events"
|
||||
- "./staging/src/k8s.io/client-go/tools/reference"
|
||||
- "./staging/src/k8s.io/client-go/tools/remotecommand"
|
||||
allowedImports:
|
||||
- k8s.io/apimachinery
|
||||
- k8s.io/client-go
|
||||
- k8s.io/klog
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/apiserver/"
|
||||
- baseImportPath: "./staging/src/k8s.io/apiserver"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -112,7 +112,7 @@
|
||||
- k8s.io/klog
|
||||
- k8s.io/kms
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/metrics/"
|
||||
- baseImportPath: "./staging/src/k8s.io/metrics"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -121,7 +121,7 @@
|
||||
- k8s.io/metrics
|
||||
- k8s.io/klog
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/kube-aggregator/"
|
||||
- baseImportPath: "./staging/src/k8s.io/kube-aggregator"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -134,7 +134,7 @@
|
||||
- k8s.io/klog
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/kubectl/"
|
||||
- baseImportPath: "./staging/src/k8s.io/kubectl"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -148,7 +148,7 @@
|
||||
- k8s.io/utils
|
||||
- k8s.io/klog
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/sample-apiserver/"
|
||||
- baseImportPath: "./staging/src/k8s.io/sample-apiserver"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -161,7 +161,7 @@
|
||||
- k8s.io/utils/net
|
||||
- k8s.io/klog
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/apiextensions-apiserver/"
|
||||
- baseImportPath: "./staging/src/k8s.io/apiextensions-apiserver"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apiextensions-apiserver
|
||||
@ -174,21 +174,21 @@
|
||||
- k8s.io/kube-openapi
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/kube-openapi/"
|
||||
- baseImportPath: "./vendor/k8s.io/kube-openapi"
|
||||
allowedImports:
|
||||
- k8s.io/kube-openapi
|
||||
- k8s.io/gengo
|
||||
- k8s.io/klog
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/sample-cli-plugin/"
|
||||
- baseImportPath: "./staging/src/k8s.io/sample-cli-plugin"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/cli-runtime
|
||||
- k8s.io/client-go
|
||||
- k8s.io/sample-cli-plugin
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/kube-controller-manager/"
|
||||
- baseImportPath: "./staging/src/k8s.io/kube-controller-manager"
|
||||
allowedImports:
|
||||
- k8s.io/apimachinery
|
||||
- k8s.io/cloud-provider
|
||||
@ -197,14 +197,14 @@
|
||||
- k8s.io/klog
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/kube-proxy/"
|
||||
- baseImportPath: "./staging/src/k8s.io/kube-proxy"
|
||||
allowedImports:
|
||||
- k8s.io/apimachinery
|
||||
- k8s.io/component-base
|
||||
- k8s.io/klog
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/kube-scheduler/"
|
||||
- baseImportPath: "./staging/src/k8s.io/kube-scheduler"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -213,7 +213,7 @@
|
||||
- k8s.io/kube-scheduler
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/kubelet/"
|
||||
- baseImportPath: "./staging/src/k8s.io/kubelet"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -225,14 +225,14 @@
|
||||
- k8s.io/kubelet
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/cluster-bootstrap/"
|
||||
- baseImportPath: "./staging/src/k8s.io/cluster-bootstrap"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
- k8s.io/cluster-bootstrap
|
||||
- k8s.io/klog
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/cloud-provider/"
|
||||
- baseImportPath: "./staging/src/k8s.io/cloud-provider"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -245,7 +245,7 @@
|
||||
- k8s.io/klog
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/dynamic-resource-allocation/"
|
||||
- baseImportPath: "./staging/src/k8s.io/dynamic-resource-allocation"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -255,7 +255,7 @@
|
||||
- k8s.io/kubelet
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/legacy-cloud-providers/"
|
||||
- baseImportPath: "./staging/src/k8s.io/legacy-cloud-providers"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -271,14 +271,14 @@
|
||||
- k8s.io/component-base/metrics
|
||||
- k8s.io/component-base/metrics/legacyregistry
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/csi-translation-lib/"
|
||||
- baseImportPath: "./staging/src/k8s.io/csi-translation-lib"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
- k8s.io/klog
|
||||
- k8s.io/csi-translation-lib
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/component-helpers/"
|
||||
- baseImportPath: "./staging/src/k8s.io/component-helpers"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -287,7 +287,7 @@
|
||||
- k8s.io/klog
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/pod-security-admission/"
|
||||
- baseImportPath: "./staging/src/k8s.io/pod-security-admission"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
@ -299,11 +299,11 @@
|
||||
- k8s.io/pod-security-admission
|
||||
- k8s.io/utils
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/kms/"
|
||||
- baseImportPath: "./staging/src/k8s.io/kms"
|
||||
allowedImports:
|
||||
- k8s.io/kms
|
||||
|
||||
- baseImportPath: "./vendor/k8s.io/endpointslice/"
|
||||
- baseImportPath: "./staging/src/k8s.io/endpointslice"
|
||||
allowedImports:
|
||||
- k8s.io/api
|
||||
- k8s.io/apimachinery
|
||||
|
Loading…
Reference in New Issue
Block a user