@@ -220,51 +220,39 @@ def init(
220
220
variables_from_flags = {
221
221
v .key : v .value for v in parse_key_value_variables (variables )
222
222
}
223
- is_remote = any (
224
- template_source .startswith (prefix ) for prefix in ["git@" , "http://" , "https://" ] # type: ignore
225
- )
226
223
args_error_msg = f"Check whether { TemplateOption .param_decls [0 ]} and { SourceOption .param_decls [0 ]} arguments are correct."
227
224
228
225
# copy/download template into tmpdir, so it is going to be removed in case command ends with an error
229
226
with SecurePath .temporary_directory () as tmpdir :
230
- if is_remote :
231
- template_root = _fetch_remote_template (
232
- url = template_source , path = template , destination = tmpdir # type: ignore
233
- )
234
- else :
235
- template_root = _fetch_local_template (
236
- template_source = SecurePath (template_source ),
237
- path = template ,
238
- destination = tmpdir ,
239
- )
227
+ assert isinstance (template_source , str )
228
+ template_root = _fetch_template (template_source , template , tmpdir )
229
+
230
+ template_metadata = _read_template_metadata (
231
+ template_root , args_error_msg = args_error_msg
232
+ )
233
+ if template_metadata .minimum_cli_version :
234
+ _validate_cli_version (template_metadata .minimum_cli_version )
240
235
241
236
if ci_provider :
242
237
ci_provider_instance = CIProvider .from_choice (ci_provider )
243
238
if ci_template_source is not None :
244
239
with SecurePath .temporary_directory () as cicd_tmpdir :
245
- cicd_template_root = _fetch_remote_template (
246
- url = ci_template_source ,
247
- path = None ,
248
- destination = cicd_tmpdir
249
- # type: ignore
240
+ cicd_template_root = _fetch_template (
241
+ ci_template_source , None , cicd_tmpdir
242
+ )
243
+ ci_provider_instance .copy (cicd_template_root , template_root )
244
+ ci_template_metadata = _read_template_metadata (
245
+ cicd_template_root ,
246
+ args_error_msg = "template.yml is required for --ci-template-source." ,
250
247
)
251
- cicd_template_root . copy ( template_root . path )
248
+ template_metadata += ci_template_metadata
252
249
253
250
elif ci_provider_instance .has_template (template_root ):
254
251
pass # template has ci files
255
252
else :
256
- # use generic ci/cd template
257
- with SecurePath .temporary_directory () as cicd_tmpdir :
258
- cicd_template_root = _fetch_remote_template (
259
- url = DEFAULT_SOURCE , path = f"cicd/{ ci_provider_instance .name .lower ()} " , destination = cicd_tmpdir # type: ignore
260
- )
261
- cicd_template_root .copy (template_root .path )
262
-
263
- template_metadata = _read_template_metadata (
264
- template_root , args_error_msg = args_error_msg
265
- )
266
- if template_metadata .minimum_cli_version :
267
- _validate_cli_version (template_metadata .minimum_cli_version )
253
+ raise ClickException (
254
+ f"Template for { ci_provider_instance .name } CICD not provided and not configured on selected template."
255
+ )
268
256
269
257
variable_values = _determine_variable_values (
270
258
variables_metadata = template_metadata .variables ,
@@ -274,13 +262,12 @@ def init(
274
262
"project_dir_name" : SecurePath (path ).name ,
275
263
"snowflake_cli_version" : VERSION ,
276
264
}
277
- files_to_render = template_metadata . files_to_render + list (
278
- ci_provider_instance . get_files_to_render ( template_root )
265
+ log . debug (
266
+ "Rendering template files: %s" , ", " . join ( template_metadata . files_to_render )
279
267
)
280
- log .debug ("Rendering template files: %s" , ", " .join (files_to_render ))
281
268
render_template_files (
282
269
template_root = template_root ,
283
- files_to_render = files_to_render ,
270
+ files_to_render = template_metadata . files_to_render ,
284
271
data = variable_values ,
285
272
)
286
273
_remove_template_metadata_file (template_root )
@@ -291,5 +278,27 @@ def init(
291
278
return MessageResult (f"Initialized the new project in { path } " )
292
279
293
280
281
+ def _fetch_template (
282
+ template_source : str , template : Optional [str ], tmpdir : SecurePath
283
+ ) -> SecurePath :
284
+ if _is_remote_source (template_source ):
285
+ template_root = _fetch_remote_template (
286
+ url = template_source , path = template , destination = tmpdir # type: ignore
287
+ )
288
+ else :
289
+ template_root = _fetch_local_template (
290
+ template_source = SecurePath (template_source ),
291
+ path = template ,
292
+ destination = tmpdir ,
293
+ )
294
+ return template_root
295
+
296
+
297
+ def _is_remote_source (template_source : str ) -> bool :
298
+ return any (
299
+ template_source .startswith (prefix ) for prefix in ["git@" , "http://" , "https://" ] # type: ignore
300
+ )
301
+
302
+
294
303
def post_generate (template_root : SecurePath , ci_provider : Optional [CIProvider ]):
295
304
CIProviderManager .project_post_gen_cleanup (ci_provider , template_root )
0 commit comments