Skip to content

Commit 68b1daf

Browse files
authored
Apply stricter lint config (#1233)
1 parent af932d4 commit 68b1daf

31 files changed

Lines changed: 1056 additions & 375 deletions

.golangci.yml

Lines changed: 407 additions & 9 deletions
Large diffs are not rendered by default.

build/go-tasks.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,11 @@ var goBuild = goyek.Define(goyek.Task{
4848
},
4949
Deps: []*goyek.DefinedTask{mkdirBin},
5050
})
51+
52+
var goModTidyDiff = goyek.Define(goyek.Task{
53+
Name: "go-mod-tidy",
54+
Usage: "go mod tidy",
55+
Action: func(a *goyek.A) {
56+
cmd.Exec(a, "go mod tidy -diff")
57+
},
58+
})

build/main.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ import (
55
"github.com/goyek/x/boot"
66
)
77

8-
func init() {
9-
goyek.SetDefault(pipelineAll)
10-
}
11-
128
func main() {
9+
goyek.SetDefault(pipelineAll)
1310
boot.Main()
1411
}

build/stages.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ var stageTest = goyek.Define(goyek.Task{
1414
Name: "test",
1515
Usage: "test stage",
1616
Deps: goyek.Deps{
17-
golangciLint,
1817
goTest,
18+
golangciLint,
19+
goModTidyDiff,
1920
},
2021
})
2122

cmd/aws_finder/cloudfront.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,34 @@ package main
33
import (
44
"context"
55
"iter"
6-
"log"
76
"slices"
87

98
"github.com/aws/aws-sdk-go-v2/aws"
109
"github.com/aws/aws-sdk-go-v2/service/cloudfront"
1110
"github.com/aws/aws-sdk-go-v2/service/cloudfront/types"
1211
"github.com/spf13/cobra"
1312
"github.com/wjam/aws_finder/internal/finder"
13+
"github.com/wjam/aws_finder/internal/log"
1414
)
1515

16-
func init() {
17-
commands = append(commands, &cobra.Command{
16+
func cloudfrontCmd() *cobra.Command {
17+
return &cobra.Command{
1818
Use: "cloudfront [needle]",
1919
Short: "Find CloudFront distributions by domain",
20-
Args: cobra.RangeArgs(1, 2),
20+
Args: cobra.ExactArgs(1),
2121
RunE: func(cmd *cobra.Command, args []string) error {
22-
return finder.SearchPerProfile(cmd.Context(), cmd.OutOrStdout(), func(ctx context.Context, l *log.Logger, conf aws.Config) error {
23-
return findCloudFrontDistributions(ctx, args[0], l, cloudfront.NewFromConfig(conf))
24-
})
22+
return finder.SearchPerProfile(
23+
cmd.Context(),
24+
func(ctx context.Context, conf aws.Config) error {
25+
return findCloudFrontDistributions(ctx, args[0], cloudfront.NewFromConfig(conf))
26+
})
2527
},
26-
})
28+
}
2729
}
2830

29-
func findCloudFrontDistributions(ctx context.Context, needle string, l *log.Logger, client cloudfront.ListDistributionsAPIClient) error {
31+
func findCloudFrontDistributions(
32+
ctx context.Context, needle string, client cloudfront.ListDistributionsAPIClient,
33+
) error {
3034
pages := cloudfront.NewListDistributionsPaginator(client, nil)
3135

3236
seq := paginatorToSeq(ctx, pages, cloudfrontListToItems)
@@ -36,10 +40,10 @@ func findCloudFrontDistributions(ctx context.Context, needle string, l *log.Logg
3640

3741
for dist, err := range seq {
3842
if err != nil {
39-
return logError("failed to query distributions", err, l)
43+
return err
4044
}
4145

42-
l.Println(aws.ToString(dist.Id))
46+
log.Logger(ctx).InfoContext(ctx, aws.ToString(dist.Id))
4347
}
4448

4549
return nil

cmd/aws_finder/cloudfront_test.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ package main
33
import (
44
"bytes"
55
"context"
6+
"errors"
67
"fmt"
7-
"log"
8+
"log/slog"
89
"strconv"
910
"testing"
1011

@@ -13,6 +14,7 @@ import (
1314
"github.com/aws/aws-sdk-go-v2/service/cloudfront/types"
1415
"github.com/stretchr/testify/assert"
1516
"github.com/stretchr/testify/require"
17+
"github.com/wjam/aws_finder/internal/log"
1618
)
1719

1820
func TestFindCloudFrontDistributions(t *testing.T) {
@@ -99,8 +101,15 @@ func TestFindCloudFrontDistributions(t *testing.T) {
99101
for _, test := range tests {
100102
t.Run(test.needle, func(t *testing.T) {
101103
var buf bytes.Buffer
102-
require.NoError(t, findCloudFrontDistributions(t.Context(), test.needle, log.New(&buf, "", 0), &distributions{test.distributions}))
103-
assert.Equal(t, fmt.Sprintf("%s\n", test.expected), buf.String())
104+
105+
ctx := log.ContextWithLogger(t.Context(), slog.New(log.WithAttrsFromContextHandler{
106+
Parent: slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}),
107+
IgnoredAttributes: []string{"time"},
108+
}))
109+
110+
err := findCloudFrontDistributions(ctx, test.needle, &distributions{test.distributions})
111+
require.NoError(t, err)
112+
assert.Equal(t, fmt.Sprintf("level=INFO msg=%s\n", test.expected), buf.String())
104113
})
105114
}
106115
}
@@ -111,9 +120,11 @@ type distributions struct {
111120
distributions [][]types.DistributionSummary
112121
}
113122

114-
func (d *distributions) ListDistributions(ctx context.Context, _ *cloudfront.ListDistributionsInput, _ ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsOutput, error) {
123+
func (d *distributions) ListDistributions(
124+
ctx context.Context, _ *cloudfront.ListDistributionsInput, _ ...func(*cloudfront.Options),
125+
) (*cloudfront.ListDistributionsOutput, error) {
115126
if ctx == nil {
116-
return nil, fmt.Errorf("missing context")
127+
return nil, errors.New("missing context")
117128
}
118129

119130
var value []types.DistributionSummary

cmd/aws_finder/flags.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log/slog"
6+
7+
"github.com/spf13/pflag"
8+
)
9+
10+
var _ pflag.Value = &logLevelFlag{}
11+
12+
type logLevelFlag struct {
13+
level slog.Level
14+
}
15+
16+
func (l *logLevelFlag) String() string {
17+
return l.level.String()
18+
}
19+
20+
func (l *logLevelFlag) Set(s string) error {
21+
return l.level.UnmarshalText([]byte(s))
22+
}
23+
24+
func (l *logLevelFlag) Type() string {
25+
return fmt.Sprintf("%s|%s|%s|%s", slog.LevelDebug, slog.LevelInfo, slog.LevelWarn, slog.LevelError)
26+
}

cmd/aws_finder/instance.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,33 @@ package main
33
import (
44
"context"
55
"iter"
6-
"log"
76
"slices"
87
"strings"
98

109
"github.com/aws/aws-sdk-go-v2/aws"
1110
"github.com/aws/aws-sdk-go-v2/service/ec2"
1211
"github.com/aws/aws-sdk-go-v2/service/ec2/types"
13-
1412
"github.com/spf13/cobra"
1513
"github.com/wjam/aws_finder/internal/finder"
14+
"github.com/wjam/aws_finder/internal/log"
1615
)
1716

18-
func init() {
19-
commands = append(commands, &cobra.Command{
17+
func instanceCmd() *cobra.Command {
18+
return &cobra.Command{
2019
Use: "instance [needle]",
2120
Short: "Find an instance by type, AMI or ip address",
2221
Args: cobra.ExactArgs(1),
2322
RunE: func(cmd *cobra.Command, args []string) error {
24-
return finder.SearchPerRegion(cmd.Context(), cmd.OutOrStdout(), func(ctx context.Context, l *log.Logger, conf aws.Config) error {
25-
return findInstances(ctx, args[0], l, ec2.NewFromConfig(conf))
26-
})
23+
return finder.SearchPerRegion(
24+
cmd.Context(),
25+
func(ctx context.Context, conf aws.Config) error {
26+
return findInstances(ctx, args[0], ec2.NewFromConfig(conf))
27+
})
2728
},
28-
})
29+
}
2930
}
3031

31-
func findInstances(ctx context.Context, needle string, l *log.Logger, client ec2.DescribeInstancesAPIClient) error {
32+
func findInstances(ctx context.Context, needle string, client ec2.DescribeInstancesAPIClient) error {
3233
pages := ec2.NewDescribeInstancesPaginator(client, nil)
3334

3435
seq := paginatorToSeq(ctx, pages, ec2DescribeInstancesToInstances)
@@ -38,10 +39,10 @@ func findInstances(ctx context.Context, needle string, l *log.Logger, client ec2
3839

3940
for instance, err := range seq {
4041
if err != nil {
41-
return logError("failed to query instances", err, l)
42+
return err
4243
}
4344

44-
l.Println(aws.ToString(instance.InstanceId))
45+
log.Logger(ctx).InfoContext(ctx, aws.ToString(instance.InstanceId))
4546
}
4647

4748
return nil

cmd/aws_finder/instance_test.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ package main
33
import (
44
"bytes"
55
"context"
6+
"errors"
67
"fmt"
7-
"log"
8+
"log/slog"
89
"strconv"
910
"testing"
1011

@@ -13,6 +14,7 @@ import (
1314
"github.com/aws/aws-sdk-go-v2/service/ec2/types"
1415
"github.com/stretchr/testify/assert"
1516
"github.com/stretchr/testify/require"
17+
"github.com/wjam/aws_finder/internal/log"
1618
)
1719

1820
func TestFindInstance(t *testing.T) {
@@ -179,8 +181,14 @@ func TestFindInstance(t *testing.T) {
179181
for _, test := range tests {
180182
t.Run(test.needle, func(t *testing.T) {
181183
var buf bytes.Buffer
182-
require.NoError(t, findInstances(t.Context(), test.needle, log.New(&buf, "", 0), &instances{test.reservations}))
183-
assert.Equal(t, fmt.Sprintf("%s\n", test.expected), buf.String())
184+
185+
ctx := log.ContextWithLogger(t.Context(), slog.New(log.WithAttrsFromContextHandler{
186+
Parent: slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}),
187+
IgnoredAttributes: []string{"time"},
188+
}))
189+
190+
require.NoError(t, findInstances(ctx, test.needle, &instances{test.reservations}))
191+
assert.Equal(t, fmt.Sprintf("level=INFO msg=%s\n", test.expected), buf.String())
184192
})
185193
}
186194
}
@@ -191,9 +199,11 @@ type instances struct {
191199
reservations [][]types.Reservation
192200
}
193201

194-
func (i *instances) DescribeInstances(ctx context.Context, _ *ec2.DescribeInstancesInput, _ ...func(*ec2.Options)) (*ec2.DescribeInstancesOutput, error) {
202+
func (i *instances) DescribeInstances(
203+
ctx context.Context, _ *ec2.DescribeInstancesInput, _ ...func(*ec2.Options),
204+
) (*ec2.DescribeInstancesOutput, error) {
195205
if ctx == nil {
196-
return nil, fmt.Errorf("missing context")
206+
return nil, errors.New("missing context")
197207
}
198208

199209
var value []types.Reservation

cmd/aws_finder/loggroup.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,35 @@ package main
33
import (
44
"context"
55
"iter"
6-
"log"
76
"slices"
87
"strings"
98

109
"github.com/aws/aws-sdk-go-v2/aws"
1110
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs"
1211
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs/types"
13-
1412
"github.com/spf13/cobra"
1513
"github.com/wjam/aws_finder/internal/finder"
14+
"github.com/wjam/aws_finder/internal/log"
1615
)
1716

18-
func init() {
19-
commands = append(commands, &cobra.Command{
17+
func logGroupCmd() *cobra.Command {
18+
return &cobra.Command{
2019
Use: "log_group [needle]",
2120
Short: "Find a CloudWatch log group by name",
2221
Args: cobra.ExactArgs(1),
2322
RunE: func(cmd *cobra.Command, args []string) error {
24-
return finder.SearchPerRegion(cmd.Context(), cmd.OutOrStdout(), func(ctx context.Context, l *log.Logger, conf aws.Config) error {
25-
return findLogGroup(ctx, args[0], l, cloudwatchlogs.NewFromConfig(conf))
26-
})
23+
return finder.SearchPerRegion(
24+
cmd.Context(),
25+
func(ctx context.Context, conf aws.Config) error {
26+
return findLogGroup(ctx, args[0], cloudwatchlogs.NewFromConfig(conf))
27+
})
2728
},
28-
})
29+
}
2930
}
3031

31-
func findLogGroup(ctx context.Context, needle string, l *log.Logger, client cloudwatchlogs.DescribeLogGroupsAPIClient) error {
32+
func findLogGroup(
33+
ctx context.Context, needle string, client cloudwatchlogs.DescribeLogGroupsAPIClient,
34+
) error {
3235
pages := cloudwatchlogs.NewDescribeLogGroupsPaginator(client, nil)
3336

3437
seq := paginatorToSeq(ctx, pages, logGroupListToItems)
@@ -38,10 +41,10 @@ func findLogGroup(ctx context.Context, needle string, l *log.Logger, client clou
3841

3942
for g, err := range seq {
4043
if err != nil {
41-
return logError("failed to query instances", err, l)
44+
return err
4245
}
4346

44-
l.Println(aws.ToString(g.LogGroupName))
47+
log.Logger(ctx).InfoContext(ctx, aws.ToString(g.LogGroupName))
4548
}
4649

4750
return nil

0 commit comments

Comments
 (0)