diff --git a/cmd/ack-generate/command/apis.go b/cmd/ack-generate/command/apis.go index 33458b36..7f325413 100644 --- a/cmd/ack-generate/command/apis.go +++ b/cmd/ack-generate/command/apis.go @@ -85,10 +85,12 @@ func saveGeneratedMetadata(cmd *cobra.Command, args []string) error { // generateAPIs generates the Go files for each resource in the AWS service // API. func generateAPIs(cmd *cobra.Command, args []string) error { - if len(args) != 1 { + if len(args) < 1 { return fmt.Errorf("please specify the service alias for the AWS service API to generate") } svcAlias := strings.ToLower(args[0]) + releaseVersion := strings.ToLower(args[1]) + releaseVersion = strings.TrimPrefix(releaseVersion, "v") if optOutputPath == "" { optOutputPath = filepath.Join(optServicesDir, svcAlias) } @@ -107,7 +109,7 @@ func generateAPIs(cmd *cobra.Command, args []string) error { if err != nil { return err } - ts, err := ackgenerate.APIs(m, optTemplateDirs) + ts, err := ackgenerate.APIs(m, optTemplateDirs, releaseVersion) if err != nil { return err } diff --git a/cmd/ack-generate/command/controller.go b/cmd/ack-generate/command/controller.go index 870ae214..fdbd5001 100644 --- a/cmd/ack-generate/command/controller.go +++ b/cmd/ack-generate/command/controller.go @@ -45,10 +45,12 @@ func init() { // generateController generates the Go files for a service controller func generateController(cmd *cobra.Command, args []string) error { - if len(args) != 1 { - return fmt.Errorf("please specify the service alias for the AWS service API to generate") + if len(args) < 1 { + return fmt.Errorf("please specify the service alias for the AWS service API to generate: controller") } svcAlias := strings.ToLower(args[0]) + releaseVersion := strings.ToLower(args[1]) + releaseVersion = strings.TrimPrefix(releaseVersion, "v") if optOutputPath == "" { optOutputPath = filepath.Join(optServicesDir, svcAlias) } @@ -72,7 +74,7 @@ func generateController(cmd *cobra.Command, args []string) error { if err != nil { return err } - ts, err := ackgenerate.Controller(m, optTemplateDirs, serviceAccountName) + ts, err := ackgenerate.Controller(m, optTemplateDirs, serviceAccountName, releaseVersion) if err != nil { return err } diff --git a/pkg/generate/ack/apis.go b/pkg/generate/ack/apis.go index b3df9156..6bdefd8d 100644 --- a/pkg/generate/ack/apis.go +++ b/pkg/generate/ack/apis.go @@ -46,6 +46,7 @@ var ( func APIs( m *ackmodel.Model, templateBasePaths []string, + releaseVersion string, ) (*templateset.TemplateSet, error) { enumDefs, err := m.GetEnumDefs() if err != nil { @@ -86,6 +87,7 @@ func APIs( metaVars, m.SDKAPI, crd, + releaseVersion, } if err = ts.Add(crdFileName, "apis/crd.go.tpl", crdVars); err != nil { return nil, err @@ -106,6 +108,7 @@ type templateAPIVars struct { // code for a single top-level resource's API definition type templateCRDVars struct { templateset.MetaVars - SDKAPI *ackmodel.SDKAPI - CRD *ackmodel.CRD + SDKAPI *ackmodel.SDKAPI + CRD *ackmodel.CRD + ReleaseVersion string } diff --git a/pkg/generate/ack/controller.go b/pkg/generate/ack/controller.go index 8f9c4eac..5df3999f 100644 --- a/pkg/generate/ack/controller.go +++ b/pkg/generate/ack/controller.go @@ -219,6 +219,7 @@ func Controller( templateBasePaths []string, // serviceAccountName is the name of the ServiceAccount used in the Helm chart serviceAccountName string, + releaseVersion string, ) (*templateset.TemplateSet, error) { crds, err := m.GetCRDs() if err != nil { @@ -234,6 +235,7 @@ func Controller( metaVars, m.SDKAPI, r, + releaseVersion, } code, err := ResourceHookCode(templateBasePaths, r, hookID, crdVars, controllerFuncMap) if err != nil { @@ -274,6 +276,7 @@ func Controller( metaVars, m.SDKAPI, crd, + releaseVersion, } if err = ts.Add(outPath, tplPath, crdVars); err != nil { return nil, err diff --git a/scripts/build-controller.sh b/scripts/build-controller.sh index abdb7ee7..eaba05c1 100755 --- a/scripts/build-controller.sh +++ b/scripts/build-controller.sh @@ -111,6 +111,10 @@ if [[ ! -d $SERVICE_CONTROLLER_SOURCE_PATH ]]; then exit 1 fi +pushd "$SERVICE_CONTROLLER_SOURCE_PATH" 1>/dev/null + RELEASE_VERSION=${RELEASE_VERSION:-$(git describe --tags --abbrev=0 2>/dev/null || echo $NON_RELEASE_VERSION)} +popd 1>/dev/null + BOILERPLATE_TXT_PATH="$ROOT_DIR/templates/boilerplate.txt" DEFAULT_TEMPLATE_DIRS="$ROOT_DIR/templates" # If the service controller source repository has a templates/ directory, add @@ -165,7 +169,7 @@ if [ -z "$ACK_DOCUMENTATION_CONFIG_PATH" ]; then fi fi -ag_args=("$SERVICE" -o "$SERVICE_CONTROLLER_SOURCE_PATH" --template-dirs "$TEMPLATE_DIRS") +ag_args=("$SERVICE" "$RELEASE_VERSION" -o "$SERVICE_CONTROLLER_SOURCE_PATH" --template-dirs "$TEMPLATE_DIRS") if [ -n "$ACK_GENERATE_CACHE_DIR" ]; then ag_args=("${ag_args[@]}" --cache-dir "$ACK_GENERATE_CACHE_DIR") fi diff --git a/templates/apis/crd.go.tpl b/templates/apis/crd.go.tpl index ad57b72b..eb336045 100644 --- a/templates/apis/crd.go.tpl +++ b/templates/apis/crd.go.tpl @@ -57,6 +57,7 @@ type {{ .CRD.Kind }}Status struct { // {{ .CRD.Kind }} is the Schema for the {{ .CRD.Plural }} API // +kubebuilder:object:root=true // +kubebuilder:subresource:status +// +kubebuilder:metadata:annotations="controller-version={{ .ReleaseVersion }}" {{- range $column := .CRD.AdditionalPrinterColumns }} // +kubebuilder:printcolumn:name="{{$column.Name}}",type={{$column.Type}},priority={{$column.Priority}},JSONPath=`{{$column.JSONPath}}` {{- end }}