You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
You will need to create a `.custom-gcl.yml` file to describe the custom linters you want to run. The following is an example of a `.custom-gcl.yml` file:
33
+
You will need to create a `.custom-gcl.yml` file to describe the custom linters you want to run.
34
+
35
+
The following is an example of a `.custom-gcl.yml` file:
34
36
35
37
```yaml
36
-
version: v1.64.8
37
-
name: golangci-kube-api-linter
38
+
version: v2.5.0
39
+
name: golangci-lint-kube-api-linter
38
40
destination: ./bin
39
41
plugins:
40
-
- module: 'sigs.k8s.io/kube-api-linter'
41
-
version: 'v0.0.0'# Replace with the latest version
42
+
- module: 'sigs.k8s.io/kube-api-linter'
43
+
version: 'v0.0.0-20251029102002-9992248f8813'
44
+
```
45
+
46
+
**Important - Version Format**: Since this repository does not have releases yet, you must use a [pseudo-version](https://go.dev/ref/mod#pseudo-versions) in the format `v0.0.0-YYYYMMDDHHMMSS-commithash`.
47
+
48
+
To get the correct pseudo-version for the latest commit, run:
49
+
50
+
```bash
51
+
TZ=UTC git --no-pager show --quiet --abbrev=12 --date='format-local:%Y%m%d%H%M%S' --format="%cd-%h"
42
52
```
43
53
44
-
Once you have created the custom configuration file, you can run the following command to build the custom `golangci-kal` binary:
54
+
This will output a string like `20251029102002-9992248f8813`. Prepend `v0.0.0-` to form the complete version: `v0.0.0-20251029102002-9992248f8813`.
55
+
56
+
Once you have created the custom configuration file, you can run the following command to build the custom binary:
45
57
46
58
```shell
47
59
golangci-lint custom
48
60
```
49
61
50
-
The output binary will be a combination of the initial `golangci-lint` binary and the Kube API linter plugin.
51
-
This means that you can use any of the standard `golangci-lint` configuration or flags to run the binary, but may also include the Kube API Linter rules.
62
+
The output binary `./bin/golangci-lint-kube-api-linter` will be a combination of the `golangci-lint` binary with the Kube API Linter included as a module.
63
+
64
+
This means you can use any of the standard `golangci-lint` configuration or flags to run the binary, with the addition of the Kube API Linter rules.
52
65
53
66
If you wish to only use the Kube API Linter rules, you can configure your `.golangci.yml` file to only run the Kube API Linter:
54
67
55
68
```yaml
69
+
version: "2"
70
+
56
71
linters-settings:
57
72
custom:
58
73
kubeapilinter:
59
74
type: "module"
60
-
description: Kube API LInter lints Kube like APIs based on API conventions and best practices.
75
+
description: Kube API Linter lints Kube like APIs based on API conventions and best practices.
61
76
settings:
62
77
linters: {}
63
78
lintersConfig: {}
79
+
64
80
linters:
65
81
disable-all: true
66
82
enable:
@@ -77,6 +93,8 @@ issues:
77
93
If you wish to only run selected linters you can do so by specifying the linters you want to enable in the `linters` section:
78
94
79
95
```yaml
96
+
version: "2"
97
+
80
98
linters-settings:
81
99
custom:
82
100
kubeapilinter:
@@ -89,6 +107,10 @@ linters-settings:
89
107
- requiredfields
90
108
- statusoptional
91
109
- statussubresource
110
+
111
+
linters:
112
+
enable:
113
+
- kubeapilinter
92
114
```
93
115
94
116
The settings for Kube API Linter are based on the [GolangCIConfig][golangci-config-struct] struct and allow for finer control over the linter rules.
@@ -98,63 +120,85 @@ To provide further configuration, add the `custom.kubeapilinter` section to your
**Important**: The plugin must be built from the vendor directory, not directly from the module path.
139
+
140
+
**Step 1**: Ensure the module is in your project's vendor directory:
141
+
142
+
```shell
143
+
go mod vendor
144
+
```
145
+
146
+
**Step 2**: Build the plugin from the vendor directory:
147
+
116
148
```shell
117
-
go build -buildmode=plugin -o bin/kube-api-linter.so sigs.k8s.io/kube-api-linter/pkg/plugin
149
+
go build -mod=vendor -buildmode=plugin -o $(OUTPUT_DIR)/kube-api-linter.so ./vendor/sigs.k8s.io/kube-api-linter
118
150
```
119
151
120
-
This will create a `kube-api-linter.so` file in the `bin` directory.
152
+
Example - building into a `bin` directory:
153
+
154
+
```shell
155
+
go build -mod=vendor -buildmode=plugin -o bin/kube-api-linter.so ./vendor/sigs.k8s.io/kube-api-linter
156
+
```
121
157
122
-
The `golangci-lint` configuration is similar to the module configuration, however, you will need to specify the plugin path instead.
158
+
This will create a `kube-api-linter.so` plugin file in the `bin` directory.
159
+
160
+
The `golangci-lint` configuration is similar to the module configuration, however, you will need to specify the plugin path instead in your `.golangci.yml`:
123
161
124
162
```yaml
163
+
version: "2"
164
+
125
165
linters-settings:
126
166
custom:
127
167
kubeapilinter:
128
168
path: "bin/kube-api-linter.so"
129
-
description: Kube API LInter lints Kube like APIs based on API conventions and best practices.
169
+
description: Kube API Linter lints Kube like APIs based on API conventions and best practices.
130
170
original-url: sigs.k8s.io/kube-api-linter
131
171
settings:
132
172
linters: {}
133
173
lintersConfig: {}
174
+
175
+
linters:
176
+
enable:
177
+
- kubeapilinter
134
178
```
135
179
136
180
The rest of the configuration is the same as the module configuration, except the standard `golangci-lint` binary is invoked, rather than a custom binary.
137
181
138
182
#### VSCode integration
139
183
140
-
Since VSCode already integrates with `golangci-lint` via the [Go][vscode-go] extension, you can use the `golangci-kal` binary as a linter in VSCode.
184
+
Since VSCode already integrates with `golangci-lint` via the [Go][vscode-go] extension, you can use the custom `golangci-lint-kube-api-linter` binary as a linter in VSCode.
185
+
141
186
If your project authors are already using VSCode and have the configuration to lint their code when saving, this can be a seamless integration.
142
187
143
-
Ensure that your project setup includes building the `golangci-kube-api-linter` binary, and then configure the `go.lintTool` and `go.alternateTools` settings in your project `.vscode/settings.json` file.
188
+
Ensure that your project setup includes building the `golangci-lint-kube-api-linter` binary, then configure the `go.lintTool` and `go.alternateTools` settings in your project `.vscode/settings.json` file:
Alternatively, you can also replace the binary with a script that runs the `golangci-kube-api-linter` binary,
157
-
allowing for customisation or automatic copmilation of the project should it not already exist.
201
+
Alternatively, you can also replace the binary with a script that runs the `golangci-lint-kube-api-linter` binary, allowing for customization or automatic compilation of the project should it not already exist:
0 commit comments