mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 05:40:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			128 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| # Copyright 2016 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.
 | |
| 
 | |
| # This scripts locates all API groups by their packages and versions
 | |
| # Usage: `hack/verify-api-groups.sh`.
 | |
| 
 | |
| set -o errexit
 | |
| set -o nounset
 | |
| set -o pipefail
 | |
| 
 | |
| KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
 | |
| source "${KUBE_ROOT}/hack/lib/init.sh"
 | |
| 
 | |
| register_files=()
 | |
| while read -r file ; do
 | |
| 	register_files+=("${file}")
 | |
| done < <(find pkg/apis -name register.go | sort)
 | |
| 
 | |
| # every register file should contain a GroupName.  Gather the different representations.
 | |
| # 1. group directory name for client gen
 | |
| # 2. external group versions for init.sh all APIs list
 | |
| # 3. install packages for inclusion in import_known_versions files
 | |
| group_dirnames=()
 | |
| external_group_versions=()
 | |
| expected_install_packages=()
 | |
| for register_file in "${register_files[@]}"; do
 | |
| 	package="${register_file%"/register.go"}"
 | |
| 	group_dirname="${package#"pkg/apis/"}"
 | |
| 	group_dirname="${group_dirname%%"/*"}"
 | |
| 	group_name=""
 | |
| 	if grep -q 'GroupName = "' "${register_file}"; then
 | |
| 		group_name=$(grep 'GroupName = "' "${register_file}" | cut -d\" -f2 -)
 | |
| 	else
 | |
| 		echo "${register_file} is missing \"const GroupName =\""
 | |
| 		exit 1
 | |
| 	fi
 | |
| 
 | |
| 	# If the dirname doesn't have a slash, then it's the internal package.
 | |
| 	# if does have one, then it's versioned (e.g. foobar/v1).
 | |
| 	if [[ "${group_dirname#*'/'}" == "${group_dirname}" ]]; then
 | |
| 		group_dirnames+=("${group_dirname}")
 | |
| 		expected_install_packages+=("k8s.io/kubernetes/${package}")
 | |
| 	else
 | |
| 		version=$(echo "${group_dirname}" | cut -d/ -f2 -)
 | |
| 		external_group_versions+=("${group_name}/${version}")
 | |
| 	fi
 | |
| done
 | |
| 
 | |
| 
 | |
| # check to make sure that client gen is getting
 | |
| # groups_without_codegen is the list of group we EXPECT to not have the client generated for
 | |
| # them.  This happens for types that aren't served from the API server
 | |
| groups_without_codegen=(
 | |
| 	"abac"
 | |
| 	"componentconfig"
 | |
| 	"imagepolicy"
 | |
| 	"admission"
 | |
| )
 | |
| client_gen_file="${KUBE_ROOT}/vendor/k8s.io/code-generator/cmd/client-gen/main.go"
 | |
| 
 | |
| for group_dirname in "${group_dirnames[@]}"; do
 | |
| 	if ! grep -q "${group_dirname}/" "${client_gen_file}" ; then
 | |
| 		found=0
 | |
| 		for group_without_codegen in "${groups_without_codegen[@]}"; do
 | |
| 			if [[ "${group_without_codegen}" == "${group_dirname}" ]]; then
 | |
| 				found=1
 | |
| 			fi
 | |
| 		done
 | |
| 		if [[ "${found}" -ne "1" && -f "${group_dirname}/types.go" ]] ; then
 | |
| 			echo "need to add ${group_dirname}/ to ${client_gen_file}"
 | |
| 			exit 1
 | |
| 		fi
 | |
| 	fi
 | |
| done
 | |
| 
 | |
| # import_known_versions checks to be sure we'll get installed
 | |
| # groups_without_codegen is the list of group we EXPECT to not have the client generated for
 | |
| # them.  This happens for types that aren't served from the API server
 | |
| packages_without_install=(
 | |
| 	"k8s.io/kubernetes/pkg/apis/abac"
 | |
| 	"k8s.io/kubernetes/pkg/apis/admission"
 | |
| 	"k8s.io/kubernetes/pkg/apis/apidiscovery"
 | |
| 	"k8s.io/kubernetes/pkg/apis/componentconfig" # TODO: Remove this package completely and from this list
 | |
| )
 | |
| known_version_files=(
 | |
| 	"pkg/controlplane/import_known_versions.go"
 | |
| )
 | |
| for expected_install_package in "${expected_install_packages[@]}"; do
 | |
| 	found=0
 | |
| 	for package_without_install in "${packages_without_install[@]}"; do
 | |
| 		if [ "${package_without_install}" == "${expected_install_package}" ]; then
 | |
| 			found=1
 | |
| 		fi
 | |
| 	done
 | |
| 	if [[ "${found}" -eq "1" ]] ; then
 | |
| 		continue
 | |
| 	fi
 | |
| 
 | |
| 	for known_version_file in "${known_version_files[@]}"; do
 | |
| 		if ! grep -q "${expected_install_package}/install" "${known_version_file}" ; then
 | |
| 			echo "missing ${expected_install_package}/install from ${known_version_file}"
 | |
| 			exit 1
 | |
| 		fi
 | |
| 	done
 | |
| done
 | |
| 
 | |
| # check all groupversions to make sure they're in the init.sh file.  This isn't perfect, but its slightly
 | |
| # better than nothing
 | |
| for external_group_version in "${external_group_versions[@]}"; do
 | |
| 	if ! grep -q "${external_group_version}" "${KUBE_ROOT}/hack/lib/init.sh" ; then
 | |
| 		echo "missing ${external_group_version} from hack/lib/init.sh:/KUBE_AVAILABLE_GROUP_VERSIONS or hack/init.sh:/KUBE_NONSERVER_GROUP_VERSIONS"
 | |
| 		exit 1
 | |
| 	fi
 | |
| done
 |