mirror of
https://github.com/agent-substrate/substrate.git
synced 2026-10-02 03:24:42 +08:00
Part of #207, following the plan discussed there with @juli4n and @kannon92: plumbing plus the non invasive fixes first, with the existing invasive findings excluded so new APIs do not regress (as @kannon92 suggested in https://github.com/agent-substrate/substrate/issues/207#issuecomment-4921051580). The linter itself was originally suggested by @BenTheElder in #188. Plumbing: - hack/tools/kube-api-linter module with the golangci-lint-kube-api-linter tool, same pattern as the other tools. - .golangci-kal.yaml config. The pre-existing findings from rules that need Go API changes (nomaps, nonpointerstructs, nophase, optionalfields, requiredfields, ssatags) are excluded rather than disabled, and each exclusion rule names the fields it excuses, so the rules still apply to new API files and to new fields on the existing types. Fixing them on the existing types is the follow up in #207. - hack/verify/kube-api-linter.sh runs it against ./pkg/api/... and is picked up by hack/verify-all.sh in CI. Fixes in pkg/api/v1alpha1 (doc and marker only, no Go API change): - commentstart: field godocs now start with the serialized field name. - conditions: Conditions moved to the first position in ActorTemplateStatus and got the listType, listMapKey and patch markers. - defaultorrequired: SandboxConfigSpec.SandboxClass had both a default and required; now optional with omitempty, matching the same field on WorkerPoolSpec and ActorTemplateSpec. The ValidatingAdmissionPolicy in sandboxconfig-validation.yaml is unaffected since CRD defaulting runs before admission, so spec.sandboxClass is always set by then. - optionalorrequired: missing +optional markers added on ActorTemplateStatus fields. - defaults: configured preferredDefaultMarker to kubebuilder:default since CRDs are generated with controller-gen. Generated CRDs regenerated. Structural schema changes are only the conditions listType/listMapKey and sandboxClass no longer in the required list (it is defaulted, so behavior is the same); the rest is description text. Note: my earlier count of 50 issues in #207 was capped by the default golangci-lint issue limit. With the cap removed the real total is 86; the extra ones are requiredfields (20) and ssatags (4), both in the excluded set above. Test plan - hack/verify/kube-api-linter.sh passes (0 issues). - Exclusions verified both ways: dropping them brings the pre-existing findings back, and a scratch field added to WorkerPoolSpec is still reported (optionalfields), which the earlier per-file exclusion swallowed. - TestSandboxConfigValidation passes against the regenerated CRD. - go build ./... and go test ./pkg/api/... ./cmd/atecontroller/... pass. - gofmt, shellcheck and the regular golangci-lint on pkg/api are clean.