Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dep: Fix verify_and_print_latest_release logic #19111

Merged
merged 1 commit into from
Nov 30, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 33 additions & 19 deletions tools/dependency/release_dates.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import utils
from colorama import Fore, Style
from packaging import version
from packaging.version import parse as parse_version

# Tag issues created with these labels.
LABELS = ['dependencies', 'area/build', 'no stalebot']
Expand Down Expand Up @@ -60,16 +61,31 @@ def format_utc_date(date):
return date.date().isoformat()


# Get the chronologically latest release from a github repo
def get_latest_release(repo, version_min):
current_version = parse_version(version_min)
latest_version = current_version
latest_release = None
for release in repo.get_releases():
version = parse_version(release.tag_name)
if not version:
continue
if version >= latest_version:
latest_release = release
latest_version = version
return latest_release


# Obtain latest release version and compare against metadata version, warn on
# mismatch.
def verify_and_print_latest_release(dep, repo, metadata_version, release_date, create_issue=False):
try:
latest_release = repo.get_latest_release()
latest_release = get_latest_release(repo, metadata_version)
except github.GithubException as err:
# Repositories can not have releases or if they have releases may not publish a latest releases. Return
print(f'GithubException {repo.name}: {err.data} {err.status} while getting latest release.')
return
if latest_release.created_at > release_date and latest_release.tag_name != metadata_version:
if latest_release and latest_release.created_at > release_date and latest_release.tag_name != metadata_version:
print(
f'{Fore.YELLOW}*WARNING* {dep} has a newer release than {metadata_version}@<{release_date}>: '
f'{latest_release.tag_name}@<{latest_release.created_at}>{Style.RESET_ALL}')
Expand Down Expand Up @@ -203,29 +219,27 @@ def verify_and_print_release_date(dep, github_release_date, metadata_release_dat

# Extract release date from GitHub API for tagged releases.
def get_tagged_release_date(repo, metadata_version, github_release):

try:
latest = repo.get_latest_release()
latest = get_latest_release(repo, github_release.version)
if latest:
release = repo.get_release(github_release.version)
return release.published_at
except github.GithubException as err:
# Repositories can not have releases or if they have releases may not publish a latest releases. If this is the case we keep going
latest = ''
print(f'GithubException {repo.name}: {err.data} {err.status} while getting latest release.')

if latest:
release = repo.get_release(github_release.version)
return release.published_at
else:
tags = repo.get_tags()
current_metadata_tag_commit_date = ''
for tag in tags.reversed:
if tag.name == github_release.version:
current_metadata_tag_commit_date = tag.commit.commit.committer.date
if not version.parse(tag.name).is_prerelease and version.parse(
tag.name) > version.parse(github_release.version):
print(
f'{Fore.YELLOW}*WARNING* {repo.name} has a newer release than {github_release.version}@<{current_metadata_tag_commit_date}>: '
f'{tag.name}@<{tag.commit.commit.committer.date}>{Style.RESET_ALL}')
return current_metadata_tag_commit_date
tags = repo.get_tags()
current_metadata_tag_commit_date = ''
for tag in tags.reversed:
if tag.name == github_release.version:
current_metadata_tag_commit_date = tag.commit.commit.committer.date
if not version.parse(tag.name).is_prerelease and version.parse(tag.name) > version.parse(
github_release.version):
print(
f'{Fore.YELLOW}*WARNING* {repo.name} has a newer release than {github_release.version}@<{current_metadata_tag_commit_date}>: '
f'{tag.name}@<{tag.commit.commit.committer.date}>{Style.RESET_ALL}')
return current_metadata_tag_commit_date


# Extract release date from GitHub API for untagged releases.
Expand Down