From da185b949a11cb76d23cbd87690fddd99e7fcddf Mon Sep 17 00:00:00 2001 From: Nicholas Thomson Date: Fri, 24 Jun 2022 18:55:55 +0000 Subject: [PATCH 1/2] Use metadata as the source of truth for latest version --- cmd/ack-generate/command/apis.go | 6 +++++- cmd/ack-generate/command/common.go | 23 +++++++++-------------- cmd/ack-generate/command/controller.go | 7 ++++++- cmd/ack-generate/command/olm.go | 7 ++++++- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/cmd/ack-generate/command/apis.go b/cmd/ack-generate/command/apis.go index 1696f2bf..f20281bc 100644 --- a/cmd/ack-generate/command/apis.go +++ b/cmd/ack-generate/command/apis.go @@ -96,7 +96,11 @@ func generateAPIs(cmd *cobra.Command, args []string) error { if err := ensureSDKRepo(ctx, optCacheDir, optRefreshCache); err != nil { return err } - m, err := loadModelWithLatestAPIVersion(svcAlias) + metadata, err := ackmetadata.NewServiceMetadata(optMetadataConfigPath) + if err != nil { + return err + } + m, err := loadModelWithLatestAPIVersion(svcAlias, metadata) if err != nil { return err } diff --git a/cmd/ack-generate/command/common.go b/cmd/ack-generate/command/common.go index cfe6378e..bb9f766e 100644 --- a/cmd/ack-generate/command/common.go +++ b/cmd/ack-generate/command/common.go @@ -26,13 +26,14 @@ import ( "time" "golang.org/x/mod/modfile" + k8sversion "k8s.io/apimachinery/pkg/version" ackgenconfig "github.com/aws-controllers-k8s/code-generator/pkg/config" ackgenerate "github.com/aws-controllers-k8s/code-generator/pkg/generate/ack" + ackmetadata "github.com/aws-controllers-k8s/code-generator/pkg/metadata" ackmodel "github.com/aws-controllers-k8s/code-generator/pkg/model" acksdk "github.com/aws-controllers-k8s/code-generator/pkg/sdk" "github.com/aws-controllers-k8s/code-generator/pkg/util" - k8sversion "k8s.io/apimachinery/pkg/version" ) const ( @@ -216,8 +217,8 @@ func getSDKVersionFromGoMod(goModPath string) (string, error) { // loadModelWithLatestAPIVersion finds the AWS SDK for a given service alias and // creates a new model with the latest API version. -func loadModelWithLatestAPIVersion(svcAlias string) (*ackmodel.Model, error) { - latestAPIVersion, err := getLatestAPIVersion() +func loadModelWithLatestAPIVersion(svcAlias string, metadata *ackmetadata.ServiceMetadata) (*ackmodel.Model, error) { + latestAPIVersion, err := getLatestAPIVersion(metadata.APIVersions) if err != nil { return nil, err } @@ -227,7 +228,6 @@ func loadModelWithLatestAPIVersion(svcAlias string) (*ackmodel.Model, error) { // loadModel finds the AWS SDK for a given service alias and creates a new model // with the given API version. func loadModel(svcAlias string, apiVersion string, apiGroup string, defaultCfg ackgenconfig.Config) (*ackmodel.Model, error) { - cfg, err := ackgenconfig.New(optGeneratorConfigPath, defaultCfg) if err != nil { return nil, err @@ -265,19 +265,14 @@ func loadModel(svcAlias string, apiVersion string, apiGroup string, defaultCfg a return m, nil } -// getLatestAPIVersion looks in a target output directory to determine what the -// latest Kubernetes API version for CRDs exposed by the generated service +// getLatestAPIVersion looks in the controller metadata file to determine what +// the latest Kubernetes API version for CRDs exposed by the generated service // controller. -func getLatestAPIVersion() (string, error) { - apisPath := filepath.Join(optOutputPath, "apis") +func getLatestAPIVersion(apiVersions []ackmetadata.ServiceVersion) (string, error) { versions := []string{} - subdirs, err := ioutil.ReadDir(apisPath) - if err != nil { - return "", err - } - for _, subdir := range subdirs { - versions = append(versions, subdir.Name()) + for _, version := range apiVersions { + versions = append(versions, version.APIVersion) } sort.Slice(versions, func(i, j int) bool { return k8sversion.CompareKubeAwareVersionStrings(versions[i], versions[j]) < 0 diff --git a/cmd/ack-generate/command/controller.go b/cmd/ack-generate/command/controller.go index e7c1d8d3..ba58c869 100644 --- a/cmd/ack-generate/command/controller.go +++ b/cmd/ack-generate/command/controller.go @@ -26,6 +26,7 @@ import ( "github.com/spf13/cobra" ackgenerate "github.com/aws-controllers-k8s/code-generator/pkg/generate/ack" + ackmetadata "github.com/aws-controllers-k8s/code-generator/pkg/metadata" ) var ( @@ -59,7 +60,11 @@ func generateController(cmd *cobra.Command, args []string) error { if err := ensureSDKRepo(ctx, optCacheDir, optRefreshCache); err != nil { return err } - m, err := loadModelWithLatestAPIVersion(svcAlias) + metadata, err := ackmetadata.NewServiceMetadata(optMetadataConfigPath) + if err != nil { + return err + } + m, err := loadModelWithLatestAPIVersion(svcAlias, metadata) if err != nil { return err } diff --git a/cmd/ack-generate/command/olm.go b/cmd/ack-generate/command/olm.go index 30b5c3d5..95707ca7 100644 --- a/cmd/ack-generate/command/olm.go +++ b/cmd/ack-generate/command/olm.go @@ -24,6 +24,7 @@ import ( "github.com/spf13/cobra" olmgenerate "github.com/aws-controllers-k8s/code-generator/pkg/generate/olm" + ackmetadata "github.com/aws-controllers-k8s/code-generator/pkg/metadata" ) const ( @@ -87,7 +88,11 @@ func generateOLMAssets(cmd *cobra.Command, args []string) error { if err := ensureSDKRepo(ctx, optCacheDir, optRefreshCache); err != nil { return err } - m, err := loadModelWithLatestAPIVersion(svcAlias) + metadata, err := ackmetadata.NewServiceMetadata(optMetadataConfigPath) + if err != nil { + return err + } + m, err := loadModelWithLatestAPIVersion(svcAlias, metadata) if err != nil { return err } From 220ed44028d15de47a0affb8a0bc66cc07692ecf Mon Sep 17 00:00:00 2001 From: Nicholas Thomson Date: Fri, 24 Jun 2022 20:08:16 +0000 Subject: [PATCH 2/2] Add metadata flag to OLM build --- scripts/build-controller-release.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/build-controller-release.sh b/scripts/build-controller-release.sh index 3c3c3f9e..d950942a 100755 --- a/scripts/build-controller-release.sh +++ b/scripts/build-controller-release.sh @@ -252,6 +252,9 @@ if [[ $ACK_GENERATE_OLM == "true" ]]; then if [ -n "$ACK_GENERATE_IMAGE_REPOSITORY" ]; then ag_olm_args="$ag_olm_args --image-repository $ACK_GENERATE_IMAGE_REPOSITORY" fi + if [ -n "$ACK_METADATA_CONFIG_PATH" ]; then + ag_olm_args="$ag_olm_args --metadata-config-path $ACK_METADATA_CONFIG_PATH" + fi $ACK_GENERATE_BIN_PATH olm $ag_olm_args $SCRIPTS_DIR/olm-create-bundle.sh "$SERVICE" "$RELEASE_VERSION"