diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000000..1ba6cb9162 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,20 @@ +linters: + enable: + - structcheck + - varcheck + - staticcheck + - unconvert + - gofmt + - goimports + - golint + - ineffassign + - vet + - unused + - misspell + disable: + - errcheck + +run: + deadline: 2m + skip-dirs: + - vendor diff --git a/.gometalinter.json b/.gometalinter.json deleted file mode 100644 index e91dffa587..0000000000 --- a/.gometalinter.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "Vendor": true, - "Deadline": "2m", - "Sort": ["linter", "severity", "path", "line"], - "EnableGC": true, - "Enable": [ - "structcheck", - "unconvert", - - "gofmt", - "goimports", - "golint", - "vet" - ] -} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 44ced60451..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,51 +0,0 @@ -dist: trusty -sudo: required -# setup travis so that we can run containers for integration tests -services: - - docker - -language: go - -go: - - "1.11.x" - -go_import_path: github.com/docker/distribution - -addons: - apt: - packages: - - python-minimal - - -env: - - TRAVIS_GOOS=linux DOCKER_BUILDTAGS="include_oss include_gcs" TRAVIS_CGO_ENABLED=1 - -before_install: - - uname -r - - sudo apt-get -q update - -install: - - go get -u github.com/vbatts/git-validation - # TODO: Add enforcement of license - # - go get -u github.com/kunalkushwaha/ltag - - cd $TRAVIS_BUILD_DIR - -script: - - export GOOS=$TRAVIS_GOOS - - export CGO_ENABLED=$TRAVIS_CGO_ENABLED - - DCO_VERBOSITY=-q script/validate/dco - - GOOS=linux script/setup/install-dev-tools - - script/validate/vendor - - go build -i . - - make check - - make build - - make binaries - # Currently takes too long - #- if [ "$GOOS" = "linux" ]; then make test-race ; fi - - if [ "$GOOS" = "linux" ]; then make coverage ; fi - -after_success: - - bash <(curl -s https://codecov.io/bash) -F linux - -before_deploy: - # Run tests with storage driver configurations diff --git a/Makefile b/Makefile index 4635c6eca8..331da27328 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,7 @@ version/version.go: check: ## run all linters (TODO: enable "unused", "varcheck", "ineffassign", "unconvert", "staticheck", "goimports", "structcheck") @echo "$(WHALE) $@" - gometalinter --config .gometalinter.json ./... + golangci-lint run test: ## run tests, except integration test with test.short @echo "$(WHALE) $@" diff --git a/blobs.go b/blobs.go index c0e9261be9..2a659eaa36 100644 --- a/blobs.go +++ b/blobs.go @@ -10,7 +10,7 @@ import ( "github.com/docker/distribution/reference" "github.com/opencontainers/go-digest" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) var ( diff --git a/cmd/registry-api-descriptor-template/main.go b/cmd/registry-api-descriptor-template/main.go index e9cbc42a42..e69e6b2cfc 100644 --- a/cmd/registry-api-descriptor-template/main.go +++ b/cmd/registry-api-descriptor-template/main.go @@ -21,7 +21,7 @@ import ( "text/template" "github.com/docker/distribution/registry/api/errcode" - "github.com/docker/distribution/registry/api/v2" + v2 "github.com/docker/distribution/registry/api/v2" ) var spaceRegex = regexp.MustCompile(`\n\s*`) diff --git a/manifest/manifestlist/manifestlist.go b/manifest/manifestlist/manifestlist.go index f4e915eed7..0dd3c47c05 100644 --- a/manifest/manifestlist/manifestlist.go +++ b/manifest/manifestlist/manifestlist.go @@ -8,7 +8,7 @@ import ( "github.com/docker/distribution" "github.com/docker/distribution/manifest" "github.com/opencontainers/go-digest" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) const ( diff --git a/manifest/manifestlist/manifestlist_test.go b/manifest/manifestlist/manifestlist_test.go index e72292f07f..6d0d952c23 100644 --- a/manifest/manifestlist/manifestlist_test.go +++ b/manifest/manifestlist/manifestlist_test.go @@ -7,7 +7,7 @@ import ( "testing" "github.com/docker/distribution" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) var expectedManifestListSerialization = []byte(`{ diff --git a/manifest/ocischema/builder.go b/manifest/ocischema/builder.go index 023a8a0bda..14e8eebd53 100644 --- a/manifest/ocischema/builder.go +++ b/manifest/ocischema/builder.go @@ -7,7 +7,7 @@ import ( "github.com/docker/distribution" "github.com/docker/distribution/manifest" "github.com/opencontainers/go-digest" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) // Builder is a type for constructing manifests. diff --git a/manifest/ocischema/builder_test.go b/manifest/ocischema/builder_test.go index 8e75127926..7332f3a4a3 100644 --- a/manifest/ocischema/builder_test.go +++ b/manifest/ocischema/builder_test.go @@ -7,7 +7,7 @@ import ( "github.com/docker/distribution" "github.com/opencontainers/go-digest" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) type mockBlobService struct { diff --git a/manifest/ocischema/manifest.go b/manifest/ocischema/manifest.go index 09ce78b5dc..35135c9012 100644 --- a/manifest/ocischema/manifest.go +++ b/manifest/ocischema/manifest.go @@ -8,7 +8,7 @@ import ( "github.com/docker/distribution" "github.com/docker/distribution/manifest" "github.com/opencontainers/go-digest" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) var ( diff --git a/manifest/ocischema/manifest_test.go b/manifest/ocischema/manifest_test.go index c39d1c9fc3..b211fd0940 100644 --- a/manifest/ocischema/manifest_test.go +++ b/manifest/ocischema/manifest_test.go @@ -8,7 +8,7 @@ import ( "github.com/docker/distribution" "github.com/docker/distribution/manifest" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) var expectedManifestSerialization = []byte(`{ diff --git a/notifications/bridge_test.go b/notifications/bridge_test.go index b97bb4c5f1..7fab427117 100644 --- a/notifications/bridge_test.go +++ b/notifications/bridge_test.go @@ -6,7 +6,7 @@ import ( "github.com/docker/distribution" "github.com/docker/distribution/manifest/schema1" "github.com/docker/distribution/reference" - "github.com/docker/distribution/registry/api/v2" + v2 "github.com/docker/distribution/registry/api/v2" "github.com/docker/distribution/uuid" "github.com/docker/libtrust" "github.com/opencontainers/go-digest" diff --git a/reference/reference_test.go b/reference/reference_test.go index 16b871f987..e077aa165c 100644 --- a/reference/reference_test.go +++ b/reference/reference_test.go @@ -639,7 +639,7 @@ func TestParseNamed(t *testing.T) { failf("error parsing name: %s", err) continue } else if err == nil && testcase.err != nil { - failf("parsing succeded: expected error %v", testcase.err) + failf("parsing succeeded: expected error %v", testcase.err) continue } else if err != testcase.err { failf("unexpected error %v, expected %v", err, testcase.err) diff --git a/registry/client/repository.go b/registry/client/repository.go index 1bfbb7e2ea..3e2ae66d3c 100644 --- a/registry/client/repository.go +++ b/registry/client/repository.go @@ -16,7 +16,7 @@ import ( "github.com/docker/distribution" "github.com/docker/distribution/reference" - "github.com/docker/distribution/registry/api/v2" + v2 "github.com/docker/distribution/registry/api/v2" "github.com/docker/distribution/registry/client/transport" "github.com/docker/distribution/registry/storage/cache" "github.com/docker/distribution/registry/storage/cache/memory" diff --git a/registry/handlers/api_test.go b/registry/handlers/api_test.go index 2544efba09..6389253b3a 100644 --- a/registry/handlers/api_test.go +++ b/registry/handlers/api_test.go @@ -28,7 +28,7 @@ import ( "github.com/docker/distribution/manifest/schema2" "github.com/docker/distribution/reference" "github.com/docker/distribution/registry/api/errcode" - "github.com/docker/distribution/registry/api/v2" + v2 "github.com/docker/distribution/registry/api/v2" storagedriver "github.com/docker/distribution/registry/storage/driver" "github.com/docker/distribution/registry/storage/driver/factory" _ "github.com/docker/distribution/registry/storage/driver/testdriver" @@ -2357,7 +2357,7 @@ func checkBodyHasErrorCodes(t *testing.T, msg string, resp *http.Response, error // Ensure that counts of expected errors were all non-zero for code := range expected { if counts[code] == 0 { - t.Fatalf("expected error code %v not encounterd during %s: %s", code, msg, string(p)) + t.Fatalf("expected error code %v not encountered during %s: %s", code, msg, string(p)) } } diff --git a/registry/handlers/app.go b/registry/handlers/app.go index 978851bb36..a689466bae 100644 --- a/registry/handlers/app.go +++ b/registry/handlers/app.go @@ -24,7 +24,7 @@ import ( "github.com/docker/distribution/notifications" "github.com/docker/distribution/reference" "github.com/docker/distribution/registry/api/errcode" - "github.com/docker/distribution/registry/api/v2" + v2 "github.com/docker/distribution/registry/api/v2" "github.com/docker/distribution/registry/auth" registrymiddleware "github.com/docker/distribution/registry/middleware/registry" repositorymiddleware "github.com/docker/distribution/registry/middleware/repository" diff --git a/registry/handlers/app_test.go b/registry/handlers/app_test.go index 12c0b61c1b..60a57e6c15 100644 --- a/registry/handlers/app_test.go +++ b/registry/handlers/app_test.go @@ -11,7 +11,7 @@ import ( "github.com/docker/distribution/configuration" "github.com/docker/distribution/context" "github.com/docker/distribution/registry/api/errcode" - "github.com/docker/distribution/registry/api/v2" + v2 "github.com/docker/distribution/registry/api/v2" "github.com/docker/distribution/registry/auth" _ "github.com/docker/distribution/registry/auth/silly" "github.com/docker/distribution/registry/storage" diff --git a/registry/handlers/blob.go b/registry/handlers/blob.go index 5c31cc767d..515fdad0a0 100644 --- a/registry/handlers/blob.go +++ b/registry/handlers/blob.go @@ -6,7 +6,7 @@ import ( "github.com/docker/distribution" "github.com/docker/distribution/context" "github.com/docker/distribution/registry/api/errcode" - "github.com/docker/distribution/registry/api/v2" + v2 "github.com/docker/distribution/registry/api/v2" "github.com/gorilla/handlers" "github.com/opencontainers/go-digest" ) diff --git a/registry/handlers/context.go b/registry/handlers/context.go index 7a67b60462..b1b7a13d32 100644 --- a/registry/handlers/context.go +++ b/registry/handlers/context.go @@ -8,7 +8,7 @@ import ( "github.com/docker/distribution" dcontext "github.com/docker/distribution/context" "github.com/docker/distribution/registry/api/errcode" - "github.com/docker/distribution/registry/api/v2" + v2 "github.com/docker/distribution/registry/api/v2" "github.com/docker/distribution/registry/auth" "github.com/opencontainers/go-digest" ) diff --git a/registry/handlers/manifests.go b/registry/handlers/manifests.go index 8da3f7af9a..8b33b992eb 100644 --- a/registry/handlers/manifests.go +++ b/registry/handlers/manifests.go @@ -14,11 +14,11 @@ import ( "github.com/docker/distribution/manifest/schema2" "github.com/docker/distribution/reference" "github.com/docker/distribution/registry/api/errcode" - "github.com/docker/distribution/registry/api/v2" + v2 "github.com/docker/distribution/registry/api/v2" "github.com/docker/distribution/registry/auth" "github.com/gorilla/handlers" "github.com/opencontainers/go-digest" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) // These constants determine which architecture and OS to choose from a diff --git a/registry/handlers/tags.go b/registry/handlers/tags.go index 91f1031e32..b7463a5a3a 100644 --- a/registry/handlers/tags.go +++ b/registry/handlers/tags.go @@ -6,7 +6,7 @@ import ( "github.com/docker/distribution" "github.com/docker/distribution/registry/api/errcode" - "github.com/docker/distribution/registry/api/v2" + v2 "github.com/docker/distribution/registry/api/v2" "github.com/gorilla/handlers" ) diff --git a/registry/registry.go b/registry/registry.go index 18698f5bf7..a3006079b7 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -14,7 +14,8 @@ import ( "rsc.io/letsencrypt" - "github.com/Shopify/logrus-bugsnag" + logrus_bugsnag "github.com/Shopify/logrus-bugsnag" + logstash "github.com/bshuster-repo/logrus-logstash-hook" "github.com/bugsnag/bugsnag-go" "github.com/docker/distribution/configuration" diff --git a/registry/storage/blob_test.go b/registry/storage/blob_test.go index cce232a739..f5c1416d00 100644 --- a/registry/storage/blob_test.go +++ b/registry/storage/blob_test.go @@ -418,7 +418,7 @@ func TestBlobMount(t *testing.T) { bs := repository.Blobs(ctx) // Test destination for existence. - statDesc, err = bs.Stat(ctx, desc.Digest) + _, err = bs.Stat(ctx, desc.Digest) if err == nil { t.Fatalf("unexpected non-error stating unmounted blob: %v", desc) } @@ -478,12 +478,12 @@ func TestBlobMount(t *testing.T) { t.Fatalf("Unexpected error deleting blob") } - d, err := bs.Stat(ctx, desc.Digest) + _, err = bs.Stat(ctx, desc.Digest) if err != nil { t.Fatalf("unexpected error stating blob deleted from source repository: %v", err) } - d, err = sbs.Stat(ctx, desc.Digest) + d, err := sbs.Stat(ctx, desc.Digest) if err == nil { t.Fatalf("unexpected non-error stating deleted blob: %v", d) } diff --git a/registry/storage/cache/cachecheck/suite.go b/registry/storage/cache/cachecheck/suite.go index 0b8b1e9e58..d241bd04c8 100644 --- a/registry/storage/cache/cachecheck/suite.go +++ b/registry/storage/cache/cachecheck/suite.go @@ -173,8 +173,7 @@ func checkBlobDescriptorCacheClear(ctx context.Context, t *testing.T, provider c t.Error(err) } - desc, err = cache.Stat(ctx, localDigest) - if err == nil { + if _, err = cache.Stat(ctx, localDigest); err == nil { t.Fatalf("expected error statting deleted blob: %v", err) } } diff --git a/registry/storage/driver/filesystem/driver_test.go b/registry/storage/driver/filesystem/driver_test.go index 3be859239b..2bf5b2d180 100644 --- a/registry/storage/driver/filesystem/driver_test.go +++ b/registry/storage/driver/filesystem/driver_test.go @@ -36,7 +36,7 @@ func init() { func TestFromParametersImpl(t *testing.T) { tests := []struct { - params map[string]interface{} // techincally the yaml can contain anything + params map[string]interface{} // technically the yaml can contain anything expected DriverParameters pass bool }{ diff --git a/registry/storage/driver/middleware/cloudfront/middleware.go b/registry/storage/driver/middleware/cloudfront/middleware.go index bd9031a99c..ab3b2ca4aa 100644 --- a/registry/storage/driver/middleware/cloudfront/middleware.go +++ b/registry/storage/driver/middleware/cloudfront/middleware.go @@ -16,7 +16,7 @@ import ( "github.com/aws/aws-sdk-go/service/cloudfront/sign" dcontext "github.com/docker/distribution/context" storagedriver "github.com/docker/distribution/registry/storage/driver" - "github.com/docker/distribution/registry/storage/driver/middleware" + storagemiddleware "github.com/docker/distribution/registry/storage/driver/middleware" ) // cloudFrontStorageMiddleware provides a simple implementation of layerHandler that diff --git a/registry/storage/driver/s3-aws/s3.go b/registry/storage/driver/s3-aws/s3.go index 4c918da414..f61cfaee0e 100644 --- a/registry/storage/driver/s3-aws/s3.go +++ b/registry/storage/driver/s3-aws/s3.go @@ -366,7 +366,7 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) { return New(params) } -// getParameterAsInt64 converts paramaters[name] to an int64 value (using +// getParameterAsInt64 converts parameters[name] to an int64 value (using // defaultt if nil), verifies it is no smaller than min, and returns it. func getParameterAsInt64(parameters map[string]interface{}, name string, defaultt int64, min int64, max int64) (int64, error) { rv := defaultt diff --git a/registry/storage/manifeststore.go b/registry/storage/manifeststore.go index 73bff57333..7daa9a729c 100644 --- a/registry/storage/manifeststore.go +++ b/registry/storage/manifeststore.go @@ -13,7 +13,7 @@ import ( "github.com/docker/distribution/manifest/schema1" "github.com/docker/distribution/manifest/schema2" "github.com/opencontainers/go-digest" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) // A ManifestHandler gets and puts manifests of a particular type. diff --git a/registry/storage/manifeststore_test.go b/registry/storage/manifeststore_test.go index 2b3177b816..864ef38c95 100644 --- a/registry/storage/manifeststore_test.go +++ b/registry/storage/manifeststore_test.go @@ -19,7 +19,7 @@ import ( "github.com/docker/distribution/testutil" "github.com/docker/libtrust" "github.com/opencontainers/go-digest" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) type manifestStoreTestEnv struct { diff --git a/registry/storage/ocimanifesthandler.go b/registry/storage/ocimanifesthandler.go index 91a037a04d..e06ecb113b 100644 --- a/registry/storage/ocimanifesthandler.go +++ b/registry/storage/ocimanifesthandler.go @@ -9,7 +9,7 @@ import ( dcontext "github.com/docker/distribution/context" "github.com/docker/distribution/manifest/ocischema" "github.com/opencontainers/go-digest" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) //ocischemaManifestHandler is a ManifestHandler that covers ocischema manifests. diff --git a/registry/storage/ocimanifesthandler_test.go b/registry/storage/ocimanifesthandler_test.go index 3983a9f739..ed019efd09 100644 --- a/registry/storage/ocimanifesthandler_test.go +++ b/registry/storage/ocimanifesthandler_test.go @@ -9,7 +9,7 @@ import ( "github.com/docker/distribution/manifest" "github.com/docker/distribution/manifest/ocischema" "github.com/docker/distribution/registry/storage/driver/inmemory" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" ) func TestVerifyOCIManifestNonDistributableLayer(t *testing.T) { diff --git a/registry/storage/schema2manifesthandler.go b/registry/storage/schema2manifesthandler.go index acb3255b65..4b3e7d165d 100644 --- a/registry/storage/schema2manifesthandler.go +++ b/registry/storage/schema2manifesthandler.go @@ -93,7 +93,7 @@ func (ms *schema2ManifestHandler) verifyManifest(ctx context.Context, mnfst sche switch descriptor.MediaType { case schema2.MediaTypeForeignLayer: // Clients download this layer from an external URL, so do not check for - // its presense. + // its presence. if len(descriptor.URLs) == 0 { err = errMissingURL } diff --git a/script/setup/install-dev-tools b/script/setup/install-dev-tools index d4e134a1e1..f01c370e92 100755 --- a/script/setup/install-dev-tools +++ b/script/setup/install-dev-tools @@ -1,11 +1,12 @@ #!/usr/bin/env bash +GOLANGCI_LINT_VERSION="v1.27.0" + # # Install developer tools to $GOBIN (or $GOPATH/bin if unset) # set -eu -o pipefail -go get -u github.com/alecthomas/gometalinter -gometalinter --install >/dev/null +cd /tmp go get -u github.com/LK4D4/vndr -go get -u github.com/cpuguy83/go-md2man +go get "github.com/golangci/golangci-lint/cmd/golangci-lint@${GOLANGCI_LINT_VERSION}" diff --git a/script/validate/dco b/script/validate/dco index be96b3a85a..d9a0cb29b7 100755 --- a/script/validate/dco +++ b/script/validate/dco @@ -9,4 +9,5 @@ if ! command -v git-validation; then fi verbosity="${DCO_VERBOSITY--v}" -GIT_CHECK_EXCLUDE="./vendor:./script/validate/template" git-validation "$verbosity" -range "$COMMIT_RANGE" -run DCO,short-subject,dangling-whitespace \ No newline at end of file +echo $COMMIT_RANGE +GIT_CHECK_EXCLUDE="./vendor:./script/validate/template" git-validation "$verbosity" -range "5b98226afefa11a06ef0c652af4995177c0efda0..HEAD" -run DCO,short-subject,dangling-whitespace \ No newline at end of file