Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# build stage
# =============================================================================

FROM golang:1.25.5-alpine AS builder
FROM golang:1.26.2-alpine AS builder

WORKDIR /sdk

Expand Down Expand Up @@ -33,15 +33,15 @@ FROM builder AS linter

# binary will be $(go env GOPATH)/bin/golangci-lint
RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh \
| sh -s -- -b $(go env GOPATH)/bin v2.4.0
| sh -s -- -b $(go env GOPATH)/bin v2.11.4

# install goimports
RUN go install golang.org/x/tools/cmd/goimports@v0.36.0
RUN go install golang.org/x/tools/cmd/goimports@v0.44.0

# =============================================================================
# development stage
# =============================================================================

FROM linter AS development

RUN go install github.com/go-delve/delve/cmd/dlv@v1.25.1
RUN go install github.com/go-delve/delve/cmd/dlv@v1.26.2
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ SDK, the Go version.

## Prerequisites

* [Go](https://golang.org) (version `1.25.0`).
* [Go](https://golang.org) (version `1.26.2`).
* [Docker](https://www.docker.com/) (version `19.03.2`).

## SDK functionality
Expand Down Expand Up @@ -1743,7 +1743,7 @@ You can enter the docker environment to build, run and debug your service:
```
$ docker-compose run --rm sdk /bin/bash
root@1f31fa8e5c49:/sdk# go version
go version go1.25.0 linux/amd64
go version go1.26.2 linux/amd64
```

Refer to the
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/scribd/go-sdk

go 1.25.5
go 1.26.2

require (
github.com/DATA-DOG/go-sqlmock v1.5.2
Expand Down
6 changes: 3 additions & 3 deletions internal/pkg/configuration/builder/viper.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
// ViperBuilder is a builder to streamline Viper configuration and building.
type ViperBuilder struct {
vConf *viper.Viper
defaults map[string]interface{}
defaults map[string]any
name string
}

Expand All @@ -32,7 +32,7 @@ func New(name string) *ViperBuilder {
return &ViperBuilder{
vConf: vConf,
name: name,
defaults: make(map[string]interface{}),
defaults: make(map[string]any),
}
}

Expand All @@ -45,7 +45,7 @@ func (vb *ViperBuilder) ConfigPath(path string) *ViperBuilder {
// SetDefault sets a default value for a configuration key.
// Any default value set will be available in the `viper.Viper` configuration
// instance that is returned after calling the `Build()` function.
func (vb *ViperBuilder) SetDefault(key string, value interface{}) *ViperBuilder {
func (vb *ViperBuilder) SetDefault(key string, value any) *ViperBuilder {
vb.defaults[key] = value
return vb
}
Expand Down
6 changes: 3 additions & 3 deletions pkg/app/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func (c *Config) String(key string) string {
}

// StringMap returns a key's value as map[string]interface{}.
func (c *Config) StringMap(key string) map[string]interface{} {
func (c *Config) StringMap(key string) map[string]any {
return c.vConf.GetStringMap(key)
}

Expand All @@ -83,7 +83,7 @@ func (c *Config) Duration(key string) time.Duration {
}

// Set sets a value to a key.
func (c *Config) Set(key string, value interface{}) {
func (c *Config) Set(key string, value any) {
c.vConf.Set(key, value)
}

Expand All @@ -93,6 +93,6 @@ func (c *Config) IsSet(key string) bool {
}

// AllSettings returns all settings as map.
func (c *Config) AllSettings() map[string]interface{} {
func (c *Config) AllSettings() map[string]any {
return c.vConf.AllSettings()
}
1 change: 0 additions & 1 deletion pkg/aws/aws_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,6 @@ func TestBuilder(t *testing.T) {
}

for _, tc := range tests {
tc := tc
t.Run(tc.name, func(t *testing.T) {
tc.fn(t)
})
Expand Down
13 changes: 4 additions & 9 deletions pkg/context/logger/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package logger
import (
"context"
"fmt"
"maps"

grpcctxtags "github.com/grpc-ecosystem/go-grpc-middleware/tags"

Expand All @@ -26,9 +27,7 @@ func AddFields(ctx context.Context, fields sdklogger.Fields) {
if !ok || l == nil {
return
}
for k, v := range fields {
l.fields[k] = v
}
maps.Copy(l.fields, fields)
}

// Extract takes the call-scoped sdklogger.Logger from the context.
Expand All @@ -43,14 +42,10 @@ func Extract(ctx context.Context) (sdklogger.Logger, error) {

// Add grpcctxtags tags metadata until now.
tags := grpcctxtags.Extract(ctx)
for k, v := range tags.Values() {
fields[k] = v
}
maps.Copy(fields, tags.Values())

// Add sdklogger fields added until now.
for k, v := range l.fields {
fields[k] = v
}
maps.Copy(fields, l.fields)

return l.logger.WithFields(fields), nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/instrumentation/kafka/kafka_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ func TestNewClient(t *testing.T) {
assert.Len(t, spans, 7)

// produce
for i := 0; i < 4; i++ {
for i := range 4 {
s := spans[i]
assert.Equal(t, "kafka.produce", s.OperationName())
assert.Equal(t, "kafka", s.Tag(ext.ServiceName))
Expand Down
6 changes: 3 additions & 3 deletions pkg/interceptors/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ import (
func DatabaseUnaryServerInterceptor(db *gorm.DB) grpc.UnaryServerInterceptor {
return func(
ctx context.Context,
req interface{},
req any,
info *grpc.UnaryServerInfo,
handler grpc.UnaryHandler,
) (interface{}, error) {
) (any, error) {
instrumentedDB := db.WithContext(ctx)
newCtx := sdkcontext.ToContext(ctx, instrumentedDB)

Expand All @@ -28,7 +28,7 @@ func DatabaseUnaryServerInterceptor(db *gorm.DB) grpc.UnaryServerInterceptor {
// DatabaseStreamServerInterceptor returns a streaming server interceptor that adds gorm.DB to the context.
func DatabaseStreamServerInterceptor(db *gorm.DB) grpc.StreamServerInterceptor {
return func(
srv interface{},
srv any,
stream grpc.ServerStream,
info *grpc.StreamServerInfo,
handler grpc.StreamHandler,
Expand Down
6 changes: 3 additions & 3 deletions pkg/interceptors/database_logging.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ import (
func DatabaseLoggingUnaryServerInterceptor() grpc.UnaryServerInterceptor {
return func(
ctx context.Context,
req interface{},
req any,
_ *grpc.UnaryServerInfo,
handler grpc.UnaryHandler,
) (interface{}, error) {
) (any, error) {
db, err := sdkdatabasecontext.Extract(ctx)
if err != nil {
return nil, err
Expand Down Expand Up @@ -50,7 +50,7 @@ func DatabaseLoggingUnaryServerInterceptor() grpc.UnaryServerInterceptor {
// meta-information using the logger.
func DatabaseLoggingStreamServerInterceptor() grpc.StreamServerInterceptor {
return func(
srv interface{},
srv any,
stream grpc.ServerStream,
_ *grpc.StreamServerInfo,
handler grpc.StreamHandler,
Expand Down
8 changes: 4 additions & 4 deletions pkg/interceptors/database_logging_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func TestDatabaseLoggingUnaryServerInterceptor(t *testing.T) {
assert.Nil(t, err)

// read first log entry
var fieldsUnary map[string]interface{}
var fieldsUnary map[string]any
dec := json.NewDecoder(bytes.NewReader(buffer.Bytes()))
err = dec.Decode(&fieldsUnary)
require.Nil(t, err)
Expand Down Expand Up @@ -177,18 +177,18 @@ func TestDatabaseLoggingStreamServerInterceptors(t *testing.T) {
assert.Nil(t, err)

// read first log entry
var fieldsStream map[string]interface{}
var fieldsStream map[string]any
dec := json.NewDecoder(bytes.NewReader(buffer.Bytes()))
err = dec.Decode(&fieldsStream)
require.Nil(t, err)

checkGormLoggerFields(t, fieldsStream)
}

func checkGormLoggerFields(t *testing.T, fields map[string]interface{}) {
func checkGormLoggerFields(t *testing.T, fields map[string]any) {
assert.NotEmpty(t, fields["sql"])

dbFields, ok := (fields["sql"]).(map[string]interface{})
dbFields, ok := (fields["sql"]).(map[string]any)
assert.True(t, ok, "%s not found in log fields", "trace")
assert.NotEmpty(t, dbFields)

Expand Down
20 changes: 9 additions & 11 deletions pkg/interceptors/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package interceptors

import (
"context"
"fmt"
"path"
"time"

Expand All @@ -21,10 +20,10 @@ import (
func LoggerUnaryServerInterceptor(logger sdklogger.Logger) grpc.UnaryServerInterceptor {
return func(
ctx context.Context,
req interface{},
req any,
info *grpc.UnaryServerInfo,
handler grpc.UnaryHandler,
) (interface{}, error) {
) (any, error) {
startTime := time.Now()
newCtx := newLoggerForCall(ctx, logger, info.FullMethod, startTime)

Expand All @@ -39,7 +38,7 @@ func LoggerUnaryServerInterceptor(logger sdklogger.Logger) grpc.UnaryServerInter
// LoggerStreamServerInterceptor returns a streaming server interceptor that adds the sdklogger.Logger to the context.
func LoggerStreamServerInterceptor(logger sdklogger.Logger) grpc.StreamServerInterceptor {
return func(
srv interface{},
srv any,
stream grpc.ServerStream,
info *grpc.StreamServerInfo,
handler grpc.StreamHandler,
Expand Down Expand Up @@ -110,24 +109,23 @@ func log(ctx context.Context, err error, startTime time.Time) {
"grpc.time_ms": float32(time.Since(startTime).Nanoseconds()/1000) / 1000,
}

msg := fmt.Sprintf("finished gRPC call with code %s", code.String())
l, extractErr := sdkcontext.Extract(ctx)
if extractErr == nil {
l = l.WithFields(fields)

switch level {
case sdklogger.Debug:
l.Debugf(msg)
l.Debugf("finished gRPC call with code %s", code.String())
case sdklogger.Info:
l.Infof(msg)
l.Infof("finished gRPC call with code %s", code.String())
case sdklogger.Warn:
l.Warnf(msg)
l.Warnf("finished gRPC call with code %s", code.String())
case sdklogger.Error:
l.Errorf(msg)
l.Errorf("finished gRPC call with code %s", code.String())
case sdklogger.Fatal:
l.Fatalf(msg)
l.Fatalf("finished gRPC call with code %s", code.String())
case sdklogger.Panic:
l.Panicf(msg)
l.Panicf("finished gRPC call with code %s", code.String())
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions pkg/interceptors/logger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ func TestLoggerUnaryServerInterceptors(t *testing.T) {
_, err = client.Ping(context.Background(), &mwitkow_testproto.PingRequest{Value: "test"})
assert.Nil(t, err)

var fieldsUnary map[string]interface{}
var fieldsUnary map[string]any
err = json.Unmarshal(buffer.Bytes(), &fieldsUnary)
require.Nil(t, err)

Expand Down Expand Up @@ -125,7 +125,7 @@ func TestLoggerStreamServerInterceptors(t *testing.T) {
}
assert.Nil(t, err)

var fieldsStream map[string]interface{}
var fieldsStream map[string]any
err = json.Unmarshal(buffer.Bytes(), &fieldsStream)
require.Nil(t, err)

Expand All @@ -143,7 +143,7 @@ func getLogger(logLevel string, buf *bytes.Buffer) (sdklogger.Logger, error) {
return sdklogger.NewBuilder(config).BuildTestLogger(buf)
}

func checkLoggerFields(t *testing.T, fields map[string]interface{}) {
func checkLoggerFields(t *testing.T, fields map[string]any) {
assert.NotEmpty(t, fields["message"])
assert.Equal(t, "info", fields["level"])
assert.NotEmpty(t, fields["timestamp"])
Expand All @@ -156,7 +156,7 @@ func checkLoggerFields(t *testing.T, fields map[string]interface{}) {
assert.NotEmpty(t, fields["grpc.time_ms"])
assert.NotEmpty(t, fields["grpc.request_id"])

var dd = (fields["dd"]).(map[string]interface{})
var dd = (fields["dd"]).(map[string]any)

assert.NotEmpty(t, dd["trace_id"])
assert.NotEmpty(t, dd["span_id"])
Expand Down
6 changes: 3 additions & 3 deletions pkg/interceptors/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ import (
func MetricsUnaryServerInterceptor(metrics sdkmetrics.Metrics) grpc.UnaryServerInterceptor {
return func(
ctx context.Context,
req interface{},
req any,
info *grpc.UnaryServerInfo,
handler grpc.UnaryHandler,
) (interface{}, error) {
) (any, error) {
newCtx := sdkcontext.ToContext(ctx, metrics)
return handler(newCtx, req)
}
Expand All @@ -26,7 +26,7 @@ func MetricsUnaryServerInterceptor(metrics sdkmetrics.Metrics) grpc.UnaryServerI
// MetricsStreamServerInterceptor returns a streaming server interceptor that adds sdkmetrics.Metrics to the context.
func MetricsStreamServerInterceptor(metrics sdkmetrics.Metrics) grpc.StreamServerInterceptor {
return func(
srv interface{},
srv any,
stream grpc.ServerStream,
info *grpc.StreamServerInfo,
handler grpc.StreamHandler,
Expand Down
2 changes: 1 addition & 1 deletion pkg/interceptors/recovery.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func RecoveryStreamServerInterceptor() grpc.StreamServerInterceptor {
}

var recoveryOption = []grpcrecovery.Option{
grpcrecovery.WithRecoveryHandlerContext(func(ctx context.Context, rec interface{}) (err error) {
grpcrecovery.WithRecoveryHandlerContext(func(ctx context.Context, rec any) (err error) {
l, err := sdkloggercontext.Extract(ctx)
if err != nil {
debug.PrintStack()
Expand Down
6 changes: 3 additions & 3 deletions pkg/interceptors/request_id.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ var RequestIDKey = "x-request-id"
func RequestIDUnaryServerInterceptor() grpc.UnaryServerInterceptor {
return func(
ctx context.Context,
req interface{},
req any,
info *grpc.UnaryServerInfo,
handler grpc.UnaryHandler,
) (interface{}, error) {
) (any, error) {
requestID := handleRequestID(ctx)

newCtx := requestid.ToContext(ctx, requestID)
Expand All @@ -32,7 +32,7 @@ func RequestIDUnaryServerInterceptor() grpc.UnaryServerInterceptor {

func RequestIDStreamServerInterceptor() grpc.StreamServerInterceptor {
return func(
srv interface{},
srv any,
stream grpc.ServerStream,
info *grpc.StreamServerInfo,
handler grpc.StreamHandler,
Expand Down
Loading
Loading