Exemple #1
0
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)
Exemple #2
0
 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
Exemple #3
0
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))
Exemple #4
0
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
Exemple #5
0
 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')
Exemple #6
0
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)
Exemple #7
0
 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')
Exemple #8
0
 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
Exemple #9
0
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))
Exemple #10
0
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)