@@ -28,6 +28,7 @@ import (
2828
2929 "github.com/operator-framework/operator-sdk/internal/plugins/manifests/v2/templates/config/manifests"
3030 "github.com/operator-framework/operator-sdk/internal/util/projutil"
31+ "github.com/operator-framework/operator-sdk/internal/version"
3132)
3233
3334// Version of `opm` to download and use for building index images.
@@ -68,7 +69,15 @@ func (s *initSubcommand) Scaffold(fs machinery.Filesystem) error {
6869 }
6970 projectName = strings .ToLower (filepath .Base (dir ))
7071 }
71- makefileBytes = append ([]byte (fmt .Sprintf (makefileBundleVarFragment , s .config .GetDomain (), projectName )), makefileBytes ... )
72+ makefileBytes = append ([]byte (fmt .Sprintf (makefileBundleVarFragment , s .config .GetDomain (), projectName , strings .Trim (version .Version , "+git" ))), makefileBytes ... )
73+
74+ // Append SDK recipes.
75+ switch operatorType {
76+ case projutil .OperatorTypeGo :
77+ makefileBytes = append (makefileBytes , []byte (makefileSDKFragmentGo )... )
78+ default :
79+ makefileBytes = append (makefileBytes , []byte (makefileSDKFragmentNonGo )... )
80+ }
7281
7382 // Append bundle recipes.
7483 switch operatorType {
@@ -168,24 +177,65 @@ USE_IMAGE_DIGESTS ?= false
168177ifeq ($(USE_IMAGE_DIGESTS), true)
169178 BUNDLE_GEN_FLAGS += --use-image-digests
170179endif
180+
181+ # Set the Operator SDK version to use. By default, what is installed on the system is used.
182+ # This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit.
183+ OPERATOR_SDK_VERSION ?= %[3]s
184+ `
185+
186+ makefileSDKFragmentGo = `
187+ .PHONY: operator-sdk
188+ OPERATOR_SDK ?= $(LOCALBIN)/operator-sdk
189+ operator-sdk: ## Download operator-sdk locally if necessary.
190+ ifeq (,$(wildcard $(OPERATOR_SDK)))
191+ ifeq (, $(shell which operator-sdk 2>/dev/null))
192+ @{ \
193+ set -e ;\
194+ mkdir -p $(dir $(OPERATOR_SDK)) ;\
195+ OS=$(shell go env GOOS) && ARCH=$(shell go env GOARCH) && \
196+ curl -sSLo $(OPERATOR_SDK) https://github.com/operator-framework/operator-sdk/releases/download/$(OPERATOR_SDK_VERSION)/operator-sdk_$${OS}_$${ARCH} ;\
197+ chmod +x $(OPERATOR_SDK) ;\
198+ }
199+ else
200+ OPERATOR_SDK = $(shell which operator-sdk)
201+ endif
202+ endif
203+ `
204+
205+ makefileSDKFragmentNonGo = `
206+ .PHONY: operator-sdk
207+ OPERATOR_SDK ?= ./bin/operator-sdk
208+ operator-sdk: ## Download operator-sdk locally if necessary.
209+ ifeq (,$(wildcard $(OPERATOR_SDK)))
210+ ifeq (, $(shell which operator-sdk 2>/dev/null))
211+ @{ \
212+ set -e ;\
213+ mkdir -p $(dir $(OPERATOR_SDK)) ;\
214+ curl -sSLo $(OPERATOR_SDK) https://github.com/operator-framework/operator-sdk/releases/download/$(OPERATOR_SDK_VERSION)/operator-sdk_$(OS)_$(ARCH) ;\
215+ chmod +x $(OPERATOR_SDK) ;\
216+ }
217+ else
218+ OPERATOR_SDK = $(shell which operator-sdk)
219+ endif
220+ endif
171221`
172222
173223 makefileBundleFragmentGo = `
174224.PHONY: bundle
175- bundle: manifests kustomize ## Generate bundle manifests and metadata, then validate generated files.
176- operator-sdk generate kustomize manifests -q
225+ bundle: manifests kustomize operator-sdk ## Generate bundle manifests and metadata, then validate generated files.
226+ $(OPERATOR_SDK) generate kustomize manifests -q
177227 cd config/manager && $(KUSTOMIZE) edit set image controller=$(IMG)
178- $(KUSTOMIZE) build config/manifests | operator-sdk generate bundle $(BUNDLE_GEN_FLAGS)
179- operator-sdk bundle validate ./bundle
228+ $(KUSTOMIZE) build config/manifests | $(OPERATOR_SDK) generate bundle $(BUNDLE_GEN_FLAGS)
229+ $(OPERATOR_SDK) bundle validate ./bundle
180230`
181231
182232 makefileBundleFragmentNonGo = `
183233.PHONY: bundle
184- bundle: kustomize ## Generate bundle manifests and metadata, then validate generated files.
185- operator-sdk generate kustomize manifests -q
234+ bundle: kustomize operator-sdk ## Generate bundle manifests and metadata, then validate generated files.
235+ $(OPERATOR_SDK) generate kustomize manifests -q
186236 cd config/manager && $(KUSTOMIZE) edit set image controller=$(IMG)
187- $(KUSTOMIZE) build config/manifests | operator-sdk generate bundle $(BUNDLE_GEN_FLAGS)
188- operator-sdk bundle validate ./bundle
237+ $(KUSTOMIZE) build config/manifests | $(OPERATOR_SDK) generate bundle $(BUNDLE_GEN_FLAGS)
238+ $(OPERATOR_SDK) bundle validate ./bundle
189239`
190240
191241 makefileBundleBuildPushFragment = `
0 commit comments