@@ -354,48 +354,42 @@ def read_valid_value(var: TemplateParameter, default_value=None):
354354class EmbeddedTemplates (TemplatesSource ):
355355 """Represent templates that are bundled with Renku.
356356
357- For embedded templates, ``source`` is "renku" and ``version`` is set to the installed Renku version. ``reference``
358- should not be set for such projects.
357+ For embedded templates, ``source`` is "renku". In the old versioning scheme, ``version`` is set to the installed
358+ Renku version and ``reference`` is not set. In the new scheme, both ``version`` and ``reference`` are set to the
359+ template version.
359360 """
360361
361362 @classmethod
362363 def fetch (cls , source : Optional [str ], reference : Optional [str ]) -> "EmbeddedTemplates" :
363364 """Fetch embedded Renku templates."""
364- from renku import __version__
365-
366- if reference and reference != "master" :
367- raise errors .ParameterError ("Templates included in renku don't support specifying a template reference" )
365+ from renku import __template_version__
368366
369367 path = importlib_resources .files ("renku" ) / "templates"
370368 with importlib_resources .as_file (path ) as folder :
371369 path = Path (folder )
372370
373- return cls (path = path , source = "renku" , reference = None , version = str (__version__ ))
374-
375- def is_update_available (self , id : str , reference : Optional [str ], version : Optional [str ]) -> Tuple [bool , str ]:
376- """Return True if an update is available along with the latest version of a template."""
377- latest_version = self .get_latest_version (id = id , reference = reference , version = version )
378- update_available = latest_version is not None and latest_version != version
379-
380- return update_available , latest_version
371+ return cls (path = path , source = "renku" , reference = __template_version__ , version = __template_version__ )
381372
382- def get_all_versions (self , id ) -> List [str ]:
383- """Return all available versions for a template id."""
373+ def get_all_references (self , id ) -> List [str ]:
374+ """Return all available references for a template id."""
384375 template_exists = any (t .id == id for t in self .templates )
385- return [self .version ] if template_exists else []
376+ return [self .reference ] if template_exists else []
386377
387- def get_latest_version (self , id : str , reference : Optional [str ], version : Optional [str ]) -> Optional [str ]:
388- """Return latest version number of a template."""
378+ def get_latest_reference_and_version (
379+ self , id : str , reference : Optional [str ], version : Optional [str ]
380+ ) -> Optional [Tuple [str , str ]]:
381+ """Return latest reference and version number of a template."""
389382 if version is None :
390383 return
384+ elif reference is None or reference != version : # Old versioning scheme
385+ return self .reference , self .version
391386
392- template_version = Version (self .version )
393387 try :
394388 current_version = Version (version )
395389 except ValueError : # NOTE: version is not a valid SemVer
396- return str ( template_version )
390+ return self . reference , self . version
397391 else :
398- return str ( template_version ) if current_version < template_version else version
392+ return ( self . reference , self . version ) if current_version < Version ( self . version ) else ( reference , version )
399393
400394 def get_template (self , id , reference : Optional [str ]) -> Optional ["Template" ]:
401395 """Return all available versions for a template id."""
@@ -432,14 +426,7 @@ def fetch(cls, source: Optional[str], reference: Optional[str]) -> "RepositoryTe
432426
433427 return cls (path = path , source = source , reference = reference , version = version , repository = repository )
434428
435- def is_update_available (self , id : str , reference : Optional [str ], version : Optional [str ]) -> Tuple [bool , str ]:
436- """Return True if an update is available along with the latest version of a template."""
437- latest_version = self .get_latest_version (id = id , reference = reference , version = version )
438- update_available = latest_version is not None and latest_version != reference
439-
440- return update_available , latest_version
441-
442- def get_all_versions (self , id ) -> List [str ]:
429+ def get_all_references (self , id ) -> List [str ]:
443430 """Return a list of git tags that are valid SemVer and include a template id."""
444431 versions = []
445432 for tag in self .repository .tags :
@@ -454,20 +441,22 @@ def get_all_versions(self, id) -> List[str]:
454441
455442 return [str (v ) for v in sorted (versions )]
456443
457- def get_latest_version (self , id : str , reference : Optional [str ], version : Optional [str ]) -> Optional [str ]:
458- """Return latest version number of a template."""
444+ def get_latest_reference_and_version (
445+ self , id : str , reference : Optional [str ], version : Optional [str ]
446+ ) -> Optional [Tuple [str , str ]]:
447+ """Return latest reference and version number of a template."""
459448 if version is None :
460449 return
461450
462451 tag = to_semantic_version (reference )
463452
464453 # NOTE: Assume that a SemVer reference is always a tag
465454 if tag :
466- versions = self .get_all_versions (id = id )
467- return versions [- 1 ] if len (versions ) > 0 else None
455+ references = self .get_all_references (id = id )
456+ return ( references [- 1 ], self . version ) if len (references ) > 0 else None
468457
469458 # NOTE: Template's reference is a branch or SHA and the latest version is RepositoryTemplates' version
470- return self .version
459+ return reference , self .version
471460
472461 def _has_template_at (self , id : str , reference : str ) -> bool :
473462 """Return if template id is available at a reference."""
0 commit comments