Dont list all releases when publishing, instead just query the API for the existing release directly

This commit is contained in:
Kovid Goyal 2021-09-29 10:52:51 +05:30
parent cb1858ecc8
commit 35dee0c46e
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -17,7 +17,7 @@ import sys
import tempfile import tempfile
import time import time
from contextlib import contextmanager, suppress from contextlib import contextmanager, suppress
from typing import IO, Any, Dict, Generator, Iterable, List, Optional, cast from typing import IO, Any, Dict, Generator, Iterable, Optional, cast
import requests import requests
@ -257,9 +257,8 @@ class GitHub(Base): # {{{
) )
def __call__(self) -> None: def __call__(self) -> None:
releases = self.releases()
# self.clean_older_releases(releases) # self.clean_older_releases(releases)
release = self.create_release(releases) release = self.create_release()
upload_url = release['upload_url'].partition('{')[0] upload_url = release['upload_url'].partition('{')[0]
asset_url = self.url_base + 'assets/{}' asset_url = self.url_base + 'assets/{}'
existing_assets = self.existing_assets(release['id']) existing_assets = self.existing_assets(release['id'])
@ -333,20 +332,12 @@ class GitHub(Base): # {{{
self.fail(r, 'Failed to get assets for release') self.fail(r, 'Failed to get assets for release')
return {asset['name']: asset['id'] for asset in r.json()} return {asset['name']: asset['id'] for asset in r.json()}
def releases(self) -> List[Dict[str, Any]]: def create_release(self) -> Dict[str, Any]:
url = self.API + 'repos/%s/%s/releases' % (self.username, self.reponame
)
r = self.requests.get(url)
if r.status_code != 200:
self.fail(r, 'Failed to list releases')
return list(r.json())
def create_release(self, releases: Iterable[Dict[str, str]]) -> Dict[str, Any]:
' Create a release on GitHub or if it already exists, return the existing release ' ' Create a release on GitHub or if it already exists, return the existing release '
for release in releases:
# Check for existing release # Check for existing release
if release['tag_name'] == self.current_tag_name: r = self.requests.get(self.API + f'/repos/{self.username}/{self.reponame}/releases/tags/{self.current_tag_name}')
return release if r.status_code == 200:
return dict(r.json())
if self.is_nightly: if self.is_nightly:
raise SystemExit('No existing nightly release found on GitHub') raise SystemExit('No existing nightly release found on GitHub')
url = self.API + 'repos/%s/%s/releases' % (self.username, self.reponame) url = self.API + 'repos/%s/%s/releases' % (self.username, self.reponame)