Skip to content

Commit dc8f9fb

Browse files
committed
feat: add func for generating prerelease lifecycle code
1 parent a18b4a8 commit dc8f9fb

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

staging/src/k8s.io/code-generator/kube_codegen.sh

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -774,3 +774,95 @@ function kube::codegen::gen_register() {
774774
"${input_pkgs[@]}"
775775
fi
776776
}
777+
778+
779+
# Generate register code
780+
#
781+
# USAGE: kube::codegen::prerelease [FLAGS] <input-dir>
782+
# <input-dir>
783+
# The root directory under which to search for Go files which request code to
784+
# be generated. This must be a local path, not a Go package.
785+
#
786+
# See note at the top about package structure below that.
787+
#
788+
# FLAGS:
789+
#
790+
# --boilerplate <string = path_to_kube_codegen_boilerplate>
791+
# An optional override for the header file to insert into generated files.
792+
#
793+
function kube::codegen::prerelease() {
794+
local in_dir=""
795+
local boilerplate="${KUBE_CODEGEN_ROOT}/hack/boilerplate.go.txt"
796+
local v="${KUBE_VERBOSE:-0}"
797+
798+
while [ "$#" -gt 0 ]; do
799+
case "$1" in
800+
"--boilerplate")
801+
boilerplate="$2"
802+
shift 2
803+
;;
804+
*)
805+
if [[ "$1" =~ ^-- ]]; then
806+
echo "unknown argument: $1" >&2
807+
return 1
808+
fi
809+
if [ -n "$in_dir" ]; then
810+
echo "too many arguments: $1 (already have $in_dir)" >&2
811+
return 1
812+
fi
813+
in_dir="$1"
814+
shift
815+
;;
816+
esac
817+
done
818+
819+
if [ -z "${in_dir}" ]; then
820+
echo "input-dir argument is required" >&2
821+
return 1
822+
fi
823+
824+
(
825+
# To support running this from anywhere, first cd into this directory,
826+
# and then install with forced module mode on and fully qualified name.
827+
cd "${KUBE_CODEGEN_ROOT}"
828+
BINS=(
829+
prerelease-lifecycle-gen
830+
)
831+
# shellcheck disable=2046 # printf word-splitting is intentional
832+
GO111MODULE=on go install $(printf "k8s.io/code-generator/cmd/%s " "${BINS[@]}")
833+
)
834+
# Go installs in $GOBIN if defined, and $GOPATH/bin otherwise
835+
gobin="${GOBIN:-$(go env GOPATH)/bin}"
836+
837+
# Prerelease lifecycle
838+
#
839+
local input_pkgs=()
840+
while read -r dir; do
841+
pkg="$(cd "${dir}" && GO111MODULE=on go list -find .)"
842+
input_pkgs+=("${pkg}")
843+
done < <(
844+
( kube::codegen::internal::grep -l --null \
845+
-e '^\s*//\s*+k8s:prerelease-lifecycle-gen=' \
846+
-r "${in_dir}" \
847+
--include '*.go' \
848+
|| true \
849+
) | while read -r -d $'\0' F; do dirname "${F}"; done \
850+
| LC_ALL=C sort -u
851+
)
852+
853+
if [ "${#input_pkgs[@]}" != 0 ]; then
854+
echo "Generating prerelease lifecycle code for ${#input_pkgs[@]} targets"
855+
856+
kube::codegen::internal::findz \
857+
"${in_dir}" \
858+
-type f \
859+
-name zz_generated.prerelease-lifecycle.go \
860+
| xargs -0 rm -f
861+
862+
"${gobin}/prerelease-lifecycle-gen" \
863+
-v "${v}" \
864+
--output-file zz_generated.prerelease-lifecycle.go \
865+
--go-header-file "${boilerplate}" \
866+
"${input_pkgs[@]}"
867+
fi
868+
}

0 commit comments

Comments
 (0)