diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 000000000..1ba6cb916 --- /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 e91dffa58..000000000 --- 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 44ced6045..000000000 --- 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 4635c6eca..331da2732 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 c0e9261be..2a659eaa3 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 e9cbc42a4..e69e6b2cf 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 f4e915eed..0dd3c47c0 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 e72292f07..6d0d952c2 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 023a8a0bd..14e8eebd5 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 8e7512792..7332f3a4a 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 09ce78b5d..35135c901 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 c39d1c9fc..b211fd094 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 b97bb4c5f..7fab42711 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 16b871f98..e077aa165 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 1bfbb7e2e..3e2ae66d3 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 2544efba0..6389253b3 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 978851bb3..a689466ba 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 12c0b61c1..60a57e6c1 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 5c31cc767..515fdad0a 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 7a67b6046..b1b7a13d3 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 8da3f7af9..8b33b992e 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 91f1031e3..b7463a5a3 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 18698f5bf..a3006079b 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 cce232a73..f5c1416d0 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 0b8b1e9e5..d241bd04c 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 3be859239..2bf5b2d18 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 bd9031a99..ab3b2ca4a 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 4c918da41..f61cfaee0 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 73bff5733..7daa9a729 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 2b3177b81..864ef38c9 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 91a037a04..e06ecb113 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 3983a9f73..ed019efd0 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 acb3255b6..4b3e7d165 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 d4e134a1e..f01c370e9 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 be96b3a85..d9a0cb29b 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