diff options
-rw-r--r-- | .golangci.yml | 35 | ||||
-rwxr-xr-x | .tool/lint | 48 | ||||
-rw-r--r-- | Makefile | 16 | ||||
-rw-r--r-- | cmd/podman/common.go | 6 | ||||
-rw-r--r-- | cmd/podman/common_test.go | 15 | ||||
-rw-r--r-- | cmd/podman/pod_ps.go | 1 | ||||
-rw-r--r-- | cmd/podman/pod_stats.go | 14 | ||||
-rw-r--r-- | cmd/podman/ps.go | 117 | ||||
-rw-r--r-- | cmd/podman/run_test.go | 1 | ||||
-rw-r--r-- | cmd/podman/search.go | 5 | ||||
-rw-r--r-- | cmd/podman/shared/create.go | 5 | ||||
-rw-r--r-- | cmd/podman/trust_set_show.go | 5 | ||||
-rw-r--r-- | cmd/podman/utils.go | 42 | ||||
-rw-r--r-- | test/e2e/common_test.go | 17 |
14 files changed, 67 insertions, 260 deletions
diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 000000000..8fde162c4 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,35 @@ +--- +run: + concurrency: 6 + deadline: 5m +linters: + disable-all: true + enable: + - deadcode + - depguard + - gofmt + - typecheck + - varcheck + # - dupl + # - errcheck + # - gochecknoglobals + # - gochecknoinits + # - goconst + # - gocritic + # - gocyclo + # - goimports + # - golint + # - gosec + # - govet + # - ineffassign + # - interfacer + # - lll + # - maligned + # - misspell + # - nakedret + # - prealloc + # - scopelint + # - staticcheck + # - structcheck + # - unconvert + # - unparam diff --git a/.tool/lint b/.tool/lint deleted file mode 100755 index f7bf81c1d..000000000 --- a/.tool/lint +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash - -set -o errexit -set -o nounset -set -o pipefail - -# Create the linter path for use later -LINTER=${GOPATH}/bin/gometalinter - -# Make sure gometalinter is installed -if [ ! -f ${LINTER} ]; then - echo >&2 "gometalinter must be installed. Please run 'make install.tools' and try again" - exit 1 -fi - -PKGS=$(find . -type d -not -path . -a -not -iwholename '*.git*' -a -not -iname '.tool' -a -not -iwholename '*vendor*' -a -not -iname 'hack' -a -not -iwholename '*.artifacts*' -a -not -iwholename '*contrib*' -a -not -iwholename '*test*' -a -not -iwholename '*logo*' -a -not -iwholename '*conmon*' -a -not -iwholename '*completions*' -a -not -iwholename '*docs*' -a -not -iwholename '*pause*' -a -not -iwholename './_output*' -a -not -iwholename '*ioprojectatomicpodman.go') - -echo $PKGS - -# Execute the linter -${LINTER} \ - --concurrency=4\ - --enable-gc\ - --vendored-linters\ - --deadline=600s --disable-all\ - --enable=deadcode\ - --enable=errcheck\ - --enable=goconst\ - --enable=gofmt\ - --enable=golint\ - --enable=ineffassign\ - --enable=megacheck\ - --enable=misspell\ - --enable=structcheck\ - --enable=varcheck\ - --enable=vet\ - --enable=vetshadow\ - --exclude='error return value not checked.*\(errcheck\)$'\ - --exclude='declaration of.*err.*shadows declaration.*\(vetshadow\)$'\ - --exclude='.*_test\.go:.*error return value not checked.*\(errcheck\)$'\ - --exclude='duplicate of.*_test.go.*\(dupl\)$'\ - --exclude='cmd\/client\/.*\.go.*\(dupl\)$'\ - --exclude='libpod\/.*_easyjson.go:.*'\ - --exclude='.* other occurrence\(s\) of "(container|host|tmpfs|unknown)" found in: .*\(goconst\)$'\ - --exclude='vendor\/.*'\ - --exclude='podman\/.*'\ - --exclude='server\/seccomp\/.*\.go.*$'\ - ${PKGS[@]} @@ -98,8 +98,7 @@ endif touch $@ lint: .gopathok varlink_generate ## Execute the source code linter - @echo "checking lint" - @./.tool/lint + golangci-lint run --build-tags="$(BUILDTAGS)" gofmt: ## Verify the source code gofmt find . -name '*.go' ! -path './vendor/*' -exec gofmt -s -w {} \+ @@ -280,7 +279,7 @@ uninstall: .PHONY: install.tools -install.tools: .install.gitvalidation .install.gometalinter .install.md2man .install.ginkgo ## Install needed tools +install.tools: .install.gitvalidation .install.golangci-lint .install.md2man .install.ginkgo ## Install needed tools .install.vndr: .gopathok $(GO) get -u github.com/LK4D4/vndr @@ -295,13 +294,10 @@ install.tools: .install.gitvalidation .install.gometalinter .install.md2man .ins $(GO) get -u github.com/vbatts/git-validation; \ fi -.install.gometalinter: .gopathok - if [ ! -x "$(GOBIN)/gometalinter" ]; then \ - $(GO) get -u github.com/alecthomas/gometalinter; \ - cd $(FIRST_GOPATH)/src/github.com/alecthomas/gometalinter; \ - git checkout e8d801238da6f0dfd14078d68f9b53fa50a7eeb5; \ - $(GO) install github.com/alecthomas/gometalinter; \ - $(GOBIN)/gometalinter --install; \ +.install.golangci-lint: .gopathok + if [ ! -x "$(GOBIN)/golangci-lint" ]; then \ + curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh |\ + sh -s -- -b $(GOBIN) v1.15.0 ;\ fi .install.md2man: .gopathok diff --git a/cmd/podman/common.go b/cmd/podman/common.go index 10fed053e..f4d128df2 100644 --- a/cmd/podman/common.go +++ b/cmd/podman/common.go @@ -10,17 +10,13 @@ import ( "github.com/containers/libpod/cmd/podman/cliconfig" "github.com/containers/libpod/libpod" "github.com/containers/libpod/pkg/rootless" - "github.com/containers/storage" "github.com/fatih/camelcase" jsoniter "github.com/json-iterator/go" "github.com/pkg/errors" "github.com/spf13/cobra" ) -var ( - stores = make(map[storage.Store]struct{}) - json = jsoniter.ConfigCompatibleWithStandardLibrary -) +var json = jsoniter.ConfigCompatibleWithStandardLibrary const ( idTruncLength = 12 diff --git a/cmd/podman/common_test.go b/cmd/podman/common_test.go deleted file mode 100644 index a24173003..000000000 --- a/cmd/podman/common_test.go +++ /dev/null @@ -1,15 +0,0 @@ -package main - -import ( - "os/user" - "testing" -) - -func skipTestIfNotRoot(t *testing.T) { - u, err := user.Current() - if err != nil { - t.Skip("Could not determine user. Running without root may cause tests to fail") - } else if u.Uid != "0" { - t.Skip("tests will fail unless run as root") - } -} diff --git a/cmd/podman/pod_ps.go b/cmd/podman/pod_ps.go index a956882cf..d0cc6aa12 100644 --- a/cmd/podman/pod_ps.go +++ b/cmd/podman/pod_ps.go @@ -20,7 +20,6 @@ import ( ) const ( - STOPPED = "Stopped" RUNNING = "Running" PAUSED = "Paused" EXITED = "Exited" diff --git a/cmd/podman/pod_stats.go b/cmd/podman/pod_stats.go index 36b0b95ed..744602268 100644 --- a/cmd/podman/pod_stats.go +++ b/cmd/podman/pod_stats.go @@ -298,17 +298,3 @@ func outputJson(stats []*adapter.PodContainerStats) error { fmt.Println(string(b)) return nil } - -func getPodsByList(podList []string, r *libpod.Runtime) ([]*libpod.Pod, error) { - var ( - pods []*libpod.Pod - ) - for _, p := range podList { - pod, err := r.LookupPod(p) - if err != nil { - return nil, err - } - pods = append(pods, pod) - } - return pods, nil -} diff --git a/cmd/podman/ps.go b/cmd/podman/ps.go index 759a03b86..232cf4b77 100644 --- a/cmd/podman/ps.go +++ b/cmd/podman/ps.go @@ -18,35 +18,31 @@ import ( "github.com/containers/libpod/cmd/podman/shared" "github.com/containers/libpod/libpod" "github.com/containers/libpod/pkg/util" - "github.com/cri-o/ocicni/pkg/ocicni" "github.com/docker/go-units" "github.com/opentracing/opentracing-go" "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "k8s.io/apimachinery/pkg/fields" ) const ( - mountTruncLength = 12 - hid = "CONTAINER ID" - himage = "IMAGE" - hcommand = "COMMAND" - hcreated = "CREATED" - hstatus = "STATUS" - hports = "PORTS" - hnames = "NAMES" - hsize = "SIZE" - hinfra = "IS INFRA" - hpod = "POD" - nspid = "PID" - nscgroup = "CGROUPNS" - nsipc = "IPC" - nsmnt = "MNT" - nsnet = "NET" - nspidns = "PIDNS" - nsuserns = "USERNS" - nsuts = "UTS" + hid = "CONTAINER ID" + himage = "IMAGE" + hcommand = "COMMAND" + hcreated = "CREATED" + hstatus = "STATUS" + hports = "PORTS" + hnames = "NAMES" + hsize = "SIZE" + hpod = "POD" + nspid = "PID" + nscgroup = "CGROUPNS" + nsipc = "IPC" + nsmnt = "MNT" + nsnet = "NET" + nspidns = "PIDNS" + nsuserns = "USERNS" + nsuts = "UTS" ) type psTemplateParams struct { @@ -73,34 +69,6 @@ type psTemplateParams struct { IsInfra bool } -// psJSONParams is used as a base structure for the psParams -// If template output is requested, psJSONParams will be converted to -// psTemplateParams. -// psJSONParams will be populated by data from libpod.Container, -// the members of the struct are the sama data types as their sources. -type psJSONParams struct { - ID string `json:"id"` - Image string `json:"image"` - ImageID string `json:"image_id"` - Command []string `json:"command"` - ExitCode int32 `json:"exitCode"` - Exited bool `json:"exited"` - CreatedAt time.Time `json:"createdAt"` - StartedAt time.Time `json:"startedAt"` - ExitedAt time.Time `json:"exitedAt"` - Status string `json:"status"` - PID int `json:"PID"` - Ports []ocicni.PortMapping `json:"ports"` - Size *shared.ContainerSize `json:"size,omitempty"` - Names string `json:"names"` - Labels fields.Set `json:"labels"` - Mounts []string `json:"mounts"` - ContainerRunning bool `json:"ctrRunning"` - Namespaces *shared.Namespace `json:"namespace,omitempty"` - Pod string `json:"pod,omitempty"` - IsInfra bool `json:"infra"` -} - // Type declaration and functions for sorting the PS output type psSorted []shared.PsContainerOutput @@ -443,57 +411,6 @@ func sortPsOutput(sortBy string, psOutput psSorted) (psSorted, error) { return psOutput, nil } -// getLabels converts the labels to a string of the form "key=value, key2=value2" -func formatLabels(labels map[string]string) string { - var arr []string - if len(labels) > 0 { - for key, val := range labels { - temp := key + "=" + val - arr = append(arr, temp) - } - return strings.Join(arr, ",") - } - return "" -} - -// getMounts converts the volumes mounted to a string of the form "mount1, mount2" -// it truncates it if noTrunc is false -func getMounts(mounts []string, noTrunc bool) string { - return strings.Join(getMountsArray(mounts, noTrunc), ",") -} - -func getMountsArray(mounts []string, noTrunc bool) []string { - var arr []string - if len(mounts) == 0 { - return mounts - } - for _, mount := range mounts { - splitArr := strings.Split(mount, ":") - if len(splitArr[0]) > mountTruncLength && !noTrunc { - arr = append(arr, splitArr[0][:mountTruncLength]+"...") - continue - } - arr = append(arr, splitArr[0]) - } - return arr -} - -// portsToString converts the ports used to a string of the from "port1, port2" -func portsToString(ports []ocicni.PortMapping) string { - var portDisplay []string - if len(ports) == 0 { - return "" - } - for _, v := range ports { - hostIP := v.HostIP - if hostIP == "" { - hostIP = "0.0.0.0" - } - portDisplay = append(portDisplay, fmt.Sprintf("%s:%d->%d/%s", hostIP, v.HostPort, v.ContainerPort, v.Protocol)) - } - return strings.Join(portDisplay, ", ") -} - func printFormat(format string, containers []shared.PsContainerOutput) error { // return immediately if no containers are present if len(containers) == 0 { diff --git a/cmd/podman/run_test.go b/cmd/podman/run_test.go index 0bf9cb4d9..dea8eb7a2 100644 --- a/cmd/podman/run_test.go +++ b/cmd/podman/run_test.go @@ -18,7 +18,6 @@ import ( var ( sysInfo = sysinfo.New(true) - cmd = []string{"podman", "test", "alpine"} CLI *cliconfig.PodmanCommand ) diff --git a/cmd/podman/search.go b/cmd/podman/search.go index e614887fc..f72c82b43 100644 --- a/cmd/podman/search.go +++ b/cmd/podman/search.go @@ -12,11 +12,6 @@ import ( "github.com/spf13/cobra" ) -const ( - descriptionTruncLength = 44 - maxQueries = 25 -) - var ( searchCommand cliconfig.SearchValues searchDescription = `Search registries for a given image. Can search all the default registries or a specific registry. diff --git a/cmd/podman/shared/create.go b/cmd/podman/shared/create.go index cd82e4f1c..57e509c2a 100644 --- a/cmd/podman/shared/create.go +++ b/cmd/podman/shared/create.go @@ -34,11 +34,6 @@ import ( "github.com/sirupsen/logrus" ) -// getContext returns a non-nil, empty context -func getContext() context.Context { - return context.TODO() -} - func CreateContainer(ctx context.Context, c *cliconfig.PodmanCommand, runtime *libpod.Runtime) (*libpod.Container, *cc.CreateConfig, error) { var ( healthCheck *manifest.Schema2HealthConfig diff --git a/cmd/podman/trust_set_show.go b/cmd/podman/trust_set_show.go index 626d27aae..cd6c4897e 100644 --- a/cmd/podman/trust_set_show.go +++ b/cmd/podman/trust_set_show.go @@ -7,7 +7,6 @@ import ( "strings" "github.com/containers/buildah/pkg/formats" - "github.com/containers/image/types" "github.com/containers/libpod/cmd/podman/cliconfig" "github.com/containers/libpod/cmd/podman/libpodruntime" "github.com/containers/libpod/libpod/image" @@ -237,10 +236,6 @@ func isValidTrustType(t string) bool { return false } -func getDefaultPolicyPath() string { - return trust.DefaultPolicyPath(&types.SystemContext{}) -} - func getPolicyJSON(policyContentStruct trust.PolicyContent, systemRegistriesDirPath string) (map[string]map[string]interface{}, error) { registryConfigs, err := trust.LoadAndMergeConfig(systemRegistriesDirPath) if err != nil { diff --git a/cmd/podman/utils.go b/cmd/podman/utils.go index 45d081512..2327a943a 100644 --- a/cmd/podman/utils.go +++ b/cmd/podman/utils.go @@ -7,7 +7,6 @@ import ( "os" gosignal "os/signal" - "github.com/containers/libpod/cmd/podman/cliconfig" "github.com/containers/libpod/libpod" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/pkg/term" @@ -159,47 +158,6 @@ func (f *RawTtyFormatter) Format(entry *logrus.Entry) ([]byte, error) { return bytes, err } -// For pod commands that have a latest and all flag, getPodsFromContext gets -// pods the user specifies. If there's an error before getting pods, the pods slice -// will be empty and error will be not nil. If an error occured after, the pod slice -// will hold all of the successful pods, and error will hold the last error. -// The remaining errors will be logged. On success, pods will hold all pods and -// error will be nil. -func getPodsFromContext(c *cliconfig.PodmanCommand, r *libpod.Runtime) ([]*libpod.Pod, error) { - args := c.InputArgs - var pods []*libpod.Pod - var lastError error - var err error - - if c.Bool("all") { - pods, err = r.GetAllPods() - if err != nil { - return nil, errors.Wrapf(err, "unable to get running pods") - } - } - - if c.Bool("latest") { - pod, err := r.GetLatestPod() - if err != nil { - return nil, errors.Wrapf(err, "unable to get latest pod") - } - pods = append(pods, pod) - } - - for _, i := range args { - pod, err := r.LookupPod(i) - if err != nil { - if lastError != nil { - logrus.Errorf("%q", lastError) - } - lastError = errors.Wrapf(err, "unable to find pod %s", i) - continue - } - pods = append(pods, pod) - } - return pods, lastError -} - //printParallelOutput takes the map of parallel worker results and outputs them // to stdout func printParallelOutput(m map[string]error, errCount int) error { diff --git a/test/e2e/common_test.go b/test/e2e/common_test.go index b20b3b37e..0b3db32f4 100644 --- a/test/e2e/common_test.go +++ b/test/e2e/common_test.go @@ -22,15 +22,14 @@ import ( ) var ( - PODMAN_BINARY string - CONMON_BINARY string - CNI_CONFIG_DIR string - RUNC_BINARY string - INTEGRATION_ROOT string - CGROUP_MANAGER = "systemd" - ARTIFACT_DIR = "/tmp/.artifacts" - RESTORE_IMAGES = []string{ALPINE, BB} - defaultWaitTimeout = 90 + PODMAN_BINARY string + CONMON_BINARY string + CNI_CONFIG_DIR string + RUNC_BINARY string + INTEGRATION_ROOT string + CGROUP_MANAGER = "systemd" + ARTIFACT_DIR = "/tmp/.artifacts" + RESTORE_IMAGES = []string{ALPINE, BB} ) // PodmanTestIntegration struct for command line options |