fix: use multipart upload for Composer Registry (fixes 500 error)
This commit is contained in:
@@ -97,17 +97,26 @@ def gitea_api(method, path, data=None, raw=False):
|
|||||||
|
|
||||||
def gitea_upload(url, file_data, filename):
|
def gitea_upload(url, file_data, filename):
|
||||||
"""Upload file to Gitea (Composer registry or release asset)."""
|
"""Upload file to Gitea (Composer registry or release asset)."""
|
||||||
headers = {'Authorization': f'token {GITEA_TOKEN}'}
|
boundary = '----FormBoundary' + os.urandom(8).hex()
|
||||||
req = urllib.request.Request(url, data=file_data, headers=headers, method='PUT')
|
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:
|
try:
|
||||||
resp = urllib.request.urlopen(req, context=SSL_CTX, timeout=60)
|
resp = urllib.request.urlopen(req, context=SSL_CTX, timeout=60)
|
||||||
return {'status': 'ok', 'code': resp.getcode()}
|
return {'status': 'ok', 'code': resp.getcode()}
|
||||||
except urllib.error.HTTPError as e:
|
except urllib.error.HTTPError as e:
|
||||||
code = e.code
|
code = e.code
|
||||||
body = e.read().decode()[:200]
|
msg = e.read().decode()[:200]
|
||||||
if code == 409:
|
if code == 409:
|
||||||
return {'status': 'exists', 'code': 409, 'message': 'already exists'}
|
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) ---
|
# --- Build logic (from Gitea, no local files) ---
|
||||||
|
|||||||
Reference in New Issue
Block a user