microsoft / microsoft/multilspy
ElixirLS initialize request times out in CI
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 610
- Forks
- 111
- PR merge metrics
- No merged PRs in 30d
Description
Root cause
ElixirLS v0.30.0 is not a pre-built binary. The downloaded zip contains only launch scripts and an installer.exs. On first launch, language_server.sh runs:
echo "" | elixir "$SCRIPTPATH/quiet_install.exs" >/dev/null || exit 1
This triggers Mix.install which:
- Downloads ElixirLS source from GitHub
- Fetches all Hex dependencies (elixir_sense, dialyxir, jason, etc.)
- Compiles everything
This blocking build takes several minutes and runs before the LSP server starts. The initialize request sits in the stdin pipe unread until the build completes.
Why CI times out
Each test creates a new ElixirLS server instance. Even though the server binary is shared, Mix.install runs inside each subprocess. If the Mix.install cache (~/.cache/mix/installs/) is not shared across instances, each test pays the full build cost: 8 async + 8 sync tests × 600s timeout = 160+ minutes.
Possible fixes
- Pre-warm the ElixirLS build in a CI setup step before running tests (run
language_server.shonce and let it build, then kill it) - Share a single ElixirLS instance across all Elixir tests (test fixture refactor)
- Use an older ElixirLS release (<= v0.22) that shipped pre-built
.ezarchives - Cache
~/.cache/mix/installs/in CI so subsequent runs are fast
Tests are currently skipped in CI with a reference to this issue.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with language_server.sh and quiet_install.exs to confirm how Mix.install blocks the initialize request, then inspect the CI setup and the async and sync tests that are currently skipped. Compare the listed pre-warming, shared-instance, older-release, and cache approaches. Done means the Elixir tests run reliably in CI without timing out.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- elixir, python, shell
- Domain
- ci-cd, developer-experience, testing-qa
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100