summaryrefslogtreecommitdiff
path: root/hack/generate-groups.sh
diff options
context:
space:
mode:
authorgy95 <guoyao17@huawei.com>2022-03-10 20:23:33 +0800
committergy95 <guoyao17@huawei.com>2022-03-11 16:11:19 +0800
commitd7e52d6c399c516a4130e0ddbbcdcd17e8caf4a5 (patch)
tree0a5be321b69431477e1f8f82136bfbf40bee38d5 /hack/generate-groups.sh
parentMerge pull request #3665 from wackxu/fixprobe (diff)
downloadkubeedge-d7e52d6c399c516a4130e0ddbbcdcd17e8caf4a5.tar.gz
Move apis and client under kubeedge/cloud/pkg/ to kubeedge/pkg/
Signed-off-by: gy95 <guoyao17@huawei.com>
Diffstat (limited to 'hack/generate-groups.sh')
-rwxr-xr-xhack/generate-groups.sh90
1 files changed, 90 insertions, 0 deletions
diff --git a/hack/generate-groups.sh b/hack/generate-groups.sh
new file mode 100755
index 000000000..44e81f5fc
--- /dev/null
+++ b/hack/generate-groups.sh
@@ -0,0 +1,90 @@
+#!/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.
+
+set -o errexit
+set -o nounset
+set -o pipefail
+
+# generate-groups generates everything for a project with external types only, e.g. a project based
+# on CustomResourceDefinitions.
+
+if [ "$#" -lt 4 ] || [ "${1}" == "--help" ]; then
+ cat <<EOF
+Usage: $(basename "$0") <generators> <output-package> <apis-package> <groups-versions> ...
+ <generators> the generators comma separated to run (deepcopy,defaulter,client,lister,informer) or "all".
+ <output-package> the output package name (e.g. github.com/example/project/pkg/generated).
+ <apis-package> the external types dir (e.g. github.com/example/api or github.com/example/project/pkg/apis).
+ <groups-versions> the groups and their versions in the format "groupA:v1,v2 groupB:v1 groupC:v2", relative
+ to <api-package>.
+ ... arbitrary flags passed to all generator binaries.
+Examples:
+ $(basename "$0") all github.com/example/project/pkg/client github.com/example/project/pkg/apis "foo:v1 bar:v1alpha1,v1beta1"
+ $(basename "$0") deepcopy,client github.com/example/project/pkg/client github.com/example/project/pkg/apis "foo:v1 bar:v1alpha1,v1beta1"
+EOF
+ exit 0
+fi
+
+GENS="$1"
+OUTPUT_PKG="$2"
+APIS_PKG="$3"
+GROUPS_WITH_VERSIONS="$4"
+GOBIN="${GOBIN-$GOPATH/bin}"
+shift 4
+
+(
+ # To support running this script from anywhere, we have to first cd into this directory
+ # so we can install the tools.
+ cd "$(dirname "${0}")"
+ GO111MODULE=on GOFLAGS=-mod=vendor go install k8s.io/code-generator/cmd/{defaulter-gen,client-gen,lister-gen,informer-gen,deepcopy-gen}
+)
+
+function codegen::join() { local IFS="$1"; shift; echo "$*"; }
+
+# enumerate group versions
+FQ_APIS=() # e.g. k8s.io/api/apps/v1
+for GVs in ${GROUPS_WITH_VERSIONS}; do
+ IFS=: read -r G Vs <<<"${GVs}"
+
+ # enumerate versions
+ for V in ${Vs//,/ }; do
+ FQ_APIS+=("${APIS_PKG}/${G}/${V}")
+ done
+done
+
+if [ "${GENS}" = "all" ] || grep -qw "deepcopy" <<<"${GENS}"; then
+ echo "Generating deepcopy funcs"
+ "${GOBIN}/deepcopy-gen" --input-dirs "$(codegen::join , "${FQ_APIS[@]}")" -O zz_generated.deepcopy --bounding-dirs "${APIS_PKG}" "$@"
+fi
+
+if [ "${GENS}" = "all" ] || grep -qw "client" <<<"${GENS}"; then
+ echo "Generating clientset for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/${CLIENTSET_PKG_NAME:-clientset}"
+ "${GOBIN}/client-gen" --clientset-name "${CLIENTSET_NAME_VERSIONED:-versioned}" --input-base "" --input "$(codegen::join , "${FQ_APIS[@]}")" --output-package "${OUTPUT_PKG}/${CLIENTSET_PKG_NAME:-clientset}" "$@"
+fi
+
+if [ "${GENS}" = "all" ] || grep -qw "lister" <<<"${GENS}"; then
+ echo "Generating listers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/listers"
+ "${GOBIN}/lister-gen" --input-dirs "$(codegen::join , "${FQ_APIS[@]}")" --output-package "${OUTPUT_PKG}/listers" "$@"
+fi
+
+if [ "${GENS}" = "all" ] || grep -qw "informer" <<<"${GENS}"; then
+ echo "Generating informers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/informers"
+ "${GOBIN}/informer-gen" \
+ --input-dirs "$(codegen::join , "${FQ_APIS[@]}")" \
+ --versioned-clientset-package "${OUTPUT_PKG}/${CLIENTSET_PKG_NAME:-clientset}/${CLIENTSET_NAME_VERSIONED:-versioned}" \
+ --listers-package "${OUTPUT_PKG}/listers" \
+ --output-package "${OUTPUT_PKG}/informers" \
+ "$@"
+fi