From ae26f872f74834cc3f24cf0233b85f8f8b436de3 Mon Sep 17 00:00:00 2001 From: Ronen Hilewicz Date: Tue, 8 Apr 2025 10:41:47 -0400 Subject: [PATCH 1/2] CVE-2025-22870 Fixes: * https://github.com/aserto-dev/errors/security/dependabot/13 --- go.mod | 8 ++++---- go.sum | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 03407ff..12546de 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,8 @@ module github.com/aserto-dev/errors -go 1.22.11 +go 1.23.0 -toolchain go1.23.5 +toolchain go1.24.1 require ( github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 @@ -20,8 +20,8 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect - golang.org/x/net v0.34.0 // indirect - golang.org/x/sys v0.29.0 // indirect + golang.org/x/net v0.36.0 // indirect + golang.org/x/sys v0.30.0 // indirect golang.org/x/text v0.22.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250204164813-702378808489 // indirect google.golang.org/protobuf v1.36.5 // indirect diff --git a/go.sum b/go.sum index 91d15f0..7b67492 100644 --- a/go.sum +++ b/go.sum @@ -47,13 +47,13 @@ go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiy go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM= go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= -golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= -golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA= +golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= google.golang.org/genproto/googleapis/api v0.0.0-20250204164813-702378808489 h1:fCuMM4fowGzigT89NCIsW57Pk9k2D12MMi2ODn+Nk+o= From 35a2909bd9ce92affaa0a5c6161a80aa71ba7524 Mon Sep 17 00:00:00 2001 From: Ronen Hilewicz Date: Tue, 8 Apr 2025 10:50:20 -0400 Subject: [PATCH 2/2] Update linter --- .github/workflows/ci.yaml | 4 +- .golangci.yaml | 188 +++++++++----------------------------- custom_error_handler.go | 3 +- errors.go | 33 +++++-- errors_test.go | 21 +++-- go.mod | 8 +- go.sum | 22 ++--- makefile | 22 ++--- 8 files changed, 108 insertions(+), 193 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 70940ba..c9c489c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -17,7 +17,7 @@ on: env: PRE_RELEASE: ${{ github.ref == 'refs/heads/main' && 'development' || '' }} GO_VERSION: "1.23" - GO_LANGCI_LINT_VERSION: "v1.61.0" + GO_LANGCI_LINT_VERSION: v2.0.2 GO_TESTSUM_VERSION: "1.11.0" jobs: @@ -33,7 +33,7 @@ jobs: go-version: ${{ env.GO_VERSION }} - name: Lint - uses: golangci/golangci-lint-action@v6 + uses: golangci/golangci-lint-action@v7 with: version: ${{ env.GO_LANGCI_LINT_VERSION }} verify: false # `golangci-lint config verify` checks against the latest schema instead of its own version. diff --git a/.golangci.yaml b/.golangci.yaml index 199bdc1..4bb47d9 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -1,150 +1,52 @@ --- -# golangci.com configuration -# https://github.com/golangci/golangci/wiki/Configuration +# Configuration +# https://golangci-lint.run/usage/configuration/ -linters-settings: - funlen: - lines: 100 - statements: 80 - goconst: - min-len: 2 - min-occurrences: 2 - gocritic: - enabled-tags: - - diagnostic - - experimental - - opinionated - - performance - - style - disabled-checks: - - dupImport # https://github.com/go-critic/go-critic/issues/845 - - ifElseChain - - octalLiteral - - whyNoLint - - wrapperFunc - gocyclo: - min-complexity: 18 - goimports: - local-prefixes: github.com/golangci/golangci-lint - mnd: - checks: - - argument - - case - - condition - - return - govet: - shadow: true - settings: - printf: - funcs: - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf - lll: - line-length: 140 - misspell: - locale: US - nolintlint: - allow-unused: false # report any unused nolint directives - require-explanation: false # don't require an explanation for nolint directives - require-specific: false # don't require nolint directives to be specific about which linter is being skipped +version: "2" linters: - # please, do not use `enable-all`: it's deprecated and will be removed soon. - # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint - disable-all: false + # https://golangci-lint.run/usage/configuration/#linters-configuration + default: all + + # explicitly disabled linters + disable: + - depguard + - exhaustruct + - gochecknoglobals # no configuration options + - nlreturn # redundant with wsl + - paralleltest + - revive + - thelper + - varnamelen + - wrapcheck + + settings: + cyclop: + max-complexity: 12 + + funlen: + lines: 80 + statements: 60 + ignore-comments: true + + ireturn: + allow: + - error + - generic + + lll: + line-length: 150 + + tagliatelle: + case: + rules: + json: snake + yaml: snake + +formatters: enable: - - asasalint - - asciicheck - - bidichk - - bodyclose - - canonicalheader - - containedctx - - contextcheck - - copyloopvar - - cyclop - - decorder - - dogsled - - dupword - - durationcheck - - err113 - - errchkjson - - errname - - errorlint - - exhaustive - - fatcontext - - forcetypeassert - - funlen - - gocheckcompilerdirectives - - gochecknoinits - - gochecknoglobals - - gochecknoinits - - gocognit - - goconst - - gocritic - - gocyclo - - godot - gofmt + - gofumpt - goimports - - goprintffuncname - - gosec - - gosmopolitan - - grouper - - importas - - inamedparam - - interfacebloat - - intrange - - lll - - makezero - - mirror - - misspell - - mnd - - musttag - - nakedret - - nestif - - nilerr - - nilnil - - noctx - - nolintlint - - nonamedreturns - - perfsprint - - prealloc - - predeclared - - reassign - - rowserrcheck - - stylecheck - - testpackage - - unconvert - - unparam - - usestdlibvars - - wastedassign - - whitespace - - zerologlint - - # don't enable: - # - depguard - # - dupl - # - exhaustruct - # - gci - # - ginkgolinter - # - gochecknoglobals - # - gocognit - # - godox - # - gofumpt - # - gomoddirectives - # - ireturn - # - lll - # - nlreturn - # - nolintlint # conflict with 1.19 gofmt changes - # - protogetter - # - prealloc - # - revive - # - wsl - # - wrapcheck - -issues: - exclude-rules: - - text: "unnamedResult:" - linters: - - gocritic + disable: + - gci # use gofumpt diff --git a/custom_error_handler.go b/custom_error_handler.go index 429f94d..9983ac5 100644 --- a/custom_error_handler.go +++ b/custom_error_handler.go @@ -34,7 +34,7 @@ func CustomErrorHandler( continue } - value, hasErrorMetadata := errInfo.Metadata[HTTPStatusErrorMetadata] + value, hasErrorMetadata := errInfo.GetMetadata()[HTTPStatusErrorMetadata] if !hasErrorMetadata { continue } @@ -48,6 +48,7 @@ func CustomErrorHandler( httpStatusError.Err = err httpStatusError.HTTPStatus = code runtime.DefaultHTTPErrorHandler(ctx, gtw, runtimeMarshaler, httpResponseWriter, httpRequest, &httpStatusError) + return } } diff --git a/errors.go b/errors.go index cbbc3d8..423e9dd 100644 --- a/errors.go +++ b/errors.go @@ -30,6 +30,7 @@ var ( func NewAsertoError(code string, statusCode codes.Code, httpCode int, msg string) *AsertoError { asertoError := &AsertoError{code, statusCode, msg, httpCode, map[string]string{}, nil} asertoErrors[code] = asertoError + return asertoError } @@ -88,19 +89,23 @@ func (e *AsertoError) Error() string { } innerMessage := errsMessage + if len(e.data) > 0 { for k, v := range e.data { if k == "msg" { if innerMessage != "" { innerMessage = colon + innerMessage } + innerMessage = v + innerMessage } } } + if innerMessage == "" { return fmt.Sprintf("%s %s", e.Code, e.Message) } + return fmt.Sprintf("%s %s: %s", e.Code, e.Message, innerMessage) } @@ -150,30 +155,35 @@ func (e *AsertoError) Msgf(message string, args ...interface{}) *AsertoError { } else { c.data[MessageKey] = message } + return c } func (e *AsertoError) Str(key, value string) *AsertoError { c := e.Copy() c.data[key] = value + return c } func (e *AsertoError) Int(key string, value int) *AsertoError { c := e.Copy() c.data[key] = strconv.Itoa(value) + return c } func (e *AsertoError) Int32(key string, value int32) *AsertoError { c := e.Copy() c.data[key] = strconv.FormatInt(int64(value), 10) + return c } func (e *AsertoError) Int64(key string, value int64) *AsertoError { c := e.Copy() c.data[key] = strconv.FormatInt(value, 10) + return c } @@ -187,19 +197,21 @@ func (e *AsertoError) Bool(key string, value bool) *AsertoError { func (e *AsertoError) Duration(key string, value time.Duration) *AsertoError { c := e.Copy() c.data[key] = value.String() + return c } func (e *AsertoError) Time(key string, value time.Time) *AsertoError { c := e.Copy() c.data[key] = value.UTC().Format(time.RFC3339) + return c } func (e *AsertoError) FromReader(key string, value io.Reader) *AsertoError { buf := &strings.Builder{} - _, err := io.Copy(buf, value) - if err != nil { + + if _, err := io.Copy(buf, value); err != nil { return e.Err(err) } @@ -212,6 +224,7 @@ func (e *AsertoError) FromReader(key string, value io.Reader) *AsertoError { func (e *AsertoError) Interface(key string, value interface{}) *AsertoError { c := e.Copy() c.data[key] = fmt.Sprintf("%+v", value) + return c } @@ -242,6 +255,7 @@ func (e *AsertoError) MarshalZerologObject(event *zerolog.Event) { func (e *AsertoError) GRPCStatus() *status.Status { errResult := status.New(e.StatusCode, e.Message) + errResult, err := errResult.WithDetails(&errdetails.ErrorInfo{ Metadata: e.Data(), Domain: e.Code, @@ -256,12 +270,14 @@ func (e *AsertoError) GRPCStatus() *status.Status { func (e *AsertoError) WithGRPCStatus(grpcCode codes.Code) *AsertoError { c := e.Copy() c.StatusCode = grpcCode + return c } func (e *AsertoError) WithHTTPStatus(httpStatus int) *AsertoError { c := e.Copy() c.HTTPCode = httpStatus + return c } @@ -280,12 +296,14 @@ func FromGRPCStatus(grpcStatus status.Status) *AsertoError { for _, detail := range grpcStatus.Details() { if t, ok := detail.(*errdetails.ErrorInfo); ok { - result = asertoErrors[t.Domain] + result = asertoErrors[t.GetDomain()] if result == nil { return nil } - result.data = t.Metadata + + result.data = t.GetMetadata() } + if result != nil { break } @@ -298,8 +316,10 @@ func FromGRPCStatus(grpcStatus status.Status) *AsertoError { * Retrieves the most inner logger associated with an error. */ func Logger(err error) *zerolog.Logger { - var logger *zerolog.Logger - var ce *ContextError + var ( + logger *zerolog.Logger + ce *ContextError + ) if err == nil { return logger @@ -384,6 +404,7 @@ func extractLogger(ctx context.Context) *zerolog.Logger { if ctx == nil { return nil } + logger := zerolog.Ctx(ctx) if logger == zerolog.DefaultContextLogger || logger.GetLevel() == zerolog.Disabled { logger = nil diff --git a/errors_test.go b/errors_test.go index d0d122d..35f8560 100644 --- a/errors_test.go +++ b/errors_test.go @@ -68,25 +68,25 @@ func TestError(t *testing.T) { err6 := ErrNotFound.Err(errors.New("boom")).Err(errors.New("pow")) err7 := ErrNotFound.Msg("bla") - assert.Equal(err.Error(), "E10001 not found: bla: boom") - assert.Equal(err2.Error(), "E10001 not found: bla: ala") - assert.Equal(err3.Error(), "E10001 not found: bla: ala: boom") - assert.Equal(err4.Error(), "E10001 not found: bla: ala: boom: pow") - assert.Equal(err5.Error(), "E10001 not found: boom") - assert.Equal(err6.Error(), "E10001 not found: boom: pow") - assert.Equal(err7.Error(), "E10001 not found: bla") + assert.ErrorContains(err, "E10001 not found: bla: boom") + assert.ErrorContains(err2, "E10001 not found: bla: ala") + assert.ErrorContains(err3, "E10001 not found: bla: ala: boom") + assert.ErrorContains(err4, "E10001 not found: bla: ala: boom: pow") + assert.ErrorContains(err5, "E10001 not found: boom") + assert.ErrorContains(err6, "E10001 not found: boom: pow") + assert.ErrorContains(err7, "E10001 not found: bla") } func TestWithGrpcStatusCode(t *testing.T) { assert := require.New(t) err := ErrNotFound.WithGRPCStatus(codes.Canceled) - assert.Equal(err.StatusCode, codes.Canceled) + assert.Equal(codes.Canceled, err.StatusCode) } func TestWithHttpStatusCode(t *testing.T) { assert := require.New(t) err := ErrNotFound.WithHTTPStatus(http.StatusAccepted) - assert.Equal(err.HTTPCode, http.StatusAccepted) + assert.Equal(http.StatusAccepted, err.HTTPCode) } func TestFromGRPCStatus(t *testing.T) { @@ -96,6 +96,7 @@ func TestFromGRPCStatus(t *testing.T) { initialErr = initialErr.Str("email", "testuser@mail.com").Msg("foo") grpcStatus := status.New(initialErr.StatusCode, initialErr.Error()) + grpcStatus, err := grpcStatus.WithDetails(&errdetails.ErrorInfo{ Reason: "1234", Metadata: initialErr.Data(), @@ -212,9 +213,9 @@ func TestLoggerWithNilError(t *testing.T) { func TestLoggerWithWrappedNilError(t *testing.T) { assert := require.New(t) + ctx := context.Background() var err error - ctx := context.Background() logger := cerr.Logger(cerr.WithContext(err, ctx)) assert.Nil(logger) diff --git a/go.mod b/go.mod index 12546de..5ed55bf 100644 --- a/go.mod +++ b/go.mod @@ -5,11 +5,11 @@ go 1.23.0 toolchain go1.24.1 require ( - github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 github.com/pkg/errors v0.9.1 - github.com/rs/zerolog v1.33.0 + github.com/rs/zerolog v1.34.0 github.com/stretchr/testify v1.10.0 - google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a + google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb google.golang.org/grpc v1.70.0 ) @@ -23,7 +23,7 @@ require ( golang.org/x/net v0.36.0 // indirect golang.org/x/sys v0.30.0 // indirect golang.org/x/text v0.22.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250204164813-702378808489 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 7b67492..cd0f3da 100644 --- a/go.sum +++ b/go.sum @@ -9,12 +9,12 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 h1:e9Rjr40Z98/clHv5Yg79Is0NtosR5LXRvdr7o/6NwbA= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1/go.mod h1:tIxuGz/9mpox++sgp9fJjHO0+q1X9/UOWd798aAm22M= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= 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= @@ -32,9 +32,9 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= -github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= +github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= +github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= @@ -56,10 +56,10 @@ golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= -google.golang.org/genproto/googleapis/api v0.0.0-20250204164813-702378808489 h1:fCuMM4fowGzigT89NCIsW57Pk9k2D12MMi2ODn+Nk+o= -google.golang.org/genproto/googleapis/api v0.0.0-20250204164813-702378808489/go.mod h1:iYONQfRdizDB8JJBybql13nArx91jcUk7zCXEsOofM4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a h1:51aaUVRocpvUOSQKM6Q7VuoaktNIaMCLuhZB6DKksq4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a/go.mod h1:uRxBH1mhmO8PGhU89cMcHaXKZqO+OfakD8QQO0oYwlQ= +google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950= +google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb h1:TLPQVbx1GJ8VKZxz52VAxl1EBgKXXbTiU9Fc5fZeLn4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= diff --git a/makefile b/makefile index b1dbf0d..7497a40 100644 --- a/makefile +++ b/makefile @@ -15,11 +15,11 @@ EXT_DIR := ./.ext EXT_BIN_DIR := ${EXT_DIR}/bin EXT_TMP_DIR := ${EXT_DIR}/tmp -SVU_VER := 1.12.0 +SVU_VER := 3.1.0 GOTESTSUM_VER := 1.11.0 -GOLANGCI-LINT_VER := 1.61.0 +GOLANGCI-LINT_VER := 2.0.2 -RELEASE_TAG := $$(svu) +RELEASE_TAG := $$(${EXT_BIN_DIR}/svu current) .DEFAULT_GOAL := build @@ -59,23 +59,13 @@ info: @echo "RELEASE_TAG: ${RELEASE_TAG}" .PHONY: install-svu -install-svu: install-svu-${GOOS} +install-svu: ${EXT_BIN_DIR} ${EXT_TMP_DIR} @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)" + @gh release download v${SVU_VER} --repo https://github.com/caarlos0/svu --pattern "*${GOOS}_all.tar.gz" --output "${EXT_TMP_DIR}/svu.tar.gz" --clobber + @tar -xvf ${EXT_TMP_DIR}/svu.tar.gz --directory ${EXT_BIN_DIR} svu &> /dev/null @chmod +x ${EXT_BIN_DIR}/svu @${EXT_BIN_DIR}/svu --version -.PHONY: install-svu-darwin -install-svu-darwin: ${EXT_TMP_DIR} ${EXT_BIN_DIR} - @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)" - @gh release download --repo https://github.com/caarlos0/svu --pattern "svu_*_darwin_all.tar.gz" --output "${EXT_TMP_DIR}/svu.tar.gz" --clobber - @tar -xvf ${EXT_TMP_DIR}/svu.tar.gz --directory ${EXT_BIN_DIR} svu &> /dev/null - -.PHONY: install-svu-linux -install-svu-linux: ${EXT_TMP_DIR} ${EXT_BIN_DIR} - @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)" - @gh release download --repo https://github.com/caarlos0/svu --pattern "svu_*_linux_${GOARCH}.tar.gz" --output "${EXT_TMP_DIR}/svu.tar.gz" --clobber - @tar -xvf ${EXT_TMP_DIR}/svu.tar.gz --directory ${EXT_BIN_DIR} svu &> /dev/null - .PHONY: install-gotestsum install-gotestsum: ${EXT_TMP_DIR} ${EXT_BIN_DIR} @echo -e "$(ATTN_COLOR)==> $@ $(NO_COLOR)"