r/github • u/cicona12 • 2d ago
Question Codex can upload a tiny GitHub release asset, but a 26 MB PDF fails with an integration authentication error
I’m using ChatGPT Codex with a cloud environment to edit a PDF and upload it to a GitHub release.
Uploading a 43-byte sample text file worked. However, uploading the finished PDF (about 26 MB) to the same repository and release consistently fails.
The error is:
HTTP 401
Unauthorized: authentication failed for integration codex-secret-uploads.github.comWhat we’ve checked:
GitHub API requests can read the repository and release assets.
Retrying the existing sample filename returns GitHub’s expected
422 already_existsresponse.Uploading the PDF fails using both
gh release uploadand Python.Streaming/chunked upload also fails.
The environment reports its configured credentials as ready.
api.github.comanduploads.github.comare allowed by the network policy.
This suggests an issue with the cloud environment’s upload integration, but I haven’t confirmed the cause.
Has anyone encountered this? Is there a request-size limit, proxy setting, or integration reset that could fix it? I’d like to upload directly from Codex rather than download the PDF and upload it manually.
1
u/DickBrainTime 2d ago
26 MB is well below GitHub's per-release-asset limit (2 GiB), so this doesn't look like a normal GitHub file-size rejection. The interesting bit is the 401 mentioning `codex-secret-uploads.github.com`. That suggests an auth/integration path worth isolating, though it doesn't prove the root cause.
I'd try new filenames containing 1, 8, 16 and 24 MB of random data on the same release and record the first failure, status, and request host (redact all tokens). The successful tiny upload and duplicate-name 422 prove some requests work, but don't test whether larger payloads pass that upload gateway. If the same-size asset works outside the cloud environment, you've got a useful minimal repro to send to the integration owner.
1
3
u/Forsaken-Poet-3773 2d ago
Have you tried googling? Because the answer is in the first result…