feat(studio-bridge): add Linux/Wine support for headless Studio#672
Merged
Conversation
045302e to
2073c26
Compare
2073c26 to
cad437e
Compare
cad437e to
6b4733f
Compare
6b4733f to
e67f532
Compare
796ac70 to
0f6ff94
Compare
0f6ff94 to
a6ed2fc
Compare
a6ed2fc to
cdf2030
Compare
cdf2030 to
d3d3b04
Compare
d3d3b04 to
7a03ca0
Compare
7a03ca0 to
89adb59
Compare
89adb59 to
c980e52
Compare
Adds the linux/ module tree for running Roblox Studio under Wine on Linux, including virtual display management, shader patching, FFlag configuration, credential injection, and headless launch. Pre-registers ExecuteAction in the plugin at boot so execute messages work without needing registerAction. Accepts empty heartbeat payloads with defaults, surfaces plugin errors in the script execution listener, and extracts captured output from scriptComplete responses.
c980e52 to
f05fcd2
Compare
c45ce08 to
23c26b0
Compare
The Wine prefix init step starts Xvfb on :99 and kills it, but leaves /tmp/.X99-lock baked into the image. This causes the entrypoint to fail when starting Xvfb at runtime. Also adds concurrency groups and continue-on-error for the cleanup step.
- Remove branches: [main] restriction so feature branch pushes trigger builds - Add pull_request trigger for PR-based canary builds - Include tools/studio-bridge/src/** in paths to catch TS source changes - Append commit SHA to canary tag for unique versions per commit - Warn when local Docker image is stale (>7 days old)
Move all authentication code (cookie + API key) into nevermore-cli-helpers so both CLIs import from one place. - validateCookieAsync returns typed result instead of process.exit(1) - fetchWithCsrfAsync captures cookie rotation from set-cookie headers - Move credential-store.ts from nevermore-cli into helpers package - Remove re-export shim in nevermore-cli/utils/auth/roblox-auth
Rename auth/roblox-auth/ to auth/cookie/ and auth/credential-store.ts to auth/open-cloud/credential-store.ts. Makes the two distinct auth domains clear: cookie (session auth with CSRF, rotation, platform stores) vs open-cloud (static API key storage).
… 429 retry - Forward rotated cookie from create response to subsequent rename request in createPlaceInUniverseAsync - Add single retry with backoff on 429 rate limit responses - Verified against live Roblox API: CSRF exchange, cookie validation, and place rename all working
…ials` The old name was ambiguous — both CLIs had "auth" commands doing completely different things. The new name describes what it actually does: inject a .ROBLOSECURITY cookie into Wine's Credential Manager.
Combines studio-linux-docker-build and studio-linux-e2e into studio-linux-ci. Build job runs first, E2E uses its output image tag via needs:, fixing the version tear that caused rojo ENOENT.
env context is not available in container.image at job level.
GitHub Actions overrides HOME to /github/home, so ~/.wine resolves to the wrong path. Use $WINEPREFIX instead.
Wine's nsiproxy can't enumerate adapters through Docker's network namespace, causing DnsResolve failures. Host networking bypasses Docker's iptables-based DNS proxy so Wine sees real interfaces.
--network host conflicts with GitHub Actions' container networking. Use --dns to bypass Docker's iptables-based DNS proxy and --cap-add NET_RAW so Wine's nsiproxy can enumerate network interfaces.
Wine prefix initialized during docker build has stale network config. Running wineboot -u at runtime re-detects network interfaces so Wine can resolve DNS in the container's actual network namespace.
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.
Adds Linux/Wine support for running Roblox Studio headlessly, with a pre-built Docker image for fast CI. The
linux setup,linux auth, andlinux statuscommands handle Wine + Studio installation, credential injection, and health checks. A nightly Docker build workflow bakes everything into a container image so the E2E workflow starts in seconds instead of re-installing from scratch each run.Shared auth code (cookie resolution, CSRF handling) moved from nevermore-cli to nevermore-cli-helpers so both CLIs can use it. The process manager gained a Linux/Wine launch path using Xvfb + D3D11 rendering, and the bridge server now syncs dynamic action modules (like
execute.luau) to the plugin before first use, fixing UNKNOWN_REQUEST errors on the v2 protocol path.