Fix for GitHub releases API not returning all assets when querying the assets URL due to pagination
Use the assets list from the release result when available as it is not paginated. Otherwise request 64 items per page which is more than enough for our 30 odd assets
This commit is contained in:
parent
eb6d777790
commit
6d73306198
1 changed files with 10 additions and 6 deletions
16
publish.py
16
publish.py
|
|
@ -262,6 +262,7 @@ def make_request(
|
|||
'Authorization': self.auth,
|
||||
'Accept': 'application/vnd.github+json',
|
||||
'User-Agent': 'kitty',
|
||||
'X-GitHub-Api-Version': '2022-11-28',
|
||||
}
|
||||
if params:
|
||||
url += '?' + urlencode(params)
|
||||
|
|
@ -335,11 +336,11 @@ def __call__(self) -> None:
|
|||
# self.clean_older_releases(releases)
|
||||
release = self.create_release()
|
||||
upload_url = release['upload_url'].partition('{')[0]
|
||||
asset_url = f'{self.url_base}/assets/{{}}'
|
||||
existing_assets = self.existing_assets(release['id'])
|
||||
existing_assets = self.existing_assets(release)
|
||||
|
||||
def delete_asset(asset_id: str) -> None:
|
||||
self.delete_asset(asset_url.format(asset_id), fname)
|
||||
asset_url = release['assets_url'] + f'/{asset_id}'
|
||||
self.delete_asset(asset_url, fname)
|
||||
|
||||
def upload_with_retries(path: str, desc: str, num_tries: int = 8, sleep_time: float = 60.0) -> None:
|
||||
fname = os.path.basename(path)
|
||||
|
|
@ -399,9 +400,12 @@ def fail(self, r: HTTPResponse, msg: str) -> None:
|
|||
self.print_failed_response_details(r, msg)
|
||||
raise SystemExit(1)
|
||||
|
||||
def existing_assets(self, release_id: str) -> Dict[str, str]:
|
||||
url = f'{self.url_base}/{release_id}/assets'
|
||||
d = self.make_request_with_retries(url, failure_msg='Failed to get assets for release', return_data=True)
|
||||
def existing_assets(self, release: Dict[str, Any]) -> Dict[str, str]:
|
||||
if 'assets' in release:
|
||||
d = release['assets']
|
||||
else:
|
||||
d = self.make_request_with_retries(
|
||||
release['assets_url'], params={'per_page': '64'}, failure_msg='Failed to get assets for release', return_data=True)
|
||||
return {asset['name']: asset['id'] for asset in d}
|
||||
|
||||
def create_release(self) -> Dict[str, Any]:
|
||||
|
|
|
|||
Loading…
Reference in a new issue