def greatest_component_version(component_name: str, ctx_repo_base_url: str) -> str: image_tags = component_versions( component_name=component_name, ctx_repo_base_url=ctx_repo_base_url, ) return version.find_latest_version(image_tags)
def latest_component_version(self, component_name: str): component_reference = ComponentReference.create(name=component_name, version=None) repo_helper = self._repository_helper(component_reference) latest_version = version.find_latest_version( repo_helper.release_versions()) return latest_version
def find_greatest_github_release_version( releases: [github3.repos.release.Release], ): # currently, non-draft-releases are not created with a name by us. Use the tag name as fallback release_versions = [ release.name if release.name else release.tag_name for release in releases ] def filter_non_semver_parseable_releases(release_name): try: version.parse_to_semver(release_name) return True except ValueError: ci.util.warning( f"Skipping release with non semver-parseable name {release_name}" ) return False release_versions = [ name for name in filter(filter_non_semver_parseable_releases, release_versions) ] release_version_infos = [ version.parse_to_semver(release_version) for release_version in release_versions ] return str(version.find_latest_version(release_version_infos))
def find_greatest_github_release_version( releases: [github3.repos.release.Release], warn_for_unparseable_releases: bool = True, ): # currently, non-draft-releases are not created with a name by us. Use the tag name as fallback release_versions = [ release.name if release.name else release.tag_name for release in releases ] def filter_non_semver_parseable_releases(release_name): try: version.parse_to_semver(release_name) return True except ValueError: if warn_for_unparseable_releases: ci.util.warning( f'ignoring release {release_name=} (not semver)') return False release_versions = [ name for name in filter(filter_non_semver_parseable_releases, release_versions) ] release_version_infos = [ version.parse_to_semver(release_version) for release_version in release_versions ] latest_version = version.find_latest_version(release_version_infos) if latest_version: return str(latest_version) else: return None
def test_find_latest_version(self): versions = (semver.parse_version_info(v) for v in ( '0.0.10', '0.20.1', '2.50.100', '3.0.1', '1.0.0', )) result = examinee.find_latest_version(versions) self.assertEqual(str(result), '3.0.1')
def greatest_component_version( component_name: str, ctx_repo_base_url: str, ignore_prerelease_versions: bool = False, ) -> str: image_tags = component_versions( component_name=component_name, ctx_repo_base_url=ctx_repo_base_url, ) return version.find_latest_version(image_tags, ignore_prerelease_versions)
def test_ignore_prerelease_versions(self): versions = (semver.VersionInfo.parse(v) for v in ( '0.0.10', '3.0.1', '1.0.0', '3.1.0-foo-bar', ) ) result = examinee.find_latest_version(versions, ignore_prerelease_versions=True) self.assertEqual(str(result), '3.0.1')
def latest_component_version(self, component_name: str): component_reference = ComponentReference.create(name=component_name, version=None) repo_helper = self._repository_helper(component_reference) latest_version = version.find_latest_version( repo_helper.release_versions()) if not latest_version: raise ValueError( f'Component {component_name} has no valid release') return latest_version
def find_greatest_github_release_version( releases: [github3.repos.release.Release], ): # currently, non-draft-releases are not created with a name by us. Use the tag name as fallback release_versions = [ release.name if release.name else release.tag_name for release in releases ] release_version_infos = [ semver.parse_version_info(release_version) for release_version in release_versions ] return str(version.find_latest_version(release_version_infos))
def greatest_component_version( component_name: str, ctx_repo_base_url: str=None, ctx_repo: cm.RepositoryContext=None, ignore_prerelease_versions: bool=False, ) -> str: if not (bool(ctx_repo_base_url) ^ bool(ctx_repo)): raise ValueError('exactly one of ctx_repo_base_url, ctx_repo must be passed') if ctx_repo_base_url: logger.warning('passing ctx_repo_base_url is deprecated - pass ctx_repo instead!') ctx_repo = cm.OciRepositoryContext(baseUrl=ctx_repo_base_url) if not isinstance(ctx_repo, cm.OciRepositoryContext): raise NotImplementedError(ctx_repo) image_tags = component_versions( component_name=component_name, ctx_repo=ctx_repo, ) return version.find_latest_version(image_tags, ignore_prerelease_versions)