Make GraphQL HTTP timeout configurable via RAILWAY_HTTP_TIMEOUT#932
Merged
Conversation
The CLI's GraphQL client used a hardcoded 30s timeout for every request, with no escape hatch. Long-running mutations — notably `environment new --duplicate` for a multi-service environment with volumes — intermittently exceed 30s and abort with "operation timed out". Raise the default to 90s and allow overriding it with the RAILWAY_HTTP_TIMEOUT env var (in seconds). Invalid values are surfaced as a warning and fall back to the default rather than being silently ignored. Note: this reduces how often the timeout fires but does not make `--duplicate` atomic; a partial failure can still orphan an empty environment. That fix is tracked separately. Closes #923 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
codyde
added a commit
that referenced
this pull request
Jun 4, 2026
…-browser-login * origin/master: (28 commits) chore: Release railwayapp version 5.0.0 feat(sandbox): fork, templates, and `--variable`/`--env-file` on create (#933) chore: Release railwayapp version 4.68.0 feat(volume): include modified time in files JSON (#931) chore: Release railwayapp version 4.67.0 Add service source connection support (#934) chore: Release railwayapp version 4.66.2 Make GraphQL HTTP timeout configurable via RAILWAY_HTTP_TIMEOUT (#932) chore: Release railwayapp version 4.66.1 feat(volume): show status and scheduled deletion date in volume list (#928) SSH Command: Handle Identity Files (#926) chore: Release railwayapp version 4.66.0 feat(sandbox): `railway sandbox` commands (create/list/ssh/exec/destroy) (#925) chore: Release railwayapp version 4.65.0 SSH Agent Support, `russh` edition. (#915) chore: Release railwayapp version 4.64.0 chore: Release railwayapp version 4.63.0 Rephrase agent advisory and gate by CLI version (#919) Forward --remote to setup agent in cli.new installer (#918) chore: Release railwayapp version 4.62.0 ... # Conflicts: # src/consts.rs # src/util/mod.rs
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.
Problem
The GraphQL client uses a hardcoded 30s timeout for every request (
src/client.rs), with no flag, env var, or config to extend it. Long-running mutations — notablyrailway environment new <name> --duplicate <source>for a multi-service environment with volumes — intermittently exceed 30s and abort withoperation timed out.Reported in #923 and seen by multiple users on the support thread.
Change
RAILWAY_HTTP_TIMEOUTenv var (in seconds), e.g.RAILWAY_HTTP_TIMEOUT=300.0, negative, non-numeric, decimal, empty) emit a warning on stderr and fall back to the default rather than being silently ignored.Tests
Added unit tests for the parsing helper (default / valid override / invalid fallback). Full client test module passes;
cargo buildis clean.Out of scope
This reduces how often the timeout fires but does not make
--duplicateatomic — a partial failure can still orphan an empty environment ("husk"). That's the deeper fix called out in #923 and should be tracked separately.Closes #923
🤖 Generated with Claude Code