fix: use multipart upload for Composer Registry (fixes 500 error)

This commit is contained in:
2026-03-26 06:22:27 +00:00
parent 8c6cd8a3ef
commit 188c5fb878
+13 -4
View File
@@ -97,17 +97,26 @@ def gitea_api(method, path, data=None, raw=False):
def gitea_upload(url, file_data, filename):
"""Upload file to Gitea (Composer registry or release asset)."""
headers = {'Authorization': f'token {GITEA_TOKEN}'}
req = urllib.request.Request(url, data=file_data, headers=headers, method='PUT')
boundary = '----FormBoundary' + os.urandom(8).hex()
body = (
f'--{boundary}\r\n'
f'Content-Disposition: form-data; name="package"; filename="{filename}"\r\n'
f'Content-Type: application/zip\r\n\r\n'
).encode() + file_data + f'\r\n--{boundary}--\r\n'.encode()
headers = {
'Authorization': f'token {GITEA_TOKEN}',
'Content-Type': f'multipart/form-data; boundary={boundary}'
}
req = urllib.request.Request(url, data=body, headers=headers, method='PUT')
try:
resp = urllib.request.urlopen(req, context=SSL_CTX, timeout=60)
return {'status': 'ok', 'code': resp.getcode()}
except urllib.error.HTTPError as e:
code = e.code
body = e.read().decode()[:200]
msg = e.read().decode()[:200]
if code == 409:
return {'status': 'exists', 'code': 409, 'message': 'already exists'}
return {'status': 'error', 'code': code, 'message': body}
return {'status': 'error', 'code': code, 'message': msg}
# --- Build logic (from Gitea, no local files) ---