diff --git a/Makefile b/Makefile index 8adf108e8827a..5326a423b552d 100644 --- a/Makefile +++ b/Makefile @@ -143,6 +143,8 @@ lint-fix: getdeps @$(INSTALL_PATH)/gofumpt -l -w internal/ @$(INSTALL_PATH)/gofumpt -l -w cmd/ @$(INSTALL_PATH)/gofumpt -l -w pkg/ + @$(INSTALL_PATH)/gofumpt -l -w client/ + @$(INSTALL_PATH)/gofumpt -l -w tests/go_client/ @$(INSTALL_PATH)/gofumpt -l -w tests/integration/ @echo "Running gci fix" @$(INSTALL_PATH)/gci write cmd/ --skip-generated -s standard -s default -s "prefix(github.com/milvus-io)" --custom-order @@ -155,9 +157,14 @@ lint-fix: getdeps #TODO: Check code specifications by golangci-lint static-check: getdeps @echo "Running $@ check" + @echo "Start check core packages" @source $(PWD)/scripts/setenv.sh && GO111MODULE=on $(INSTALL_PATH)/golangci-lint run --build-tags dynamic,test --timeout=30m --config $(PWD)/.golangci.yml + @echo "Start check pkg package" @source $(PWD)/scripts/setenv.sh && cd pkg && GO111MODULE=on $(INSTALL_PATH)/golangci-lint run --build-tags dynamic,test --timeout=30m --config $(PWD)/.golangci.yml + @echo "Start check client package" @source $(PWD)/scripts/setenv.sh && cd client && GO111MODULE=on $(INSTALL_PATH)/golangci-lint run --timeout=30m --config $(PWD)/client/.golangci.yml + @echo "Start check go_client e2e package" + @source $(PWD)/scripts/setenv.sh && cd tests/go_client && GO111MODULE=on $(INSTALL_PATH)/golangci-lint run --timeout=30m --config $(PWD)/client/.golangci.yml verifiers: build-cpp getdeps cppcheck fmt static-check diff --git a/client/.golangci.yml b/client/.golangci.yml new file mode 100644 index 0000000000000..fe327e86acda0 --- /dev/null +++ b/client/.golangci.yml @@ -0,0 +1,172 @@ +run: + go: "1.21" + skip-dirs: + - build + - configs + - deployments + - docs + - scripts + - internal/core + - cmake_build + skip-files: + - partial_search_test.go + +linters: + disable-all: true + enable: + - gosimple + - govet + - ineffassign + - staticcheck + - decorder + - depguard + - gofmt + - goimports + - gosec + - revive + - unconvert + - misspell + - typecheck + - durationcheck + - forbidigo + - gci + - whitespace + - gofumpt + - gocritic + +linters-settings: + gci: + sections: + - standard + - default + - prefix(github.com/milvus-io) + custom-order: true + gofumpt: + lang-version: "1.18" + module-path: github.com/milvus-io + goimports: + local-prefixes: github.com/milvus-io + revive: + rules: + - name: unused-parameter + disabled: true + - name: var-naming + severity: warning + disabled: false + arguments: + - ["ID"] # Allow list + - name: context-as-argument + severity: warning + disabled: false + arguments: + - allowTypesBefore: "*testing.T" + - name: datarace + severity: warning + disabled: false + - name: duplicated-imports + severity: warning + disabled: false + - name: waitgroup-by-value + severity: warning + disabled: false + - name: indent-error-flow + severity: warning + disabled: false + arguments: + - "preserveScope" + - name: range-val-in-closure + severity: warning + disabled: false + - name: range-val-address + severity: warning + disabled: false + - name: string-of-int + severity: warning + disabled: false + misspell: + locale: US + gocritic: + enabled-checks: + - ruleguard + settings: + ruleguard: + failOnError: true + rules: "ruleguard/rules.go" + depguard: + rules: + main: + deny: + - pkg: "errors" + desc: not allowed, use github.com/cockroachdb/errors + - pkg: "github.com/pkg/errors" + desc: not allowed, use github.com/cockroachdb/errors + - pkg: "github.com/pingcap/errors" + desc: not allowed, use github.com/cockroachdb/errors + - pkg: "golang.org/x/xerrors" + desc: not allowed, use github.com/cockroachdb/errors + - pkg: "github.com/go-errors/errors" + desc: not allowed, use github.com/cockroachdb/errors + - pkg: "io/ioutil" + desc: ioutil is deprecated after 1.16, 1.17, use os and io package instead + - pkg: "github.com/tikv/client-go/rawkv" + desc: not allowed, use github.com/tikv/client-go/v2/txnkv + - pkg: "github.com/tikv/client-go/v2/rawkv" + desc: not allowed, use github.com/tikv/client-go/v2/txnkv + forbidigo: + forbid: + - '^time\.Tick$' + - 'return merr\.Err[a-zA-Z]+' + - 'merr\.Wrap\w+\(\)\.Error\(\)' + - '\.(ErrorCode|Reason) = ' + - 'Reason:\s+\w+\.Error\(\)' + - 'errors.New\((.+)\.GetReason\(\)\)' + - 'commonpb\.Status\{[\s\n]*ErrorCode:[\s\n]*.+[\s\S\n]*?\}' + - 'os\.Open\(.+\)' + - 'os\.ReadFile\(.+\)' + - 'os\.WriteFile\(.+\)' + - "runtime.NumCPU" + - "runtime.GOMAXPROCS(0)" + #- 'fmt\.Print.*' WIP + +issues: + exclude-use-default: false + exclude-rules: + - path: .+_test\.go + linters: + - forbidigo + exclude: + - should have a package comment + - should have comment + - should be of the form + - should not use dot imports + - which can be annoying to use + # Binds to all network interfaces + - G102 + # Use of unsafe calls should be audited + - G103 + # Errors unhandled + - G104 + # file/folder Permission + - G301 + - G302 + # Potential file inclusion via variable + - G304 + # Deferring unsafe method like *os.File Close + - G307 + # TLS MinVersion too low + - G402 + # Use of weak random number generator math/rand + - G404 + # Unused parameters + - SA1019 + # defer return errors + - SA5001 + + # Maximum issues count per one linter. Set to 0 to disable. Default is 50. + max-issues-per-linter: 0 + # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. + max-same-issues: 0 + +service: + # use the fixed version to not introduce new linters unexpectedly + golangci-lint-version: 1.55.2 \ No newline at end of file diff --git a/client/column/sparse.go b/client/column/sparse.go index b9d20fd616ded..cc02e3ee2ffe2 100644 --- a/client/column/sparse.go +++ b/client/column/sparse.go @@ -22,6 +22,7 @@ import ( "math" "github.com/cockroachdb/errors" + "github.com/milvus-io/milvus-proto/go-api/v2/schemapb" "github.com/milvus-io/milvus/client/v2/entity" ) diff --git a/client/column/sparse_test.go b/client/column/sparse_test.go index 387df9efe7d7c..564f223ff1532 100644 --- a/client/column/sparse_test.go +++ b/client/column/sparse_test.go @@ -21,9 +21,10 @@ import ( "math/rand" "testing" - "github.com/milvus-io/milvus/client/v2/entity" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "github.com/milvus-io/milvus/client/v2/entity" ) func TestColumnSparseEmbedding(t *testing.T) { diff --git a/client/database_test.go b/client/database_test.go index f46a0cafb8b7b..d7555d7d5aa44 100644 --- a/client/database_test.go +++ b/client/database_test.go @@ -5,11 +5,12 @@ import ( "fmt" "testing" + mock "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/suite" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus/pkg/util/merr" - mock "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/suite" ) type DatabaseSuite struct { diff --git a/client/index.go b/client/index.go index 79dd57ed3e9c6..79320484632e7 100644 --- a/client/index.go +++ b/client/index.go @@ -21,12 +21,13 @@ import ( "fmt" "time" + "google.golang.org/grpc" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus/client/v2/entity" "github.com/milvus-io/milvus/client/v2/index" "github.com/milvus-io/milvus/pkg/util/merr" - "google.golang.org/grpc" ) type CreateIndexTask struct { diff --git a/client/index_test.go b/client/index_test.go index ac9f5e40699e5..920457f9a2160 100644 --- a/client/index_test.go +++ b/client/index_test.go @@ -22,14 +22,15 @@ import ( "testing" "time" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/suite" + "go.uber.org/atomic" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus/client/v2/entity" "github.com/milvus-io/milvus/client/v2/index" "github.com/milvus-io/milvus/pkg/util/merr" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/suite" - "go.uber.org/atomic" ) type IndexSuite struct { diff --git a/client/maintenance_test.go b/client/maintenance_test.go index 333146f8ca4c9..0efcd449dfc41 100644 --- a/client/maintenance_test.go +++ b/client/maintenance_test.go @@ -22,13 +22,14 @@ import ( "testing" "time" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/suite" + "go.uber.org/atomic" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-proto/go-api/v2/schemapb" "github.com/milvus-io/milvus/pkg/util/merr" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/suite" - "go.uber.org/atomic" ) type MaintenanceSuite struct { diff --git a/client/partition.go b/client/partition.go index 93036b2300dc8..18483687175b4 100644 --- a/client/partition.go +++ b/client/partition.go @@ -19,9 +19,10 @@ package client import ( "context" + "google.golang.org/grpc" + "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus/pkg/util/merr" - "google.golang.org/grpc" ) // CreatePartition is the API for creating a partition for a collection. diff --git a/client/partition_test.go b/client/partition_test.go index 2c6c4e2ed82c4..7bd7cd74360b0 100644 --- a/client/partition_test.go +++ b/client/partition_test.go @@ -21,11 +21,12 @@ import ( "fmt" "testing" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/suite" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus/pkg/util/merr" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/suite" ) type PartitionSuite struct { diff --git a/client/read.go b/client/read.go index 1d4a1e489f52a..b25b4e41bf71f 100644 --- a/client/read.go +++ b/client/read.go @@ -19,9 +19,9 @@ package client import ( "context" + "github.com/cockroachdb/errors" "google.golang.org/grpc" - "github.com/cockroachdb/errors" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-proto/go-api/v2/schemapb" "github.com/milvus-io/milvus/client/v2/column" diff --git a/client/read_options.go b/client/read_options.go index 90da8c21206a5..4b880153cbdbe 100644 --- a/client/read_options.go +++ b/client/read_options.go @@ -21,6 +21,7 @@ import ( "strconv" "github.com/golang/protobuf/proto" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus/client/v2/entity" diff --git a/client/read_test.go b/client/read_test.go index 6606226d1bb76..0e815a0563382 100644 --- a/client/read_test.go +++ b/client/read_test.go @@ -6,13 +6,14 @@ import ( "math/rand" "testing" + "github.com/samber/lo" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/suite" + "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-proto/go-api/v2/schemapb" "github.com/milvus-io/milvus/client/v2/entity" "github.com/milvus-io/milvus/pkg/util/merr" - "github.com/samber/lo" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/suite" ) type ReadSuite struct { diff --git a/client/write_test.go b/client/write_test.go index 4fa27ff7c43cc..9379938902f19 100644 --- a/client/write_test.go +++ b/client/write_test.go @@ -22,12 +22,13 @@ import ( "math/rand" "testing" - "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" - "github.com/milvus-io/milvus/client/v2/entity" - "github.com/milvus-io/milvus/pkg/util/merr" "github.com/samber/lo" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/suite" + + "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" + "github.com/milvus-io/milvus/client/v2/entity" + "github.com/milvus-io/milvus/pkg/util/merr" ) type WriteSuite struct { diff --git a/internal/datacoord/compaction_task_clustering_test.go b/internal/datacoord/compaction_task_clustering_test.go index 4df48aa865d52..d12a0648b6f6c 100644 --- a/internal/datacoord/compaction_task_clustering_test.go +++ b/internal/datacoord/compaction_task_clustering_test.go @@ -19,6 +19,7 @@ package datacoord import ( "context" "fmt" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/schemapb" "github.com/milvus-io/milvus/internal/metastore/kv/datacoord" diff --git a/tests/go_client/.golangci.yml b/tests/go_client/.golangci.yml new file mode 100644 index 0000000000000..dbc0867c58f45 --- /dev/null +++ b/tests/go_client/.golangci.yml @@ -0,0 +1,11 @@ +include: + - "../../.golangci.yml" + +linters-settings: + gocritic: + enabled-checks: + - ruleguard + settings: + ruleguard: + failOnError: true + rules: "ruleguard/rules.go" \ No newline at end of file