k8s.io/kubernetes@v1.31.0-alpha.0.0.20240520171757-56147500dadc/hack/verify-readonly-packages.sh (about) 1 #!/usr/bin/env bash 2 3 # Copyright 2017 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 whether between $KUBE_VERIFY_GIT_BRANCH and HEAD files in 18 # readonly directories were modified. A directory is readonly if it contains a 19 # .readonly file. Being readonly DOES NOT apply recursively to subdirectories. 20 # Usage: `hack/verify-readonly-packages.sh`. 21 22 set -o errexit 23 set -o nounset 24 set -o pipefail 25 26 KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. 27 source "${KUBE_ROOT}/hack/lib/init.sh" 28 29 readonly branch=${1:-${KUBE_VERIFY_GIT_BRANCH:-master}} 30 31 find_files() { 32 find . -not \( \ 33 \( \ 34 -wholename './_output' \ 35 -o -wholename './release' \ 36 -o -wholename './target' \ 37 -o -wholename '*/third_party/*' \ 38 -o -wholename '*/vendor/*' \ 39 -o -wholename './staging/src/k8s.io/client-go/pkg/*' \ 40 \) -prune \ 41 \) -name '.readonly' 42 } 43 44 conflicts=() 45 while IFS=$'\n' read -r dir; do 46 dir=${dir#./} 47 if kube::util::has_changes "${branch}" "^${dir}/[^/]*\$" '/\.readonly$|/zz_generated|/\.generated\.|\.proto$|\.pb\.go$' >/dev/null; then 48 conflicts+=("${dir}") 49 fi 50 done < <(find_files | sed 's|/.readonly||') 51 52 if [ ${#conflicts[@]} -gt 0 ]; then 53 exec 1>&2 54 for dir in "${conflicts[@]}"; do 55 echo "Found ${dir}/.readonly, but files changed compared to \"${branch}\" branch." 56 done 57 exit 1 58 else 59 echo "Readonly packages verified." 60 fi 61 # ex: ts=2 sw=2 et filetype=sh