diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7d4bfc4..5fbf9fc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,28 +9,31 @@ on: jobs: test: runs-on: ubuntu-latest - strategy: - matrix: - go-version: [1.18.x, 1.19.x, 1.20.x, 1.21.x, 1.22.x] steps: - name: Install Go uses: actions/setup-go@v2 with: - go-version: ${{ matrix.go-version }} + go-version: 1.25.x - name: Checkout code uses: actions/checkout@v2 - name: Go mod cache uses: actions/cache@v4 with: path: ~/go/pkg/mod - key: ${{ runner.os }}-go${{ matrix.go-version }} + key: ${{ runner.os }}-go1.25.x - name: Tools bin cache uses: actions/cache@v4 with: path: .bin - key: ${{ runner.os }}-go${{ matrix.go-version }}-${{ hashFiles('Makefile') }} + key: ${{ runner.os }}-go1.25.x-${{ hashFiles('Makefile') }} + - name: Check + run: make check - name: Test - run: make ci + run: make test + - name: Coverage + run: make test-cov + - name: Generate coverage report in XML format + run: make test-xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v2 with: diff --git a/.gitignore b/.gitignore index c132651..83e0428 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,5 @@ tools/vendor go.work go.work.sum -.envrc \ No newline at end of file +.envrc +.claude/ \ No newline at end of file diff --git a/.golangci.yml b/.golangci.yml index db2cd9a..f6bd99c 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,76 +1,123 @@ +version: "2" + linters: - disable-all: true + default: none + # This list of linters is not a recommendation (same thing for all this configuration file). + # We intentionally use a limited set of linters. enable: - - errcheck - - staticcheck - - unused - - gosimple - - ineffassign - - stylecheck - - typecheck - - unconvert - bodyclose + - copyloopvar + - dogsled - dupl + - errcheck + - errorlint + - funlen + - gocheckcompilerdirectives + - gochecknoinits - goconst + - gocritic - gocyclo - - gofmt + - godox + - mnd + - goprintffuncname + - gosec + - govet + - intrange + - ineffassign - lll - misspell - nakedret - - exportloopref - - funlen - - nestif - - nlreturn - - prealloc - - rowserrcheck + - noctx + - nolintlint + - revive + - staticcheck + - testifylint - unconvert - unparam + - unused - whitespace - - wsl + + settings: + govet: + enable-all: true + settings: + shadow: + strict: true + errcheck: + check-type-assertions: true + misspell: + locale: UK + ignore-words: + - initialized + funlen: + lines: 80 + statements: 40 + gci: + sections: + - standard + - default + - blank + - dot + - alias + custom-order: true + revive: + rules: + - name: package-comments + disabled: true + exclusions: + generated: lax + rules: + - path: _test\.go + linters: + - dupl + - gosec + - wsl + - lll + - funlen + - nlreturn + - unused + - path: _test\.go + text: "^Error return value is not checked$" + linters: + - errcheck + - text: "^SA1019:.* is deprecated:" + linters: + - staticcheck + - text: "declaration of \"(err|ctx)\" shadows declaration at" + linters: + - govet + - text: "return value of `tx.Rollback` is not checked" + linters: + - errcheck + +formatters: + enable: + - gofmt + - gci + + settings: + gofmt: + simplify: true + rewrite-rules: + - pattern: 'interface{}' + replacement: 'any' + - pattern: 'a[b:len(a)]' + replacement: 'a[b:]' + gci: + sections: + - standard + - default + - blank + - dot + - prefix(github.com/gojekfarm) + custom-order: true + run: skip-dirs: - bin skip-files: - .*mock.*\.go$ - version.go - - .*\_test\.go$ + - .*_test\.go$ - generate.go modules-download-mode: readonly -linters-settings: - govet: - check-shadowing: true - enable-all: true - disable: - - asmdecl - - assign - errcheck: - check-type-assertions: true - misspell: - locale: UK - ignore-words: - - initialized - funlen: - lines: 80 - statements: 40 - -issues: - exclude-use-default: false - exclude: - - declaration of "(err|ctx)" shadows declaration at - exclude-rules: - - text: "^SA1019: .* is deprecated:" - linters: - - staticcheck - - path: _test\.go - linters: - - dupl - - gosec - - wsl - - lll - - funlen - - nlreturn - - unused - - path: _test\.go - text: ^Error return value is not checked$ - linters: - - errcheck diff --git a/Makefile b/Makefile index c4adcb8..77f04bc 100644 --- a/Makefile +++ b/Makefile @@ -1,48 +1,35 @@ ALL_GO_MOD_DIRS := $(shell find . -type f -name 'go.mod' -exec dirname {} \; | sort) -# extract go minor version from go version output -GO_MINOR_VERSION := $(shell go version | cut -d' ' -f3 | cut -d'.' -f2) EXCLUDE_DIRS := ./examples EXCLUDE_GO_MOD_DIRS := $(shell find $(EXCLUDE_DIRS) -type f -name 'go.mod' -exec dirname {} \; | sort) -# set build directory based on go minor version -GO_BUILD_DIRS := $(foreach dir,$(ALL_GO_MOD_DIRS),$(shell GO_MOD_VERSION=$$(grep "go 1.[0-9]*" $(dir)/go.mod | cut -d' ' -f2 | cut -d'.' -f2) && [ -n "$$GO_MOD_VERSION" ] && [ $(GO_MINOR_VERSION) -ge $$GO_MOD_VERSION ] && echo $(dir))) +GO_BUILD_DIRS := $(ALL_GO_MOD_DIRS) PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST)))) BIN_DIR := $(PROJECT_DIR)/.bin -fmt: - @$(call run-go-mod-dir,go fmt ./...,"go fmt") - -gofmt: - @$(call run-go-mod-dir,go fmt ./...,"gofmt -s -w") +fmt: golangci-lint + @$(call run-go-mod-dir,$(GOLANGCI_LINT) fmt,".bin/golangci-lint fmt") vet: @$(call run-go-mod-dir,go vet ./...,"go vet") lint: golangci-lint - @$(call run-go-mod-dir,$(GOLANGCI_LINT) run --timeout=10m -v,".bin/golangci-lint") - -.PHONY: ci -ci: test test-cov test-xml + $(GOLANGCI_LINT) run --timeout=10m -v -imports: gci - @$(call run-go-mod-dir,$(GCI) -w -local github.com/gojekfarm ./ | { grep -v -e 'skip file .*' || true; },".bin/gci") -.PHONY: gomod.tidy -gomod.tidy: +.PHONY: tidy +tidy: @$(call run-go-mod-dir,go mod tidy,"go mod tidy") -.PHONY: go.generate -go.generate: mockery protoc +.PHONY: generate +generate: mockery protoc @$(call run-go-mod-dir,go generate ./...,"go generate") ## test: Run all tests .PHONY: test test-run test-cov test-xml -test: check test-run - -test-run: +test: @$(call run-go-mod-dir,go test -race -covermode=atomic -coverprofile=coverage.out ./...,"go test") test-cov: gocov @@ -59,28 +46,14 @@ test-html: test-cov gocov-html @open coverage.html .PHONY: check -check: fmt vet imports lint +check: fmt vet lint @git diff --quiet || test $$(git diff --name-only | grep -v -e 'go.mod$$' -e 'go.sum$$' | wc -l) -eq 0 || ( echo "The following changes (result of code generators and code checks) have been detected:" && git --no-pager diff && false ) # fail if Git working tree is dirty # ========= Helpers =========== -## Determine the golangci-lint version based on $(GO_MINOR_VERSION) -################### -GOLANGCI_LINT_V18 := v1.50.1 -GOLANGCI_LINT_DEFAULT := v1.53.3 - -get-golangci-lint-version = $(or $(value GOLANGCI_LINT_V$(1)), $(GOLANGCI_LINT_DEFAULT)) -GOLANGCI_LINT_VERSION := $(call get-golangci-lint-version,$(GO_MINOR_VERSION)) - -################### - GOLANGCI_LINT = $(BIN_DIR)/golangci-lint golangci-lint: - $(call go-get-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION)) - -GCI = $(BIN_DIR)/gci -gci: - $(call go-get-tool,$(GCI),github.com/daixiang0/gci@v0.2.9) + $(call go-get-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest) GOCOV = $(BIN_DIR)/gocov gocov: diff --git a/errors/go.mod b/errors/go.mod index 1fd4f14..81c3cf7 100644 --- a/errors/go.mod +++ b/errors/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/errors -go 1.21 +go 1.25 require github.com/stretchr/testify v1.10.0 diff --git a/examples/xkafka/go.mod b/examples/xkafka/go.mod index 10fce94..6fc608e 100644 --- a/examples/xkafka/go.mod +++ b/examples/xkafka/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/examples/xkafka -go 1.21 +go 1.25 replace ( github.com/gojekfarm/xtools => ../../ diff --git a/examples/xload/go.mod b/examples/xload/go.mod index 4c10fe8..6d3a1a0 100644 --- a/examples/xload/go.mod +++ b/examples/xload/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/examples/xload -go 1.20 +go 1.25 replace ( github.com/gojekfarm/xtools/xload => ../../xload diff --git a/examples/xload/go.sum b/examples/xload/go.sum index 111ff7d..a5abb19 100644 --- a/examples/xload/go.sum +++ b/examples/xload/go.sum @@ -2,13 +2,19 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gotidy/ptr v1.4.0 h1:7++suUs+HNHMnyz6/AW3SE+4EnBhupPSQTSI7QNijVc= +github.com/gotidy/ptr v1.4.0/go.mod h1:MjRBG6/IETiiZGWI8LrRtISXEji+8b/jigmj2q0mEyM= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= @@ -16,11 +22,13 @@ github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/examples/xload/main.go b/examples/xload/main.go index 44c096e..f19ce16 100644 --- a/examples/xload/main.go +++ b/examples/xload/main.go @@ -87,7 +87,7 @@ func main() { _ = f.Close() } -func prettyPrint(v interface{}) { +func prettyPrint(v any) { out, _ := json.MarshalIndent(v, "", " ") println(string(out)) } diff --git a/generic/go.mod b/generic/go.mod index f87d43e..1351136 100644 --- a/generic/go.mod +++ b/generic/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/generic -go 1.18 +go 1.25 require github.com/stretchr/testify v1.7.0 diff --git a/generic/slice/filter_test.go b/generic/slice/filter_test.go index 38278aa..a587626 100644 --- a/generic/slice/filter_test.go +++ b/generic/slice/filter_test.go @@ -22,7 +22,7 @@ func TestFilter(t *testing.T) { }{ { name: "EvenIntegers", - elems: []interface{}{1, 2, 3, 4, 5, 6, 7}, + elems: []any{1, 2, 3, 4, 5, 6, 7}, predicate: func(i any) bool { return i.(int)%2 == 0 }, @@ -30,7 +30,7 @@ func TestFilter(t *testing.T) { }, { name: "ValidStructs", - elems: []interface{}{ + elems: []any{ testStruct{ID: 1, Valid: true}, testStruct{ID: 2}, testStruct{ID: 3, Valid: true}, diff --git a/generic/slice/find_test.go b/generic/slice/find_test.go index 7dcd94c..80c4cb8 100644 --- a/generic/slice/find_test.go +++ b/generic/slice/find_test.go @@ -22,7 +22,7 @@ func TestFind(t *testing.T) { }{ { name: "StructWithID2", - elems: []interface{}{ + elems: []any{ testStruct{ID: 1}, testStruct{ID: 2}, testStruct{ID: 3}, @@ -36,7 +36,7 @@ func TestFind(t *testing.T) { }, { name: "PointerToStructWithID3", - elems: []interface{}{ + elems: []any{ &testStruct{ID: 1}, &testStruct{ID: 2}, &testStruct{ID: 3}, @@ -50,7 +50,7 @@ func TestFind(t *testing.T) { }, { name: "NoStructWithMatchingID", - elems: []interface{}{ + elems: []any{ testStruct{ID: 1}, testStruct{ID: 2}, testStruct{ID: 3}, @@ -62,7 +62,7 @@ func TestFind(t *testing.T) { }, { name: "NoPointerStructWithMatchingID", - elems: []interface{}{ + elems: []any{ &testStruct{ID: 1}, &testStruct{ID: 2}, &testStruct{ID: 4}, diff --git a/generic/slice/map_test.go b/generic/slice/map_test.go index b47de24..dadffbd 100644 --- a/generic/slice/map_test.go +++ b/generic/slice/map_test.go @@ -27,7 +27,7 @@ func TestMap(t *testing.T) { }{ { name: "DoubleIntegers", - elems: []interface{}{1, 2, 3, 4, 5, 6}, + elems: []any{1, 2, 3, 4, 5, 6}, mapper: func(i any) any { return i.(int) * 2 }, @@ -35,7 +35,7 @@ func TestMap(t *testing.T) { }, { name: "MapStructs", - elems: []interface{}{testStructA{Value: 2}, testStructA{Value: 4}, testStructA{Value: 6}}, + elems: []any{testStructA{Value: 2}, testStructA{Value: 4}, testStructA{Value: 6}}, mapper: func(i any) any { return testStructB{Value: i.(testStructA).Value * 2} }, @@ -75,7 +75,7 @@ func TestMapConcurrentWithContext(t *testing.T) { { name: "DoubleIntegers", ctx: context.Background(), - elems: []interface{}{1, 2, 3, 4, 5, 6}, + elems: []any{1, 2, 3, 4, 5, 6}, mapper: func(_ context.Context, i any) any { return i.(int) * 2 }, @@ -84,7 +84,7 @@ func TestMapConcurrentWithContext(t *testing.T) { { name: "MapStructs", ctx: context.Background(), - elems: []interface{}{testStructA{Value: 2}, testStructA{Value: 4}, testStructA{Value: 6}}, + elems: []any{testStructA{Value: 2}, testStructA{Value: 4}, testStructA{Value: 6}}, mapper: func(_ context.Context, i any) any { return testStructB{Value: i.(testStructA).Value * 2} }, @@ -93,7 +93,7 @@ func TestMapConcurrentWithContext(t *testing.T) { { name: "SlowMapper", ctx: tCtx, - elems: []interface{}{1, 2, 4, 8, 16, 32}, + elems: []any{1, 2, 4, 8, 16, 32}, mapper: func(_ context.Context, i any) any { ii := i.(int) time.Sleep(time.Duration(ii) * time.Second) @@ -104,7 +104,7 @@ func TestMapConcurrentWithContext(t *testing.T) { { name: "AlreadyCancelledContext", ctx: cCtx, - elems: []interface{}{1, 2, 4, 8, 16, 32}, + elems: []any{1, 2, 4, 8, 16, 32}, mapper: func(_ context.Context, i any) any { return i.(int) * 2 }, @@ -128,7 +128,7 @@ func TestMapConcurrent(t *testing.T) { }{ { name: "DoubleIntegers", - elems: []interface{}{1, 2, 3, 4, 5, 6}, + elems: []any{1, 2, 3, 4, 5, 6}, mapper: func(i any) any { return i.(int) * 2 }, @@ -136,7 +136,7 @@ func TestMapConcurrent(t *testing.T) { }, { name: "MapStructs", - elems: []interface{}{testStructA{Value: 2}, testStructA{Value: 4}, testStructA{Value: 6}}, + elems: []any{testStructA{Value: 2}, testStructA{Value: 4}, testStructA{Value: 6}}, mapper: func(i any) any { return testStructB{Value: i.(testStructA).Value * 2} }, diff --git a/go.mod b/go.mod index 74c5917..482c8d2 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ module github.com/gojekfarm/xtools -go 1.18 +go 1.25 diff --git a/xkafka/go.mod b/xkafka/go.mod index 40e9316..e0acf73 100644 --- a/xkafka/go.mod +++ b/xkafka/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/xkafka -go 1.21 +go 1.25 require ( github.com/confluentinc/confluent-kafka-go/v2 v2.0.2 diff --git a/xkafka/middleware/go.mod b/xkafka/middleware/go.mod index 709707e..52d9c66 100644 --- a/xkafka/middleware/go.mod +++ b/xkafka/middleware/go.mod @@ -1,8 +1,6 @@ module github.com/gojekfarm/xtools/xkafka/middleware -go 1.21 - -toolchain go1.21.0 +go 1.25 replace github.com/gojekfarm/xtools/xkafka => ../ diff --git a/xkafka/middleware/retry/example_test.go b/xkafka/middleware/retry/example_test.go index 4e0b7b9..f4dda5a 100644 --- a/xkafka/middleware/retry/example_test.go +++ b/xkafka/middleware/retry/example_test.go @@ -2,9 +2,8 @@ package retry_test import ( "context" - "time" - "log/slog" + "time" "github.com/gojekfarm/xtools/xkafka" "github.com/gojekfarm/xtools/xkafka/middleware/retry" diff --git a/xkafka/middleware/retry/go.mod b/xkafka/middleware/retry/go.mod index a3d712d..dd78ff0 100644 --- a/xkafka/middleware/retry/go.mod +++ b/xkafka/middleware/retry/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/xkafka/middleware/retry -go 1.21 +go 1.25 replace github.com/gojekfarm/xtools/xkafka => ../../ diff --git a/xkafka/middleware/slog/slog.go b/xkafka/middleware/slog/slog.go index f2722fa..be8188f 100644 --- a/xkafka/middleware/slog/slog.go +++ b/xkafka/middleware/slog/slog.go @@ -3,9 +3,8 @@ package slog import ( "context" - "time" - "log/slog" + "time" "github.com/gojekfarm/xtools/xkafka" ) diff --git a/xkafka/middleware/slog/slog_test.go b/xkafka/middleware/slog/slog_test.go index eaa74bf..b03fd1e 100644 --- a/xkafka/middleware/slog/slog_test.go +++ b/xkafka/middleware/slog/slog_test.go @@ -2,10 +2,10 @@ package slog import ( "context" + "log/slog" "testing" "github.com/stretchr/testify/assert" - "log/slog" "github.com/gojekfarm/xtools/xkafka" ) diff --git a/xkafka/middleware/zerolog/go.mod b/xkafka/middleware/zerolog/go.mod index aea74d3..f684c62 100644 --- a/xkafka/middleware/zerolog/go.mod +++ b/xkafka/middleware/zerolog/go.mod @@ -1,8 +1,6 @@ module github.com/gojekfarm/xtools/xkafka/middleware/zerolog -go 1.21 - -toolchain go1.21.0 +go 1.25 replace github.com/gojekfarm/xtools/xkafka => ../../ diff --git a/xkafka/options.go b/xkafka/options.go index 60802be..1cced02 100644 --- a/xkafka/options.go +++ b/xkafka/options.go @@ -12,7 +12,7 @@ func (b Brokers) setConsumerConfig(o *consumerConfig) { o.brokers = b } func (b Brokers) setProducerConfig(o *producerConfig) { o.brokers = b } // ConfigMap allows setting kafka configuration. -type ConfigMap map[string]interface{} +type ConfigMap map[string]any func (cm ConfigMap) setConsumerConfig(o *consumerConfig) { for k, v := range cm { diff --git a/xload/go.mod b/xload/go.mod index c0bef39..afe9444 100644 --- a/xload/go.mod +++ b/xload/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/xload -go 1.20 +go 1.25 require ( github.com/gotidy/ptr v1.4.0 diff --git a/xload/go.sum b/xload/go.sum index f3b527d..a5abb19 100644 --- a/xload/go.sum +++ b/xload/go.sum @@ -2,14 +2,19 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gotidy/ptr v1.4.0 h1:7++suUs+HNHMnyz6/AW3SE+4EnBhupPSQTSI7QNijVc= github.com/gotidy/ptr v1.4.0/go.mod h1:MjRBG6/IETiiZGWI8LrRtISXEji+8b/jigmj2q0mEyM= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= @@ -24,5 +29,6 @@ go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/xload/load_struct_test.go b/xload/load_struct_test.go index f8c80a5..fc41500 100644 --- a/xload/load_struct_test.go +++ b/xload/load_struct_test.go @@ -198,7 +198,7 @@ func TestLoad_Structs(t *testing.T) { Address1 Address `env:",prefix=ADDRESS_"` Address2 *Address `env:",prefix=ADDRESS_"` }{}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { tErr := &ErrCollision{} assert.ErrorAs(t, err, &tErr) return assert.ElementsMatch(t, tErr.Keys(), []string{ @@ -363,7 +363,7 @@ func TestLoad_JSON(t *testing.T) { input: &struct { Plot Plot `env:"PLOT"` }{}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { errDec := new(ErrDecode) return assert.ErrorAs(t, err, &errDec, i...) && assert.Equal(t, "invalid", errDec.Value()) }, @@ -374,7 +374,7 @@ func TestLoad_JSON(t *testing.T) { input: &struct { Plots Plots `env:"PLOTS"` }{}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { errDec := new(ErrDecode) return assert.ErrorAs(t, err, &errDec, i...) && assert.Equal(t, "invalid", errDec.Value()) }, diff --git a/xload/load_test.go b/xload/load_test.go index 8e7d351..4f310cf 100644 --- a/xload/load_test.go +++ b/xload/load_test.go @@ -23,7 +23,7 @@ type testcase struct { } func errContains(want error) assert.ErrorAssertionFunc { - return func(t assert.TestingT, err error, msgArgs ...interface{}) bool { + return func(t assert.TestingT, err error, msgArgs ...any) bool { return assert.ErrorContains(t, err, want.Error(), msgArgs...) } } @@ -206,7 +206,7 @@ func TestLoad_NativeTypes(t *testing.T) { Int int `env:"INT"` }{}, loader: MapLoader{"INT": "invalid"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { errCast := new(ErrCast) return assert.ErrorAs(t, err, &errCast) && assert.Equal(t, "INT", errCast.key) && assert.EqualError(t, errCast.Unwrap(), `unable to cast "invalid" of type string to int64`) @@ -250,7 +250,7 @@ func TestLoad_NativeTypes(t *testing.T) { Uint uint `env:"UINT"` }{}, loader: MapLoader{"UINT": "invalid"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { errCast := new(ErrCast) return assert.ErrorAs(t, err, &errCast) && assert.Equal(t, "UINT", errCast.key) && assert.EqualError(t, errCast.Unwrap(), `unable to cast "invalid" of type string to uint64`) @@ -282,7 +282,7 @@ func TestLoad_NativeTypes(t *testing.T) { Float float32 `env:"FLOAT"` }{}, loader: MapLoader{"FLOAT": "invalid"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { errCast := new(ErrCast) return assert.ErrorAs(t, err, &errCast) && assert.Equal(t, "FLOAT", errCast.key) && assert.EqualError(t, errCast.Unwrap(), `unable to cast "invalid" of type string to float64`) @@ -394,7 +394,7 @@ func TestLoad_NativeTypes(t *testing.T) { Int64Slice []int64 `env:"INT64_SLICE"` }{}, loader: MapLoader{"INT64_SLICE": "invalid,2"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { errCast := new(ErrCast) return assert.ErrorAs(t, err, &errCast) && assert.Equal(t, "INT64_SLICE", errCast.key) && assert.EqualError(t, errCast.Unwrap(), `unable to cast "invalid" of type string to int64`) @@ -442,7 +442,7 @@ func TestLoad_NativeTypes(t *testing.T) { Int64Map map[string]int64 `env:"INT64_MAP"` }{}, loader: MapLoader{"INT64_MAP": "key1=1,key2=invalid"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { errCast := new(ErrCast) return assert.ErrorAs(t, err, &errCast) && assert.Equal(t, "INT64_MAP", errCast.key) && assert.EqualError(t, errCast.Unwrap(), `unable to cast "invalid" of type string to int64`) @@ -454,7 +454,7 @@ func TestLoad_NativeTypes(t *testing.T) { Int64Map map[int]int64 `env:"INT64_MAP"` }{}, loader: MapLoader{"INT64_MAP": "key1=1,key2=2"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { errCast := new(ErrCast) return assert.ErrorAs(t, err, &errCast) && assert.Equal(t, "INT64_MAP", errCast.key) && assert.EqualError(t, errCast.Unwrap(), `unable to cast "key1" of type string to int64`) @@ -465,7 +465,7 @@ func TestLoad_NativeTypes(t *testing.T) { { name: "unknown key type", input: &struct { - Unknown interface{} `env:"UNKNOWN"` + Unknown any `env:"UNKNOWN"` }{}, loader: MapLoader{"UNKNOWN": "1+2i"}, wantErr: errContains(&ErrUnknownFieldType{field: "Unknown", key: "UNKNOWN", kind: anyKind}), @@ -474,7 +474,7 @@ func TestLoad_NativeTypes(t *testing.T) { name: "nested unknown key type", input: &struct { Nested struct { - Unknown interface{} `env:"UNKNOWN"` + Unknown any `env:"UNKNOWN"` } `env:",prefix=NESTED_"` }{}, loader: MapLoader{"NESTED_UNKNOWN": "1+2i"}, @@ -541,7 +541,7 @@ func TestLoad_ArrayTypes(t *testing.T) { Int64Slice []int64 `env:"INT64_SLICE"` }{}, loader: MapLoader{"INT64_SLICE": "invalid,2"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { errCast := new(ErrCast) return assert.ErrorAs(t, err, &errCast) && assert.Equal(t, "INT64_SLICE", errCast.key) && assert.EqualError(t, errCast.Unwrap(), `unable to cast "invalid" of type string to int64`) @@ -620,7 +620,7 @@ func TestLoad_MapTypes(t *testing.T) { Int64Map map[string]int64 `env:"INT64_MAP"` }{}, loader: MapLoader{"INT64_MAP": "key1=1,key2=invalid"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { errCast := new(ErrCast) return assert.ErrorAs(t, err, &errCast) && assert.Equal(t, "INT64_MAP", errCast.key) && assert.EqualError(t, errCast.Unwrap(), `unable to cast "invalid" of type string to int64`) @@ -632,7 +632,7 @@ func TestLoad_MapTypes(t *testing.T) { Int64Map map[int]int64 `env:"INT64_MAP"` }{}, loader: MapLoader{"INT64_MAP": "key1=1,key2=2"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { errCast := new(ErrCast) return assert.ErrorAs(t, err, &errCast) && assert.Equal(t, "INT64_MAP", errCast.key) && assert.EqualError(t, errCast.Unwrap(), `unable to cast "key1" of type string to int64`) diff --git a/xload/maps.go b/xload/maps.go index 64e191e..3db7f68 100644 --- a/xload/maps.go +++ b/xload/maps.go @@ -24,18 +24,18 @@ func (m MapLoader) Load(_ context.Context, key string) (string, error) { // FlattenMap flattens a map[string]interface{} into a map[string]string. // Nested maps are flattened using given separator. -func FlattenMap(m map[string]interface{}, sep string) map[string]string { +func FlattenMap(m map[string]any, sep string) map[string]string { return flatten(m, "", sep) } func (m MapLoader) apply(opts *options) { opts.loader = m } -func flatten(m map[string]interface{}, prefix string, sep string) map[string]string { +func flatten(m map[string]any, prefix string, sep string) map[string]string { flattened := make(map[string]string) for key, value := range m { switch value := value.(type) { - case map[string]interface{}: + case map[string]any: for k, v := range flatten(value, key+sep, sep) { flattened[prefix+k] = v } diff --git a/xload/maps_test.go b/xload/maps_test.go index 90c4da9..344e9db 100644 --- a/xload/maps_test.go +++ b/xload/maps_test.go @@ -7,13 +7,13 @@ import ( ) func TestFlattenMap(t *testing.T) { - input := map[string]interface{}{ + input := map[string]any{ "NAME": "xload", "VERSION": 1.1, - "AUTHOR": map[string]interface{}{ + "AUTHOR": map[string]any{ "NAME": "gojek", "EMAIL": "test@gojek.com", - "ADDRESS": map[string]interface{}{ + "ADDRESS": map[string]any{ "CITY": "Bombay", }, }, diff --git a/xload/providers/cached/go.mod b/xload/providers/cached/go.mod index eece662..efeb298 100644 --- a/xload/providers/cached/go.mod +++ b/xload/providers/cached/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/xload/providers/cached -go 1.20 +go 1.25 replace github.com/gojekfarm/xtools/xload => ../.. diff --git a/xload/providers/cached/go.sum b/xload/providers/cached/go.sum index d7bed1f..98748c8 100644 --- a/xload/providers/cached/go.sum +++ b/xload/providers/cached/go.sum @@ -2,13 +2,19 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gotidy/ptr v1.4.0 h1:7++suUs+HNHMnyz6/AW3SE+4EnBhupPSQTSI7QNijVc= +github.com/gotidy/ptr v1.4.0/go.mod h1:MjRBG6/IETiiZGWI8LrRtISXEji+8b/jigmj2q0mEyM= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= @@ -28,6 +34,7 @@ go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/xload/providers/viper/go.mod b/xload/providers/viper/go.mod index b28c16a..d1ab537 100644 --- a/xload/providers/viper/go.mod +++ b/xload/providers/viper/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/xload/providers/viper -go 1.21.3 +go 1.25 replace github.com/gojekfarm/xtools/xload => ../.. diff --git a/xload/providers/yaml/go.mod b/xload/providers/yaml/go.mod index 07c451d..b093d5f 100644 --- a/xload/providers/yaml/go.mod +++ b/xload/providers/yaml/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/xload/providers/yaml -go 1.20 +go 1.25 replace github.com/gojekfarm/xtools/xload => ../.. diff --git a/xload/providers/yaml/go.sum b/xload/providers/yaml/go.sum index 8ada964..a5abb19 100644 --- a/xload/providers/yaml/go.sum +++ b/xload/providers/yaml/go.sum @@ -2,13 +2,19 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gotidy/ptr v1.4.0 h1:7++suUs+HNHMnyz6/AW3SE+4EnBhupPSQTSI7QNijVc= +github.com/gotidy/ptr v1.4.0/go.mod h1:MjRBG6/IETiiZGWI8LrRtISXEji+8b/jigmj2q0mEyM= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= @@ -23,5 +29,6 @@ go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/xload/providers/yaml/yaml.go b/xload/providers/yaml/yaml.go index d368269..b3edbbf 100644 --- a/xload/providers/yaml/yaml.go +++ b/xload/providers/yaml/yaml.go @@ -39,7 +39,7 @@ func NewLoader(r io.Reader, sep string) (xload.MapLoader, error) { return nil, err } - var out map[string]interface{} + var out map[string]any err = yaml.Unmarshal(b, &out) if err != nil { diff --git a/xload/type/endpoint_test.go b/xload/type/endpoint_test.go index fd95b2f..0f11074 100644 --- a/xload/type/endpoint_test.go +++ b/xload/type/endpoint_test.go @@ -26,7 +26,7 @@ func TestEndpoint_Decode(t *testing.T) { name: "invalid", in: "localhost", want: &Endpoint{}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { return assert.EqualError(t, err, "address localhost: missing port in address") }, }, @@ -34,7 +34,7 @@ func TestEndpoint_Decode(t *testing.T) { name: "invalid port", in: "localhost:port", want: &Endpoint{Host: "localhost"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { return assert.EqualError(t, err, `strconv.ParseInt: parsing "port": invalid syntax`) }, }, diff --git a/xload/type/listener_test.go b/xload/type/listener_test.go index 7880334..5969075 100644 --- a/xload/type/listener_test.go +++ b/xload/type/listener_test.go @@ -36,7 +36,7 @@ func TestListener_Decode(t *testing.T) { name: "missing port", in: "localhost", want: &Listener{}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { return assert.EqualError(t, err, "address localhost: missing port in address") }, }, @@ -44,7 +44,7 @@ func TestListener_Decode(t *testing.T) { name: "invalid port", in: "127.0.0.1:port", want: &Listener{IP: net.IPv4(127, 0, 0, 1)}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { return assert.EqualError(t, err, `strconv.ParseInt: parsing "port": invalid syntax`) }, }, @@ -52,7 +52,7 @@ func TestListener_Decode(t *testing.T) { name: "invalid ip", in: "localhost:8080", want: &Listener{}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { return assert.EqualError(t, err, "invalid IP address") }, }, diff --git a/xload/type/url_test.go b/xload/type/url_test.go index 89003bd..8cd63c3 100644 --- a/xload/type/url_test.go +++ b/xload/type/url_test.go @@ -22,7 +22,7 @@ func TestURL_Decode(t *testing.T) { { name: "schema missing", in: "://localhost:8080", - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { return assert.EqualError(t, err, `parse "://localhost:8080": missing protocol scheme`) }, }, @@ -93,14 +93,14 @@ func TestURL_Endpoint(t *testing.T) { { name: "invalid", u: URL{Scheme: "http", Host: "localhost"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { return assert.EqualError(t, err, "address localhost: missing port in address") }, }, { name: "invalid port", u: URL{Scheme: "http", Host: "localhost:port"}, - wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { + wantErr: func(t assert.TestingT, err error, i ...any) bool { return assert.EqualError(t, err, `strconv.ParseInt: parsing "port": invalid syntax`) }, }, diff --git a/xpod/go.mod b/xpod/go.mod index f66f954..ad73896 100644 --- a/xpod/go.mod +++ b/xpod/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/xpod -go 1.20 +go 1.25 require ( github.com/gojekfarm/xtools/generic v0.10.0 diff --git a/xpod/handler.go b/xpod/handler.go index cb4b0f2..48aadd6 100644 --- a/xpod/handler.go +++ b/xpod/handler.go @@ -70,7 +70,7 @@ type ProbeHandler struct { rh http.Handler vh http.Handler showErrReasons bool - logDelegate func(string, map[string]interface{}) + logDelegate func(string, map[string]any) } func (h *ProbeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { h.sm.ServeHTTP(w, r) } @@ -180,7 +180,7 @@ func (h *ProbeHandler) serveCheckers(cs []Checker) http.Handler { _, _ = fmt.Fprintf(&output, "warn: some checks cannot be excluded: no matches for %s\n", quotedChecks) if h.logDelegate != nil { - h.logDelegate("cannot exclude some checks", map[string]interface{}{ + h.logDelegate("cannot exclude some checks", map[string]any{ "checks": quotedChecks, "reason": "no matches", }) @@ -191,7 +191,7 @@ func (h *ProbeHandler) serveCheckers(cs []Checker) http.Handler { if len(failedChecks) > 0 { if h.logDelegate != nil { - h.logDelegate(fmt.Sprintf("%s check failed", checkPath), map[string]interface{}{ + h.logDelegate(fmt.Sprintf("%s check failed", checkPath), map[string]any{ "failed_checks": strings.Join( slice.Map(failedChecks, func(cf *checkFailure) string { return cf.name }), ", "), "errs": errors.Join(slice.Map(failedChecks, func(cf *checkFailure) error { return cf.err })...), diff --git a/xpod/handler_test.go b/xpod/handler_test.go index 2e5cefa..405228d 100644 --- a/xpod/handler_test.go +++ b/xpod/handler_test.go @@ -96,7 +96,7 @@ healthz check passed }, logDelegate: func(t *testing.T, m *mock.Mock) { m.On("Logf", mock.Anything, mock.Anything).Run(func(args mock.Arguments) { - argsMap := args.Get(1).(map[string]interface{}) + argsMap := args.Get(1).(map[string]any) assert.Equal(t, "healthz check failed", args.String(0)) assert.Equal(t, "redis", argsMap["failed_checks"]) @@ -174,7 +174,7 @@ healthz check passed }, logDelegate: func(t *testing.T, m *mock.Mock) { m.On("Logf", mock.Anything, mock.Anything).Run(func(args mock.Arguments) { - argsMap := args.Get(1).(map[string]interface{}) + argsMap := args.Get(1).(map[string]any) assert.Equal(t, "cannot exclude some checks", args.String(0)) assert.ElementsMatch(t, []string{"foo", "bar", "baz"}, slice.Map( @@ -278,7 +278,7 @@ func newMockLogDelegate(t *testing.T) *mockLogDelegate { type mockLogDelegate struct{ mock.Mock } -func (m *mockLogDelegate) Logf(format string, args map[string]interface{}) { m.Called(format, args) } +func (m *mockLogDelegate) Logf(format string, args map[string]any) { m.Called(format, args) } func Test_pathOrDefault(t *testing.T) { tests := []struct { diff --git a/xprom/go.mod b/xprom/go.mod index 49f5ee5..c8d3773 100644 --- a/xprom/go.mod +++ b/xprom/go.mod @@ -1,3 +1,3 @@ module github.com/gojekfarm/xtools/xprom -go 1.21 +go 1.25 diff --git a/xprom/semconv/go.mod b/xprom/semconv/go.mod index 90209e8..9647197 100644 --- a/xprom/semconv/go.mod +++ b/xprom/semconv/go.mod @@ -1,3 +1,3 @@ module github.com/gojekfarm/xtools/xprom/semconv -go 1.21 +go 1.25 diff --git a/xprom/xpromkafka/go.mod b/xprom/xpromkafka/go.mod index c2ce111..4317fa4 100644 --- a/xprom/xpromkafka/go.mod +++ b/xprom/xpromkafka/go.mod @@ -1,6 +1,6 @@ module github.com/gojekfarm/xtools/xprom/xpromkafka -go 1.21 +go 1.25 replace ( github.com/gojekfarm/xtools/xkafka => ../../xkafka diff --git a/xproto/decoder.go b/xproto/decoder.go index 6b99249..383426a 100644 --- a/xproto/decoder.go +++ b/xproto/decoder.go @@ -10,7 +10,7 @@ import ( ) var bufPool = &sync.Pool{ - New: func() interface{} { + New: func() any { return new(bytes.Buffer) }, } @@ -29,7 +29,7 @@ type Decoder struct { // Decode reads the proto-encoded value from its // input and stores it in the value pointed to by v. -func (d *Decoder) Decode(v interface{}) error { +func (d *Decoder) Decode(v any) error { m, ok := v.(proto.Message) if !ok { return errors.New("value should be a proto.Message") diff --git a/xproto/decoder_test.go b/xproto/decoder_test.go index c3292f6..8801f7b 100644 --- a/xproto/decoder_test.go +++ b/xproto/decoder_test.go @@ -37,7 +37,7 @@ func TestDecoder_Decode(t *testing.T) { r io.Reader } type args struct { - v interface{} + v any } tests := []struct { name string diff --git a/xproto/encoder.go b/xproto/encoder.go index f8ed2cd..4caede2 100644 --- a/xproto/encoder.go +++ b/xproto/encoder.go @@ -18,7 +18,7 @@ type Encoder struct { } // Encode writes the proto encoding of v to the stream. -func (e *Encoder) Encode(v interface{}) error { +func (e *Encoder) Encode(v any) error { m, ok := v.(proto.Message) if !ok { return errors.New("value should be a proto.Message") diff --git a/xproto/encoder_test.go b/xproto/encoder_test.go index b81536e..1cf74f4 100644 --- a/xproto/encoder_test.go +++ b/xproto/encoder_test.go @@ -26,7 +26,7 @@ func TestEncoder_Encode(t *testing.T) { w io.Writer } type args struct { - v interface{} + v any } tests := []struct { name string diff --git a/xproto/go.mod b/xproto/go.mod index 7d616d0..06265b9 100644 --- a/xproto/go.mod +++ b/xproto/go.mod @@ -1,5 +1,5 @@ module github.com/gojekfarm/xtools/xproto -go 1.16 +go 1.25 require google.golang.org/protobuf v1.33.0 diff --git a/xproto/go.sum b/xproto/go.sum index 3575a38..2e26fa5 100644 --- a/xproto/go.sum +++ b/xproto/go.sum @@ -1,8 +1,6 @@ -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=