Skip to content

Commit ae150df

Browse files
committed
Incorporate golangci-lint linter
1 parent ca90576 commit ae150df

12 files changed

+80
-26
lines changed

.golangci.yml

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
linters:
2+
enable-all: true
3+
disable:
4+
- funlen
5+
- gochecknoinits
6+
- wsl
7+
- exhaustruct
8+
- execinquery
9+
- exportloopref
10+
- gomnd
11+
- copyloopvar
12+
- intrange
13+
- gochecknoglobals
14+
- wrapcheck
15+
- err113
16+
- depguard
17+
- mnd
18+
- lll
19+
- cyclop
20+
- revive
21+
- godox
22+
- gofumpt
23+
- gosec
24+
- contextcheck
25+
- forbidigo

cmd/main.go

+17-10
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package cmd
1616

1717
import (
18+
"errors"
1819
"fmt"
1920
"log"
2021
"os"
@@ -25,22 +26,27 @@ import (
2526
"runecs.io/v1/pkg/ecs"
2627
)
2728

28-
var service string
29+
const (
30+
defaultLastNumberOfTasks = 50
31+
defaultLastDays = 0
32+
)
2933

3034
var rootCmd = &cobra.Command{
3135
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
3236
commandsWithoutService := []string{"completion", "help", "list", "version"}
37+
serviceValue := cmd.Flag("service").Value.String()
3338

3439
serviceRequired := true
3540
for _, c := range commandsWithoutService {
3641
if cmd.Name() == c {
3742
serviceRequired = false
43+
3844
break
3945
}
4046
}
4147

42-
if serviceRequired && service == "" {
43-
return fmt.Errorf("--service flag is required for this command")
48+
if serviceRequired && serviceValue == "" {
49+
return errors.New("--service flag is required for this command")
4450
}
4551

4652
return nil
@@ -90,8 +96,8 @@ func init() {
9096
}
9197

9298
pruneCmd.PersistentFlags().BoolP("dry-run", "", false, "dry run")
93-
pruneCmd.PersistentFlags().IntP("keep-last", "", 50, "keep last N task definitions")
94-
pruneCmd.PersistentFlags().IntP("keep-days", "", 0, "keep task definitions older than N days")
99+
pruneCmd.PersistentFlags().IntP("keep-last", "", defaultLastNumberOfTasks, "keep last N task definitions")
100+
pruneCmd.PersistentFlags().IntP("keep-days", "", defaultLastDays, "keep task definitions older than N days")
95101
rootCmd.AddCommand(pruneCmd)
96102

97103
////////////
@@ -104,7 +110,7 @@ func init() {
104110
DisableFlagsInUseLine: true,
105111
PreRunE: func(cmd *cobra.Command, args []string) error {
106112
if dockerImageTag == "" {
107-
return fmt.Errorf("--image-tag flag is required")
113+
return errors.New("--image-tag flag is required")
108114
}
109115

110116
return nil
@@ -205,18 +211,19 @@ func init() {
205211
rootCmd.AddCommand(completionCmd)
206212

207213
rootCmd.CompletionOptions.DisableDefaultCmd = true
208-
rootCmd.PersistentFlags().StringVar(&service, "service", "", "service name (cluster/service)")
214+
rootCmd.PersistentFlags().String("service", "", "service name (cluster/service)")
209215
}
210216

211217
func initService() *ecs.Service {
212218
svc := ecs.Service{}
219+
serviceValue := rootCmd.Flag("service").Value.String()
213220

214-
parsed := strings.Split(service, "/")
221+
parsed := strings.Split(serviceValue, "/")
215222
if len(parsed) == 2 {
216223
svc.Cluster = parsed[0]
217224
svc.Service = parsed[1]
218-
} else if service != "" {
219-
log.Fatalf("Invalid service name %s\n", service)
225+
} else if serviceValue != "" {
226+
log.Fatalf("Invalid service name %s\n", serviceValue)
220227
}
221228

222229
validate := validator.New()

main.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
// Package herrors contains common Hugo errors and error related utilities.
1515
package main
1616

17-
import "runecs.io/v1/cmd"
17+
import (
18+
"runecs.io/v1/cmd"
19+
)
1820

1921
var (
2022
version = "No version provided"

pkg/ecs/deploy.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package ecs
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"log"
78
"strings"
@@ -20,7 +21,7 @@ func (s *Service) cloneTaskDef(ctx context.Context, dockerImageTag string, svc *
2021
// Load the latest task definition.
2122
latestDef, err := s.latestTaskDefinition(ctx, svc)
2223
if err != nil {
23-
return "", nil
24+
return "", err
2425
}
2526

2627
response, err := svc.DescribeTaskDefinition(ctx, &ecs.DescribeTaskDefinitionInput{
@@ -32,7 +33,7 @@ func (s *Service) cloneTaskDef(ctx context.Context, dockerImageTag string, svc *
3233
}
3334

3435
if len(response.TaskDefinition.ContainerDefinitions) > 1 {
35-
return "", fmt.Errorf("multiple container definitions in a single task are not supported")
36+
return "", errors.New("multiple container definitions in a single task are not supported")
3637
}
3738

3839
newDef := &ecs.RegisterTaskDefinitionInput{}

pkg/ecs/exec.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,10 @@ func (s *Service) Execute(cmd []string, wait bool, dockerImageTag string) {
116116
if err != nil {
117117
log.Fatalln(err)
118118
}
119-
log.Printf("New task definition %s is created", taskDef)
119+
fmt.Printf("New task definition %s is created", taskDef)
120120
} else {
121121
taskDef = sdef.TaskDef
122-
log.Printf("The task definition %s is used", taskDef)
122+
fmt.Printf("The task definition %s is used", taskDef)
123123
}
124124

125125
output, err := svc.RunTask(ctx, &ecs.RunTaskInput{
@@ -166,6 +166,6 @@ func (s *Service) Execute(cmd []string, wait bool, dockerImageTag string) {
166166
time.Sleep(6 * time.Second)
167167
}
168168

169-
log.Printf("task %s finished", *executedTask.TaskArn)
169+
fmt.Printf("task %s finished", *executedTask.TaskArn)
170170
}
171171
}

pkg/ecs/list.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import (
1212
func (s *Service) listClusters(ctx context.Context, svc *ecs.Client) []string {
1313
response, err := svc.ListClusters(ctx, &ecs.ListClustersInput{})
1414
if err != nil {
15-
log.Println(fmt.Errorf("failed to list clusters. (%v)", err))
15+
log.Println(fmt.Errorf("failed to list clusters. (%w)", err))
16+
1617
return []string{}
1718
}
1819

@@ -25,7 +26,8 @@ func (s *Service) listServices(ctx context.Context, svc *ecs.Client, cluster str
2526
})
2627

2728
if err != nil {
28-
log.Println(fmt.Errorf("failed to list services in cluster %s. (%v)", cluster, err))
29+
log.Println(fmt.Errorf("failed to list services in cluster %s. (%w)", cluster, err))
30+
2931
return []string{}
3032
}
3133

@@ -44,6 +46,7 @@ func (s *Service) List() {
4446

4547
svc := ecs.NewFromConfig(cfg)
4648
clusters := s.listClusters(ctx, svc)
49+
4750
for _, clusterArn := range clusters {
4851
services := s.listServices(ctx, svc, clusterArn)
4952
for _, serviceArn := range services {
@@ -53,6 +56,7 @@ func (s *Service) List() {
5356
}
5457

5558
fmt.Println()
59+
5660
for _, link := range links {
5761
fmt.Println(link)
5862
}

pkg/ecs/logs.go

+9-5
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,28 @@ import (
99
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs"
1010
)
1111

12-
func (s *Service) printProcessLogs(ctx context.Context, logGroupname string, logStreamPrefix string, taskArn string, name string) error {
12+
func (s *Service) printProcessLogs(
13+
ctx context.Context, logGroupname string,
14+
logStreamPrefix string,
15+
taskArn string,
16+
name string) error {
1317
log.Printf("Loading logs for %s: %s", logGroupname, taskArn)
1418

1519
cfg, err := s.initCfg()
1620
if err != nil {
17-
return fmt.Errorf("failed to initialize AWS configuration. (%v)", err)
21+
return fmt.Errorf("failed to initialize AWS configuration. (%w)", err)
1822
}
1923

20-
processId := extractProcessId(taskArn)
24+
processID := extractProcessID(taskArn)
2125
client := cloudwatchlogs.NewFromConfig(cfg)
2226

2327
output, err := client.FilterLogEvents(ctx, &cloudwatchlogs.FilterLogEventsInput{
2428
LogGroupName: aws.String(logGroupname),
25-
LogStreamNames: []string{fmt.Sprintf("%s/%s/%s", logStreamPrefix, name, processId)},
29+
LogStreamNames: []string{fmt.Sprintf("%s/%s/%s", logStreamPrefix, name, processID)},
2630
})
2731

2832
if err != nil {
29-
return fmt.Errorf("failed to filter log events (%v)", err)
33+
return fmt.Errorf("failed to filter log events (%w)", err)
3034
}
3135

3236
for _, event := range output.Events {

pkg/ecs/prune.go

+5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func (s *Service) deregisterTaskFamily(ctx context.Context, family string, keepL
3737

3838
if err != nil {
3939
log.Printf("Failed to describe task definition %s. (%v)\n", def, err)
40+
4041
continue
4142
}
4243

@@ -46,11 +47,13 @@ func (s *Service) deregisterTaskFamily(ctx context.Context, family string, keepL
4647
if keep < keepLast {
4748
fmt.Println("Task definition", def, "created", diffInDays, "days ago is skipped.")
4849
keep++
50+
4951
continue
5052
}
5153

5254
if diffInDays < keepDays {
5355
fmt.Println("Task definition", def, "created", diffInDays, "days ago is skipped.")
56+
5457
continue
5558
}
5659

@@ -60,6 +63,7 @@ func (s *Service) deregisterTaskFamily(ctx context.Context, family string, keepL
6063
_, err := svc.DeregisterTaskDefinition(ctx, &ecs.DeregisterTaskDefinitionInput{TaskDefinition: &def})
6164
if err != nil {
6265
fmt.Printf("Deregistering the task definition %s failed. (%v)\n", def, err)
66+
6367
continue
6468
}
6569

@@ -76,6 +80,7 @@ func (s *Service) deregisterTaskFamily(ctx context.Context, family string, keepL
7680

7781
if dryRun {
7882
fmt.Printf("Total of %d task definitions. Will delete %d definitions.", totalCount, deleted)
83+
7984
return
8085
}
8186

pkg/ecs/restart.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ func (s *Service) stopAll(ctx context.Context, client *ecs.Client) error {
2424
Task: &taskArn,
2525
})
2626
if err != nil {
27-
log.Println(fmt.Errorf("failed to stop task %s. (%v)", taskArn, err))
27+
log.Println(fmt.Errorf("failed to stop task %s. (%w)", taskArn, err))
28+
2829
continue
2930
}
3031

pkg/ecs/revision.go

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ func (s *Service) printRevisions(ctx context.Context, familyPrefix string, lastR
9494

9595
if err != nil {
9696
log.Printf("Failed to describe task definition %s. (%v)\n", def, err)
97+
9798
continue
9899
}
99100

pkg/ecs/service.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ import (
2424
"github.com/aws/aws-sdk-go-v2/service/ecs/types"
2525
)
2626

27+
const (
28+
defaultNumberOfRetries = 10
29+
)
30+
2731
// ECS parameters that are used to run jobs.
2832
type Service struct {
2933
Cluster string `mapstructure:"CLUSTER"`
@@ -46,7 +50,7 @@ func (s *Service) loadService(ctx context.Context, svc *ecs.Client) (types.Servi
4650
func (s *Service) initCfg() (aws.Config, error) {
4751
configFunctions := []func(*config.LoadOptions) error{
4852
config.WithRetryer(func() aws.Retryer {
49-
return retry.AddWithMaxAttempts(retry.NewStandard(), 10)
53+
return retry.AddWithMaxAttempts(retry.NewStandard(), defaultNumberOfRetries)
5054
}),
5155
}
5256

pkg/ecs/utils.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package ecs
22

33
import "strings"
44

5-
func extractProcessId(taskArn string) string {
5+
func extractProcessID(taskArn string) string {
66
lastSlashIndex := strings.LastIndex(taskArn, "/")
77
if lastSlashIndex != -1 {
88
return taskArn[lastSlashIndex+1:]

0 commit comments

Comments
 (0)