Users/quenty/deploy improvements#730
Merged
Merged
Conversation
undici (global fetch) cannot send a streaming request body to the Open Cloud
place-versions endpoint — it throws "expected non-null body source" — so
byte-level upload progress was impossible and the retry loop compounded it by
re-sending an already-disturbed single-use stream ("body ... disturbed or
locked"), turning any single 429/5xx into a permanent upload failure.
Drive the upload through node-fetch (already a dependency), whose Node http
stack accepts a streaming body, with an explicit Content-Length so it isn't
chunked. The upload stays inside RateLimiter: fetchAsync gains an optional
fetchImpl and accepts an init factory so each retry attempt rebuilds a fresh,
un-disturbed stream. A counting Transform on the stream restores byte-level
progress.
Verified against the live endpoint on Node 24 (reaches a clean HTTP response
where undici threw at the transport layer).
Add docs/cli.md, a full reference for the nevermore CLI: every command and flag (init, install, login, test, deploy, batch, tools), global options, and a command tree, verified against live --help output. Index it in _AI_INDEX.md. Correct the deprecated hyphenated init-package/init-plugin examples to the canonical init package/init plugin subcommand form in install.md and the CLAUDE.md files. The hyphenated forms still work as hidden back-compat aliases; the subcommand forms are canonical.
A large place upload occasionally trips an edge proxy that answers 400 with an
HTML body ("Your browser sent an invalid request") — transient framing noise,
not the API rejecting the payload. Previously any 400 fell straight through and
failed the deploy, while an identical retry (as with the ECONNRESET path)
would have succeeded.
Retry a 400 only when the response is not application/json, so genuine
structured Open Cloud 400s are still surfaced immediately and never masked;
also retry 408 Request Timeout. Reuses the existing jittered backoff.
Add the nevermore-cli-manifest package. Its NevermoreCLIManifestUtils.getGameMetadata() returns the commit, branch, target, timestamp, place/universe IDs, and published flag of the deployment that built the running place, plus a `deployed` boolean that is false in Studio and undeployed builds. nevermore deploy and nevermore batch deploy now inject that metadata between the rojo build and the upload: a Lune transform finds the package's module in the built place by name and writes the values as attributes, so the data rides on the package instance and replicates to clients. Places without the package are left unchanged. Place and universe IDs are written as strings because Lune serializes number attributes as float32, which silently corrupts IDs above 2^24; the reader restores them with tonumber.
Stamp test builds with deploy metadata the same way a deploy does, so the manifest package's spec asserts the values the CLI actually injected instead of a synthetic fixture. runSingleTestAsync rewrites the built place in place (each test build is a unique per-session file), gated to packages that ship or depend on nevermore-cli-manifest so unrelated test builds skip the Lune pass. The spec now reads getGameMetadata() off the running place and checks deployed is true, the commit is a real SHA, the target is "test", and the place/universe IDs are positive numbers.
Owner
Author
|
🚀 PR was released in |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.