...
Text file
src/k8s.io/kubernetes/hack/verify-non-mutating-validation.sh
1#!/usr/bin/env bash
2
3# Copyright 2021 The Kubernetes Authors.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17# This script checks that validation files do not mutate their inputs.
18# Usage: `hack/verify-non-mutating-validation.sh`.
19
20set -o errexit
21set -o nounset
22set -o pipefail
23
24KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
25source "${KUBE_ROOT}/hack/lib/init.sh"
26
27mutationOutput=$(find . -name validation.go -print0 | xargs -0 egrep -n ' = old' | grep -v '// +k8s:verify-mutation:reason=clone' || true)
28foundMutation=${#mutationOutput}
29# when there's no match, there is a newline
30if [ "$foundMutation" -gt "1" ]; then
31 echo "${mutationOutput}"
32 echo "It looks like an assignment of a value using the old object. This is a heuristic check. If a mutation is happening in validation please fix it."
33 echo "If a mutation of arguments is not happening, you can exempt a line using '// +k8s:verify-mutation:reason=clone'."
34 exit 1
35fi
36
37mutationOutput=$(! find . -name validation.go -print0 | xargs -0 egrep -n 'old.* = ' | grep -v '// +k8s:verify-mutation:reason=clone' || true)
38foundMutation=${#mutationOutput}
39# when there's no match, there is a newline
40if [ "$foundMutation" -gt "1" ]; then
41 echo "${mutationOutput}"
42 echo "It looks like an assignment to the old object is happening. This is a heuristic check. If a mutation is happening in validation please fix it."
43 echo "If a mutation of arguments is not happening, you can exempt a line using '// +k8s:verify-mutation:reason=clone'."
44 exit 1
45fi
View as plain text