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