ci: free gitee release storage before uploads

Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
This commit is contained in:
naiba
2026-05-19 05:06:38 +00:00
co-authored by naiba/CloudCode
parent d8f077ffa2
commit a5e2b0c36d
+19 -19
View File
@@ -60,7 +60,7 @@ def get_github_latest_release():
print("No releases found.") print("No releases found.")
def delete_gitee_releases(latest_id, client, uri, token): def delete_gitee_releases(keep_id, keep_tag, client, uri, token):
get_data = { get_data = {
'access_token': token 'access_token': token
} }
@@ -70,28 +70,29 @@ def delete_gitee_releases(latest_id, client, uri, token):
if release_response.status_code == 200: if release_response.status_code == 200:
release_info = release_response.json() release_info = release_response.json()
else: else:
print( raise ValueError(
f"Request failed with status code {release_response.status_code}") f"List releases failed with status code {release_response.status_code}")
release_ids = [] release_ids = []
for block in release_info: for block in release_info:
if 'id' in block: release_id = block.get('id')
release_ids.append(block['id']) release_tag = block.get('tag_name')
if release_id == keep_id or release_tag == keep_tag:
print(f'Keep current release {release_tag} #{release_id}.')
continue
if release_id is not None:
release_ids.append((release_id, release_tag))
print(f'Current release ids: {release_ids}') print(f'Older release ids: {[release_id for release_id, _ in release_ids]}')
if latest_id in release_ids:
release_ids.remove(latest_id)
else:
print(f'Release #{latest_id} is not in the release list, skip deleting older releases.')
for id in release_ids: for release_id, release_tag in release_ids:
release_uri = f"{uri}/{id}" release_uri = f"{uri}/{release_id}"
delete_data = { delete_data = {
'access_token': token 'access_token': token
} }
delete_response = request_with_retries(client, 'DELETE', release_uri, params=delete_data) delete_response = request_with_retries(client, 'DELETE', release_uri, params=delete_data)
if delete_response.status_code == 204: if delete_response.status_code == 204:
print(f'Successfully deleted release #{id}.') print(f'Successfully deleted older release {release_tag} #{release_id}.')
else: else:
raise ValueError( raise ValueError(
f"Request failed with status code {delete_response.status_code}") f"Request failed with status code {delete_response.status_code}")
@@ -129,6 +130,11 @@ def sync_to_gitee(tag: str, body: str, files: slice):
release_id = release_info.get('id') release_id = release_info.get('id')
print(f"Gitee release id: {release_id}") print(f"Gitee release id: {release_id}")
# Free Gitee release storage before dashboard asset uploads. Gitee can time out
# while accepting large ZIPs if older release assets still consume the quota.
delete_gitee_releases(release_id, tag, api_client, release_api_uri, access_token)
asset_api_uri = f"{release_api_uri}/{release_id}/attach_files" asset_api_uri = f"{release_api_uri}/{release_id}/attach_files"
uploaded_assets = get_gitee_asset_names(release_info) uploaded_assets = get_gitee_asset_names(release_info)
@@ -141,12 +147,6 @@ def sync_to_gitee(tag: str, body: str, files: slice):
upload_gitee_asset(api_client, asset_api_uri, release_api_uri, access_token, tag, file_path) upload_gitee_asset(api_client, asset_api_uri, release_api_uri, access_token, tag, file_path)
uploaded_assets.add(asset_name) uploaded_assets.add(asset_name)
# 仅保留最新 Release 以防超出 Gitee 仓库配额
try:
delete_gitee_releases(release_id, api_client, release_api_uri, access_token)
except ValueError as e:
print(e)
api_client.close() api_client.close()
print("Sync is completed!") print("Sync is completed!")