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.
55 lines
1.3 KiB
Bash
Executable File
55 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Copyright 2026 Google LLC
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
set -o errexit -o nounset -o pipefail
|
|
|
|
if [ "$#" -lt 1 ]; then
|
|
echo "Usage: $0 [--print-bin-path] <tool-name> [args...]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
PRINT_PATH=false
|
|
if [ "$1" = "--print-bin-path" ]; then
|
|
PRINT_PATH=true
|
|
shift
|
|
fi
|
|
|
|
TOOL_NAME="$1"
|
|
shift
|
|
|
|
ROOT="$(git rev-parse --show-toplevel)"
|
|
case "${TOOL_NAME}" in
|
|
"client-gen"|"informer-gen"|"lister-gen"|"validation-gen")
|
|
TOOL_DIR="${ROOT}/hack/tools/code-generator"
|
|
;;
|
|
"golangci-lint-kube-api-linter")
|
|
TOOL_DIR="${ROOT}/hack/tools/kube-api-linter"
|
|
;;
|
|
*)
|
|
TOOL_DIR="${ROOT}/hack/tools/${TOOL_NAME}"
|
|
;;
|
|
esac
|
|
|
|
TOOL_BIN="$(cd "${TOOL_DIR}" && go tool -n "${TOOL_NAME}")"
|
|
|
|
if [ "${PRINT_PATH}" = true ]; then
|
|
echo "${TOOL_BIN}"
|
|
exit 0
|
|
fi
|
|
|
|
# Run the tool binary from original CWD
|
|
exec "${TOOL_BIN}" "$@"
|