Skip to content

Commit 2525ba1

Browse files
chore: Update golangci-lint version and add new linters (#1154)
Signed-off-by: jiangdong <[email protected]>
1 parent 420a603 commit 2525ba1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+436
-404
lines changed

.github/workflows/ci.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,9 +240,9 @@ jobs:
240240
cache: true
241241
cache-dependency-path: go/go.sum
242242
- name: golangci-lint
243-
uses: golangci/golangci-lint-action@v8
243+
uses: golangci/golangci-lint-action@v9
244244
with:
245-
version: v2.5.0
245+
version: v2.6.2
246246
working-directory: go
247247

248248
python-test:
@@ -331,4 +331,4 @@ jobs:
331331
git diff
332332
exit 1
333333
fi
334-
echo "✓ Controller manifests are up to date"
334+
echo "✓ Controller manifests are up to date"

go/.golangci.yaml

Lines changed: 100 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,102 @@
11
version: "2"
2-
2+
run:
3+
go: "1.25"
4+
timeout: 10m
5+
allow-parallel-runners: true
36
linters:
4-
# Default set of linters.
5-
# The value can be:
6-
# - `standard`: https://golangci-lint.run/docs/linters/#enabled-by-default
7-
# - `all`: enables all linters by default.
8-
# - `none`: disables all linters by default.
9-
# - `fast`: enables only linters considered as "fast" (`golangci-lint help linters --json | jq '[ .[] | select(.fast==true) ] | map(.name)'`).
10-
# Default: standard
11-
default: standard
7+
default: none
8+
enable:
9+
- asasalint
10+
- asciicheck
11+
- bidichk
12+
- copyloopvar
13+
- depguard
14+
- dogsled
15+
- goprintffuncname
16+
- govet
17+
- importas
18+
- ineffassign
19+
- iotamixing
20+
- makezero
21+
- misspell
22+
- modernize
23+
- nakedret
24+
- nolintlint
25+
- staticcheck
26+
- unused
27+
- whitespace
28+
settings:
29+
depguard:
30+
rules:
31+
forbid-pkg-errors:
32+
deny:
33+
- pkg: sort
34+
desc: Should be replaced with slices package
35+
govet:
36+
disable:
37+
- fieldalignment
38+
- shadow
39+
enable-all: true
40+
importas:
41+
alias:
42+
- pkg: k8s.io/api/core/v1
43+
alias: corev1
44+
- pkg: k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1
45+
alias: apiextensionsv1
46+
- pkg: k8s.io/apimachinery/pkg/apis/meta/v1
47+
alias: metav1
48+
- pkg: k8s.io/apimachinery/pkg/api/errors
49+
alias: apierrors
50+
- pkg: k8s.io/apimachinery/pkg/util/errors
51+
alias: kerrors
52+
no-unaliased: true
53+
modernize:
54+
disable:
55+
- omitzero
56+
- fmtappendf
57+
revive:
58+
rules:
59+
# The following rules are recommended https://github.com/mgechev/revive#recommended-configuration
60+
- name: blank-imports
61+
- name: context-as-argument
62+
- name: context-keys-type
63+
- name: dot-imports
64+
- name: error-return
65+
- name: error-strings
66+
- name: error-naming
67+
- name: exported
68+
- name: if-return
69+
- name: increment-decrement
70+
- name: var-naming
71+
- name: var-declaration
72+
- name: range
73+
- name: receiver-naming
74+
- name: time-naming
75+
- name: unexported-return
76+
- name: indent-error-flow
77+
- name: errorf
78+
- name: superfluous-else
79+
- name: unreachable-code
80+
- name: redefines-builtin-id
81+
#
82+
# Rules in addition to the recommended configuration above.
83+
#
84+
- name: bool-literal-in-expr
85+
- name: constant-logical-expr
86+
exclusions:
87+
generated: strict
88+
paths:
89+
- zz_generated.*\.go$
90+
- .*conversion.*\.go$
91+
issues:
92+
max-issues-per-linter: 0
93+
max-same-issues: 0
94+
formatters:
95+
enable:
96+
- gofmt
97+
- goimports
98+
exclusions:
99+
generated: strict
100+
paths:
101+
- zz_generated.*\.go$
102+
- .*conversion.*\.go$

go/cli/cmd/kagent/main.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,6 @@ Examples:
426426

427427
os.Exit(1)
428428
}
429-
430429
}
431430

432431
func runInteractive(cmd *cobra.Command, args []string) {

go/cli/internal/agent/frameworks/common/base_generator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,6 @@ func (g *BaseGenerator) GenerateProject(config AgentConfig) error {
6060

6161
// RenderTemplate renders a template string with the provided data.
6262
// This delegates to the shared generator implementation.
63-
func (g *BaseGenerator) RenderTemplate(tmplContent string, data interface{}) (string, error) {
63+
func (g *BaseGenerator) RenderTemplate(tmplContent string, data any) (string, error) {
6464
return g.BaseGenerator.RenderTemplate(tmplContent, data)
6565
}

go/cli/internal/cli/agent/bug_report.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ func BugReportCmd(cfg *config.Config) {
5555
if err != nil {
5656
fmt.Fprintf(os.Stderr, "Error getting pod names: %v\n", err)
5757
} else {
58-
pods := strings.Split(string(output), "\n")
59-
for _, pod := range pods {
58+
pods := strings.SplitSeq(string(output), "\n")
59+
for pod := range pods {
6060
if pod == "" {
6161
continue
6262
}

go/cli/internal/cli/agent/const.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const (
1212
DefaultModelProvider = v1alpha2.ModelProviderOpenAI
1313
DefaultHelmOciRegistry = "oci://ghcr.io/kagent-dev/kagent/helm/"
1414

15-
//Provider specific env variables
15+
// Provider specific env variables
1616
OPENAI_API_KEY = "OPENAI_API_KEY"
1717
ANTHROPIC_API_KEY = "ANTHROPIC_API_KEY"
1818
AZUREOPENAI_API_KEY = "AZUREOPENAI_API_KEY"
@@ -28,7 +28,6 @@ const (
2828
func GetModelProvider() v1alpha2.ModelProvider {
2929
modelProvider := os.Getenv(KAGENT_DEFAULT_MODEL_PROVIDER)
3030
if modelProvider == "" {
31-
3231
return DefaultModelProvider
3332
}
3433
switch modelProvider {

go/cli/internal/cli/agent/const_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ func TestGetModelProvider(t *testing.T) {
6464
if tc.envVarValue == "" {
6565
os.Unsetenv(KAGENT_DEFAULT_MODEL_PROVIDER) //nolint:errcheck
6666
} else {
67-
os.Setenv(KAGENT_DEFAULT_MODEL_PROVIDER, tc.expectedHelmKey) //nolint:errcheck
68-
defer os.Unsetenv(KAGENT_DEFAULT_MODEL_PROVIDER) //nolint:errcheck
67+
os.Setenv(KAGENT_DEFAULT_MODEL_PROVIDER, tc.expectedHelmKey)
68+
defer os.Unsetenv(KAGENT_DEFAULT_MODEL_PROVIDER) //nolint:errcheck
6969
}
7070

7171
result := GetModelProvider()

go/cli/internal/cli/agent/deploy.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import (
44
"bufio"
55
"context"
66
"fmt"
7+
"maps"
78
"os"
89
"regexp"
9-
"sort"
10+
"slices"
1011
"strings"
1112
"time"
1213

@@ -18,7 +19,7 @@ import (
1819
"github.com/kagent-dev/kmcp/api/v1alpha1"
1920
appsv1 "k8s.io/api/apps/v1"
2021
corev1 "k8s.io/api/core/v1"
21-
"k8s.io/apimachinery/pkg/api/errors"
22+
apierrors "k8s.io/apimachinery/pkg/api/errors"
2223
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2324
"k8s.io/apimachinery/pkg/runtime"
2425
"k8s.io/apimachinery/pkg/types"
@@ -246,7 +247,7 @@ func extractEnvVarsFromManifest(manifest *common.AgentManifest) []string {
246247
for varName := range envVarSet {
247248
envVars = append(envVars, varName)
248249
}
249-
sort.Strings(envVars)
250+
slices.Sort(envVars)
250251

251252
return envVars
252253
}
@@ -412,7 +413,7 @@ func createEnvFileSecret(ctx context.Context, k8sClient client.Client, namespace
412413
err := k8sClient.Get(ctx, client.ObjectKey{Namespace: namespace, Name: secretName}, existingSecret)
413414

414415
if err != nil {
415-
if errors.IsNotFound(err) {
416+
if apierrors.IsNotFound(err) {
416417
if err := k8sClient.Create(ctx, secret); err != nil {
417418
return fmt.Errorf("failed to create env file secret: %v", err)
418419
}
@@ -447,7 +448,7 @@ func waitForDeployment(ctx context.Context, k8sClient client.Client, namespace,
447448
for {
448449
select {
449450
case <-timeoutTimer.C:
450-
return nil, errors.NewNotFound(appsv1.Resource("deployment"), name)
451+
return nil, apierrors.NewNotFound(appsv1.Resource("deployment"), name)
451452
case <-ticker.C:
452453
err := k8sClient.Get(ctx, types.NamespacedName{
453454
Name: name,
@@ -461,7 +462,7 @@ func waitForDeployment(ctx context.Context, k8sClient client.Client, namespace,
461462
return deployment, nil
462463
}
463464

464-
if !errors.IsNotFound(err) {
465+
if !apierrors.IsNotFound(err) {
465466
return nil, fmt.Errorf("error checking for deployment: %v", err)
466467
}
467468
}
@@ -475,7 +476,7 @@ func restartAgentDeployment(ctx context.Context, k8sClient client.Client, cfg *D
475476

476477
_, err := waitForDeployment(ctx, k8sClient, namespace, deploymentName, 30*time.Second, cfg.Config)
477478
if err != nil {
478-
if errors.IsNotFound(err) {
479+
if apierrors.IsNotFound(err) {
479480
if IsVerbose(cfg.Config) {
480481
fmt.Printf("Deployment '%s' not found after timeout, it may still be being created by the controller\n", deploymentName)
481482
}
@@ -619,7 +620,7 @@ func createOrUpdateSecret(ctx context.Context, k8sClient client.Client, secret *
619620
}, existingSecret)
620621

621622
if err != nil {
622-
if errors.IsNotFound(err) {
623+
if apierrors.IsNotFound(err) {
623624
// Create new secret
624625
if err := k8sClient.Create(ctx, secret); err != nil {
625626
return fmt.Errorf("failed to create secret: %v", err)
@@ -713,7 +714,7 @@ func createOrUpdateAgent(ctx context.Context, k8sClient client.Client, agent *v1
713714
err := k8sClient.Get(ctx, client.ObjectKey{Namespace: namespace, Name: name}, existingAgent)
714715

715716
if err != nil {
716-
if errors.IsNotFound(err) {
717+
if apierrors.IsNotFound(err) {
717718
// Agent does not exist, create it
718719
if err := k8sClient.Create(ctx, agent); err != nil {
719720
return fmt.Errorf("failed to create agent: %v", err)
@@ -812,7 +813,7 @@ func createOrUpdateRemoteMCPServer(ctx context.Context, k8sClient client.Client,
812813
err := k8sClient.Get(ctx, client.ObjectKey{Namespace: namespace, Name: name}, existingRemoteMCPServer)
813814

814815
if err != nil {
815-
if errors.IsNotFound(err) {
816+
if apierrors.IsNotFound(err) {
816817
// Create new RemoteMCPServer
817818
if err := k8sClient.Create(ctx, remoteMCPServer); err != nil {
818819
return fmt.Errorf("failed to create RemoteMCPServer: %v", err)
@@ -900,7 +901,7 @@ func createOrUpdateMCPServer(ctx context.Context, k8sClient client.Client, mcpSe
900901
err := k8sClient.Get(ctx, client.ObjectKey{Namespace: namespace, Name: name}, existingMCPServer)
901902

902903
if err != nil {
903-
if errors.IsNotFound(err) {
904+
if apierrors.IsNotFound(err) {
904905
// Create new MCPServer
905906
if err := k8sClient.Create(ctx, mcpServerResource); err != nil {
906907
return fmt.Errorf("failed to create MCPServer: %v", err)
@@ -1086,7 +1087,7 @@ func createOrUpdateEnvSecret(ctx context.Context, k8sClient client.Client, names
10861087
err := k8sClient.Get(ctx, client.ObjectKey{Namespace: namespace, Name: secretName}, existingSecret)
10871088

10881089
if err != nil {
1089-
if errors.IsNotFound(err) {
1090+
if apierrors.IsNotFound(err) {
10901091
// Secret doesn't exist, create it with all data
10911092
secret := &corev1.Secret{
10921093
ObjectMeta: metav1.ObjectMeta{
@@ -1109,9 +1110,7 @@ func createOrUpdateEnvSecret(ctx context.Context, k8sClient client.Client, names
11091110
}
11101111

11111112
// Secret exists, merge the new data with existing data
1112-
for key, value := range secretData {
1113-
existingSecret.Data[key] = value
1114-
}
1113+
maps.Copy(existingSecret.Data, secretData)
11151114

11161115
if err := k8sClient.Update(ctx, existingSecret); err != nil {
11171116
return fmt.Errorf("failed to update existing secret: %v", err)

go/cli/internal/cli/agent/format.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ const (
1717
OutputFormatTable OutputFormat = "table"
1818
)
1919

20-
func printOutput(data interface{}, tableHeaders []string, tableRows [][]string) error {
20+
func printOutput(data any, tableHeaders []string, tableRows [][]string) error {
2121
format := OutputFormat(viper.GetString("output_format"))
2222

2323
tw := table.NewWriter()
24-
headers := slices.Collect(utils.Map(slices.Values(tableHeaders), func(header string) interface{} {
24+
headers := slices.Collect(utils.Map(slices.Values(tableHeaders), func(header string) any {
2525
return header
2626
}))
2727
tw.AppendHeader(headers)
2828
rows := slices.Collect(utils.Map(slices.Values(tableRows), func(row []string) table.Row {
29-
return slices.Collect(utils.Map(slices.Values(row), func(cell string) interface{} {
29+
return slices.Collect(utils.Map(slices.Values(row), func(cell string) any {
3030
return cell
3131
}))
3232
}))
@@ -43,7 +43,7 @@ func printOutput(data interface{}, tableHeaders []string, tableRows [][]string)
4343
}
4444
}
4545

46-
func printJSON(data interface{}) error {
46+
func printJSON(data any) error {
4747
output, err := json.MarshalIndent(data, "", " ")
4848
if err != nil {
4949
return fmt.Errorf("error formatting JSON: %w", err)

go/cli/internal/cli/agent/get.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func GetAgentCmd(cfg *config.Config, resourceName string) {
4040
return
4141
}
4242
byt, _ := json.MarshalIndent(agent, "", " ")
43-
fmt.Fprintln(os.Stdout, string(byt)) //nolint:errcheck
43+
fmt.Fprintln(os.Stdout, string(byt))
4444
}
4545
}
4646

@@ -69,7 +69,7 @@ func GetSessionCmd(cfg *config.Config, resourceName string) {
6969
return
7070
}
7171
byt, _ := json.MarshalIndent(session, "", " ")
72-
fmt.Fprintln(os.Stdout, string(byt)) //nolint:errcheck
72+
fmt.Fprintln(os.Stdout, string(byt))
7373
}
7474
}
7575

0 commit comments

Comments
 (0)