#!/usr/bin/env bash # Copyright 2017 The Kubernetes Authors. # # 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. # verify-readonly-packages.sh checks whether between $KUBE_VERIFY_GIT_BRANCH and HEAD files # in readonly directories were modified. A directory is readonly iff it contains a .readonly # file. Being readonly DOES NOT apply recursively to subdirectories. set -o errexit set -o nounset set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE}")/.. source "${KUBE_ROOT}/hack/lib/init.sh" readonly branch=${1:-${KUBE_VERIFY_GIT_BRANCH:-master}} find_files() { find . -not \( \ \( \ -wholename './output' \ -o -wholename './_output' \ -o -wholename './_gopath' \ -o -wholename './release' \ -o -wholename './target' \ -o -wholename '*/third_party/*' \ -o -wholename '*/vendor/*' \ -o -wholename './staging/src/k8s.io/client-go/*vendor/*' \ -o -wholename './staging/src/k8s.io/client-go/pkg/*' \ \) -prune \ \) -name '.readonly' } IFS=$'\n' conflicts=($(find_files | sed 's|/.readonly||' | while read dir; do dir=${dir#./} if kube::util::has_changes_against_upstream_branch "${branch}" "^${dir}/[^/]*\$" '/\.readonly$|/BUILD$|/zz_generated|/\.generated\.|\.proto$|\.pb\.go$' >/dev/null; then echo "${dir}" fi done)) unset IFS if [ ${#conflicts[@]} -gt 0 ]; then exec 1>&2 for dir in "${conflicts[@]}"; do echo "Found ${dir}/.readonly, but files changed compared to \"${branch}\" branch." done exit 1 else echo "Readonly packages verified." fi # ex: ts=2 sw=2 et filetype=sh