Skip to content

Commit eff876c

Browse files
authored
Merge pull request #175 from krishagarwal278/KAL-45
docs: Fix installation instructions for golangci-lint v2 compatibility
2 parents 7dea50a + 9ad19ec commit eff876c

File tree

2 files changed

+43
-20
lines changed

2 files changed

+43
-20
lines changed

.custom-gcl.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
version: v2.0.2
2-
name: golangci-kube-api-linter
1+
version: v2.5.0
2+
name: golangci-lint-kube-api-linter
33
destination: ./bin
44
plugins:
55
- module: 'sigs.k8s.io/kube-api-linter'

README.md

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,42 +25,49 @@ under `linter-settings`.
2525

2626
### Golangci-lint Module
2727

28-
To install the `golangci-lint` module, first you must have `golangci-lint` installed.
28+
To install the `golangci-lint` module, first you must have `golangci-lint` v2 installed.
2929
If you do not have `golangci-lint` installed, review the `golangci-lint` [install guide][golangci-lint-install].
3030

3131
[golangci-lint-install]: https://golangci-lint.run/welcome/install/
3232

3333
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:
3434

3535
```yaml
36-
version: v1.64.8
37-
name: golangci-kube-api-linter
36+
version: v2.5.0
37+
name: golangci-lint-kube-api-linter
3838
destination: ./bin
3939
plugins:
4040
- module: 'sigs.k8s.io/kube-api-linter'
41-
version: 'v0.0.0' # Replace with the latest version
41+
version: 'v0.0.0-20251029102002-9992248f8813'
4242
```
4343
44-
Once you have created the custom configuration file, you can run the following command to build the custom `golangci-kal` binary:
44+
**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`.
45+
46+
To find the latest version listed, check [pkg.go.dev/sigs.k8s.io/kube-api-linter?tab=versions](https://pkg.go.dev/sigs.k8s.io/kube-api-linter?tab=versions)
47+
48+
Once you have created the custom configuration file, you can run the following command to build the custom binary:
4549

4650
```shell
4751
golangci-lint custom
4852
```
4953

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.
54+
The output binary will be created at the location specified by the `destination` field in `.custom-gcl.yml` and will be a combination of the `golangci-lint` binary with the Kube API Linter included as a module.
55+
56+
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.
5257

5358
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:
5459

5560
```yaml
61+
version: "2"
5662
linters-settings:
5763
custom:
5864
kubeapilinter:
5965
type: "module"
60-
description: Kube API LInter lints Kube like APIs based on API conventions and best practices.
66+
description: Kube API Linter lints Kube like APIs based on API conventions and best practices.
6167
settings:
6268
linters: {}
6369
lintersConfig: {}
70+
6471
linters:
6572
disable-all: true
6673
enable:
@@ -77,6 +84,7 @@ issues:
7784
If you wish to only run selected linters you can do so by specifying the linters you want to enable in the `linters` section:
7885

7986
```yaml
87+
version: "2"
8088
linters-settings:
8189
custom:
8290
kubeapilinter:
@@ -89,6 +97,9 @@ linters-settings:
8997
- requiredfields
9098
- statusoptional
9199
- statussubresource
100+
linters:
101+
enable:
102+
- kubeapilinter
92103
```
93104

94105
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,10 +109,10 @@ To provide further configuration, add the `custom.kubeapilinter` section to your
98109

99110
[golangci-config-struct]: https://pkg.go.dev/sigs.k8s.io/kube-api-linter/pkg/config#GolangCIConfig
100111

101-
Where fixes are available within a rule, these can be applied automatically with the `--fix` flag.
112+
Where fixes are available within a rule, these can be applied automatically with the `--fix` flag:
102113

103114
```shell
104-
golangci-kube-api-linter run path/to/api/types --fix
115+
golangci-lint-kube-api-linter run path/to/api/types --fix
105116
```
106117

107118
### Golangci-lint Plugin
@@ -113,48 +124,60 @@ More information about golangci-lint plugins can be found in the [golangci-lint
113124

114125
[golangci-lint-plugin-docs]: https://golangci-lint.run/plugins/go-plugins/
115126

127+
To build the plugin, use the `-buildmode=plugin` flag:
128+
116129
```shell
117130
go build -buildmode=plugin -o bin/kube-api-linter.so sigs.k8s.io/kube-api-linter/pkg/plugin
118131
```
119132

120-
This will create a `kube-api-linter.so` file in the `bin` directory.
133+
**Note**: If you're building the plugin from within another project that vendors kube-api-linter, use the vendor path:
121134

122-
The `golangci-lint` configuration is similar to the module configuration, however, you will need to specify the plugin path instead.
135+
```shell
136+
go build -mod=vendor -buildmode=plugin -o bin/kube-api-linter.so ./vendor/sigs.k8s.io/kube-api-linter/pkg/plugin
137+
```
138+
139+
This will create a `kube-api-linter.so` plugin file in the specified directory.
140+
141+
The `golangci-lint` configuration is similar to the module configuration, however, you will need to specify the plugin path instead in your `.golangci.yml`:
123142

124143
```yaml
144+
version: "2"
125145
linters-settings:
126146
custom:
127147
kubeapilinter:
128148
path: "bin/kube-api-linter.so"
129-
description: Kube API LInter lints Kube like APIs based on API conventions and best practices.
149+
description: Kube API Linter lints Kube like APIs based on API conventions and best practices.
130150
original-url: sigs.k8s.io/kube-api-linter
131151
settings:
132152
linters: {}
133153
lintersConfig: {}
154+
linters:
155+
enable:
156+
- kubeapilinter
134157
```
135158

136159
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.
137160

138161
#### VSCode integration
139162

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.
163+
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.
164+
141165
If your project authors are already using VSCode and have the configuration to lint their code when saving, this can be a seamless integration.
142166

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.
167+
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:
144168

145169
[vscode-go]: https://code.visualstudio.com/docs/languages/go
146170

147171
```json
148172
{
149173
"go.lintTool": "golangci-lint",
150174
"go.alternateTools": {
151-
"golangci-lint": "${workspaceFolder}/bin/golangci-kube-api-linter",
175+
"golangci-lint": "${workspaceFolder}/bin/golangci-lint-kube-api-linter"
152176
}
153177
}
154178
```
155179

156-
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.
180+
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:
158181

159182
```json
160183
{

0 commit comments

Comments
 (0)