From 2e9c02bfbbf4a30b6e859add8ad5c5f0719da1fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 20:12:50 +0000 Subject: [PATCH] chore(deps): Bump github.com/obalunenko/getenv from 1.14.2 to 1.15.0 Bumps [github.com/obalunenko/getenv](https://github.com/obalunenko/getenv) from 1.14.2 to 1.15.0. - [Release notes](https://github.com/obalunenko/getenv/releases) - [Commits](https://github.com/obalunenko/getenv/compare/v1.14.2...v1.15.0) --- updated-dependencies: - dependency-name: github.com/obalunenko/getenv dependency-version: 1.15.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 8 +- vendor/github.com/obalunenko/getenv/README.md | 12 +- vendor/github.com/obalunenko/getenv/getenv.go | 30 ++++- .../obalunenko/getenv/internal/constraint.go | 14 +- .../obalunenko/getenv/internal/iface.go | 81 ++++++++++++ .../obalunenko/getenv/internal/parsers.go | 125 ++++++++++++++++-- vendor/modules.txt | 2 +- 8 files changed, 247 insertions(+), 27 deletions(-) diff --git a/go.mod b/go.mod index 5190b70..078149b 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/go-openapi/strfmt v0.26.3 github.com/go-openapi/swag v0.26.0 github.com/go-openapi/validate v0.25.3 - github.com/obalunenko/getenv v1.14.2 + github.com/obalunenko/getenv v1.15.0 github.com/stretchr/testify v1.11.1 ) diff --git a/go.sum b/go.sum index 8b5cf06..5ffe15f 100644 --- a/go.sum +++ b/go.sum @@ -7,10 +7,10 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-openapi/errors v0.22.8 h1:oP7sW7TWc3wFFjrzzj0nI83H2qMBkNjNfSd+XRejk/I= -github.com/go-openapi/errors v0.22.8/go.mod h1:BuUoHcYrU6E7V9gfj1I5wLQqgtIHnup/alXZ8KdgQ0w= github.com/go-openapi/analysis v0.25.2 h1:I0vy4n3alz+DHTiN1PRhCb7QZxkK6g5YmswZKv2TKuw= github.com/go-openapi/analysis v0.25.2/go.mod h1:Uhs1t/2XR10EnwONYILGEzw8gcfGIG5Xk5K2AxnhqDo= +github.com/go-openapi/errors v0.22.8 h1:oP7sW7TWc3wFFjrzzj0nI83H2qMBkNjNfSd+XRejk/I= +github.com/go-openapi/errors v0.22.8/go.mod h1:BuUoHcYrU6E7V9gfj1I5wLQqgtIHnup/alXZ8KdgQ0w= github.com/go-openapi/jsonpointer v0.23.1 h1:1HBACs7XIwR2RcmItfdSFlALhGbe6S92p0ry4d1GWg4= github.com/go-openapi/jsonpointer v0.23.1/go.mod h1:iWRmZTrGn7XwYhtPt/fvdSFj1OfNBngqRT2UG3BxSqY= github.com/go-openapi/jsonreference v0.21.6 h1:NZ5nGfnaM1n4I43Xjm1e5/M2GjOwQwndQz22uhxwD+Y= @@ -67,8 +67,8 @@ 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/obalunenko/getenv v1.14.2 h1:TDYbrAOscHaL6Qw5iG3QYE1Lhigk0TSv2GHe370XkxM= -github.com/obalunenko/getenv v1.14.2/go.mod h1:kXJjGqFmvucspwNk4/hrHi2bG3cEfSEQJPYmWzUK/KQ= +github.com/obalunenko/getenv v1.15.0 h1:TX+GytSOk0xTK0L8VOIo+L6N77BKQ5iMvnsPRzz/bec= +github.com/obalunenko/getenv v1.15.0/go.mod h1:kXJjGqFmvucspwNk4/hrHi2bG3cEfSEQJPYmWzUK/KQ= github.com/oklog/ulid/v2 v2.1.1 h1:suPZ4ARWLOJLegGFiZZ1dFAkqzhMjL3J1TzI+5wHz8s= github.com/oklog/ulid/v2 v2.1.1/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= diff --git a/vendor/github.com/obalunenko/getenv/README.md b/vendor/github.com/obalunenko/getenv/README.md index 9c2fab5..0b74eab 100644 --- a/vendor/github.com/obalunenko/getenv/README.md +++ b/vendor/github.com/obalunenko/getenv/README.md @@ -50,6 +50,12 @@ Types supported: - []url.URL - net.IP - []net.IP +- netip.Addr +- []netip.Addr +- netip.Prefix +- []netip.Prefix +- net.HardwareAddr +- []net.HardwareAddr - complex64 - []complex64 - complex128 @@ -190,11 +196,11 @@ Output: ``` [string]: golly; err: [int]: 123; err: -[int]: 0; err: could not parse variable[GH_GETENV_TEST] value[123s4] to type[int]: invalid value +[int]: 0; err: failed to parse environment variable[GH_GETENV_TEST]: strconv.ParseInt: parsing "123s4": invalid syntax: invalid value [time.Time]: 2022-01-20 00:00:00 +0000 UTC; err: [[]float64]: [26.89 0.67]; err: [time.Duration]: 2h35m0s; err: -[url.URL]: {https test:abcd123 golangbyexample.com:8000 /tutorials/intro false false type=advance&compact=false history }; err: +[url.URL]: https://test:abcd123@golangbyexample.com:8000/tutorials/intro?type=advance&compact=false#history; err: [net.IP]: 2001:cb8::17; err: [[]string]: [a b c d]; err: [complex128]: (1+2i); err: @@ -332,7 +338,7 @@ Output: [time.Time]: 2022-01-20 00:00:00 +0000 UTC [[]float64]: [26.89 0.67] [time.Duration]: 2h35m0s -[url.URL]: {https test:abcd123 golangbyexample.com:8000 /tutorials/intro false false type=advance&compact=false history } +[url.URL]: https://test:abcd123@golangbyexample.com:8000/tutorials/intro?type=advance&compact=false#history [net.IP]: 2001:cb8::17 [[]string]: [a b c d] [complex128]: (1+2i) diff --git a/vendor/github.com/obalunenko/getenv/getenv.go b/vendor/github.com/obalunenko/getenv/getenv.go index 9e3ac13..a1d4919 100644 --- a/vendor/github.com/obalunenko/getenv/getenv.go +++ b/vendor/github.com/obalunenko/getenv/getenv.go @@ -41,6 +41,12 @@ // - []url.URL // - net.IP // - []net.IP +// - netip.Addr +// - []netip.Addr +// - netip.Prefix +// - []netip.Prefix +// - net.HardwareAddr +// - []net.HardwareAddr // - complex64 // - []complex64 // - complex128 @@ -75,11 +81,17 @@ func Env[T internal.EnvParsable](key string, options ...option.Option) (T, error val, err := w.ParseEnv(key, params) if err != nil { if errors.Is(err, internal.ErrNotSet) { - return t, fmt.Errorf("failed to get environment variable[%s]: %w", key, ErrNotSet) + return t, fmt.Errorf("failed to get environment variable[%s]: %w", key, publicError{ + cause: err, + sentinel: ErrNotSet, + }) } if errors.Is(err, internal.ErrInvalidValue) { - return t, fmt.Errorf("failed to parse environment variable[%s]: %w", key, ErrInvalidValue) + return t, fmt.Errorf("failed to parse environment variable[%s]: %w", key, publicError{ + cause: err, + sentinel: ErrInvalidValue, + }) } return t, fmt.Errorf("failed to parse environment variable[%s]: %w", key, err) @@ -106,6 +118,20 @@ func EnvOrDefault[T internal.EnvParsable](key string, defaultVal T, options ...o return val } +// publicError keeps parser details while matching exported sentinels. +type publicError struct { + cause error + sentinel error +} + +func (e publicError) Error() string { + return e.cause.Error() +} + +func (e publicError) Unwrap() []error { + return []error{e.cause, e.sentinel} +} + // newParseParams creates new parameters from options. func newParseParams(opts []option.Option) internal.Parameters { var p internal.Parameters diff --git a/vendor/github.com/obalunenko/getenv/internal/constraint.go b/vendor/github.com/obalunenko/getenv/internal/constraint.go index 7e545fb..1fb52f0 100644 --- a/vendor/github.com/obalunenko/getenv/internal/constraint.go +++ b/vendor/github.com/obalunenko/getenv/internal/constraint.go @@ -2,6 +2,7 @@ package internal import ( "net" + "net/netip" "net/url" "time" ) @@ -9,7 +10,7 @@ import ( type ( // EnvParsable is a constraint for types that can be parsed from environment variable. EnvParsable interface { - String | Number | NumberSlice | Time | Bool | URL | IP | Complex | ComplexSlice + String | Number | NumberSlice | Time | Bool | URL | Network | Complex | ComplexSlice } // String is a constraint for string and slice of strings. @@ -57,7 +58,7 @@ type ( []float32 | []float64 } - // Time is a constraint for time.Time and slice of time.Time. + // Time is a constraint for time.Time and time.Duration and slices of them. Time interface { time.Time | []time.Time | time.Duration | []time.Duration } @@ -72,9 +73,12 @@ type ( url.URL | []url.URL } - // IP is a constraint for net.IP and slice of net.IP. - IP interface { - net.IP | []net.IP + // Network is a constraint for network address types and slices of them. + Network interface { + net.IP | []net.IP | + net.HardwareAddr | []net.HardwareAddr | + netip.Addr | []netip.Addr | + netip.Prefix | []netip.Prefix } // ComplexSlice is a constraint for slice of complex. diff --git a/vendor/github.com/obalunenko/getenv/internal/iface.go b/vendor/github.com/obalunenko/getenv/internal/iface.go index c8fa999..cead858 100644 --- a/vendor/github.com/obalunenko/getenv/internal/iface.go +++ b/vendor/github.com/obalunenko/getenv/internal/iface.go @@ -4,6 +4,7 @@ package internal import ( "fmt" "net" + "net/netip" "net/url" "time" ) @@ -29,6 +30,10 @@ func NewEnvParser(v any) EnvParser { p = newURLParser(t) case net.IP, []net.IP: p = newIPParser(t) + case netip.Addr, []netip.Addr, netip.Prefix, []netip.Prefix: + p = newNetIPParser(t) + case net.HardwareAddr, []net.HardwareAddr: + p = newHardwareAddrParser(t) case complex64, []complex64, complex128, []complex128: p = newComplexParser(t) default: @@ -82,6 +87,34 @@ func newIPParser(v any) EnvParser { } } +// newNetIPParser is a constructor for net/netip parsers. +func newNetIPParser(v any) EnvParser { + switch t := v.(type) { + case netip.Addr: + return netIPAddrParser(t) + case []netip.Addr: + return netIPAddrSliceParser(t) + case netip.Prefix: + return netIPPrefixParser(t) + case []netip.Prefix: + return netIPPrefixSliceParser(t) + default: + return nil + } +} + +// newHardwareAddrParser is a constructor for net.HardwareAddr parsers. +func newHardwareAddrParser(v any) EnvParser { + switch t := v.(type) { + case net.HardwareAddr: + return hardwareAddrParser(t) + case []net.HardwareAddr: + return hardwareAddrSliceParser(t) + default: + return nil + } +} + func newStringParser(v any) EnvParser { switch t := v.(type) { case string: @@ -301,6 +334,54 @@ func (t ipSliceParser) ParseEnv(key string, opts Parameters) (any, error) { return getIPSlice(key, separator) } +// netIPAddrParser is a parser for netip.Addr. +type netIPAddrParser netip.Addr + +func (t netIPAddrParser) ParseEnv(key string, _ Parameters) (any, error) { + return getNetIPAddr(key) +} + +// netIPAddrSliceParser is a parser for []netip.Addr. +type netIPAddrSliceParser []netip.Addr + +func (t netIPAddrSliceParser) ParseEnv(key string, opts Parameters) (any, error) { + separator := opts.Separator + + return getNetIPAddrSlice(key, separator) +} + +// netIPPrefixParser is a parser for netip.Prefix. +type netIPPrefixParser netip.Prefix + +func (t netIPPrefixParser) ParseEnv(key string, _ Parameters) (any, error) { + return getNetIPPrefix(key) +} + +// netIPPrefixSliceParser is a parser for []netip.Prefix. +type netIPPrefixSliceParser []netip.Prefix + +func (t netIPPrefixSliceParser) ParseEnv(key string, opts Parameters) (any, error) { + separator := opts.Separator + + return getNetIPPrefixSlice(key, separator) +} + +// hardwareAddrParser is a parser for net.HardwareAddr. +type hardwareAddrParser net.HardwareAddr + +func (t hardwareAddrParser) ParseEnv(key string, _ Parameters) (any, error) { + return getHardwareAddr(key) +} + +// hardwareAddrSliceParser is a parser for []net.HardwareAddr. +type hardwareAddrSliceParser []net.HardwareAddr + +func (t hardwareAddrSliceParser) ParseEnv(key string, opts Parameters) (any, error) { + separator := opts.Separator + + return getHardwareAddrSlice(key, separator) +} + // boolSliceParser is a parser for []bool type boolSliceParser []bool diff --git a/vendor/github.com/obalunenko/getenv/internal/parsers.go b/vendor/github.com/obalunenko/getenv/internal/parsers.go index 0cf153e..1b72cd5 100644 --- a/vendor/github.com/obalunenko/getenv/internal/parsers.go +++ b/vendor/github.com/obalunenko/getenv/internal/parsers.go @@ -3,6 +3,7 @@ package internal import ( "fmt" "net" + "net/netip" "net/url" "os" "strconv" @@ -43,15 +44,15 @@ func getBool(key string) (bool, error) { } func getBoolSlice(key, sep string) ([]bool, error) { - if sep == "" { - return nil, ErrInvalidValue - } - env, err := getString(key) if err != nil { return nil, err } + if sep == "" { + return nil, ErrInvalidValue + } + val := strings.Split(env, sep) b := make([]bool, 0, len(val)) @@ -69,15 +70,15 @@ func getBoolSlice(key, sep string) ([]bool, error) { } func getStringSlice(key, sep string) ([]string, error) { - if sep == "" { - return nil, ErrInvalidValue - } - env, err := getString(key) if err != nil { return nil, err } + if sep == "" { + return nil, ErrInvalidValue + } + val := strings.Split(env, sep) return val, nil @@ -123,7 +124,7 @@ func parseSignedNumber[T Number](raw string, base, bits int) (T, error) { val, err := strconv.ParseInt(raw, base, bits) if err != nil { - return zero, ErrInvalidValue + return zero, newErrInvalidValue(err.Error()) } return T(val), nil @@ -134,7 +135,7 @@ func parseUnsignedNumber[T Number](raw string, base, bits int) (T, error) { val, err := strconv.ParseUint(raw, base, bits) if err != nil { - return zero, ErrInvalidValue + return zero, newErrInvalidValue(err.Error()) } return T(val), nil @@ -145,7 +146,7 @@ func parseFloatNumber[T Number](raw string, bits int) (T, error) { val, err := strconv.ParseFloat(raw, bits) if err != nil { - return zero, ErrInvalidValue + return zero, newErrInvalidValue(err.Error()) } return T(val), nil @@ -322,6 +323,108 @@ func getIPSlice(key, sep string) ([]net.IP, error) { return val, nil } +func getNetIPAddr(key string) (netip.Addr, error) { + env, err := getString(key) + if err != nil { + return netip.Addr{}, err + } + + val, err := netip.ParseAddr(env) + if err != nil { + return netip.Addr{}, newErrInvalidValue(err.Error()) + } + + return val, nil +} + +func getNetIPAddrSlice(key, sep string) ([]netip.Addr, error) { + env, err := getStringSlice(key, sep) + if err != nil { + return nil, err + } + + val := make([]netip.Addr, 0, len(env)) + + for _, s := range env { + v, err := netip.ParseAddr(s) + if err != nil { + return nil, newErrInvalidValue(err.Error()) + } + + val = append(val, v) + } + + return val, nil +} + +func getNetIPPrefix(key string) (netip.Prefix, error) { + env, err := getString(key) + if err != nil { + return netip.Prefix{}, err + } + + val, err := netip.ParsePrefix(env) + if err != nil { + return netip.Prefix{}, newErrInvalidValue(err.Error()) + } + + return val, nil +} + +func getNetIPPrefixSlice(key, sep string) ([]netip.Prefix, error) { + env, err := getStringSlice(key, sep) + if err != nil { + return nil, err + } + + val := make([]netip.Prefix, 0, len(env)) + + for _, s := range env { + v, err := netip.ParsePrefix(s) + if err != nil { + return nil, newErrInvalidValue(err.Error()) + } + + val = append(val, v) + } + + return val, nil +} + +func getHardwareAddr(key string) (net.HardwareAddr, error) { + env, err := getString(key) + if err != nil { + return nil, err + } + + val, err := net.ParseMAC(env) + if err != nil { + return nil, newErrInvalidValue(err.Error()) + } + + return val, nil +} + +func getHardwareAddrSlice(key, sep string) ([]net.HardwareAddr, error) { + env, err := getStringSlice(key, sep) + if err != nil { + return nil, err + } + + val := make([]net.HardwareAddr, 0, len(env)) + + for _, s := range env { + v, err := net.ParseMAC(s) + if err != nil { + return nil, newErrInvalidValue(err.Error()) + } + + val = append(val, v) + } + + return val, nil +} + func parseComplexGen[T Complex](raw string) (T, error) { var zero T diff --git a/vendor/modules.txt b/vendor/modules.txt index f284711..19a0226 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -106,7 +106,7 @@ github.com/go-viper/mapstructure/v2/internal/errors # github.com/google/uuid v1.6.0 ## explicit github.com/google/uuid -# github.com/obalunenko/getenv v1.14.2 +# github.com/obalunenko/getenv v1.15.0 ## explicit; go 1.26.2 github.com/obalunenko/getenv github.com/obalunenko/getenv/internal