@@ -774,3 +774,95 @@ function kube::codegen::gen_register() {
774
774
" ${input_pkgs[@]} "
775
775
fi
776
776
}
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