microsoft / microsoft/multilspy

ElixirLS initialize request times out in CI

Open
#145 0 comments 0 reactions 0 assignees View on GitHub

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:

  1. Downloads ElixirLS source from GitHub
  2. Fetches all Hex dependencies (elixir_sense, dialyxir, jason, etc.)
  3. 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

  1. Pre-warm the ElixirLS build in a CI setup step before running tests (run language_server.sh once and let it build, then kill it)
  2. Share a single ElixirLS instance across all Elixir tests (test fixture refactor)
  3. Use an older ElixirLS release (<= v0.22) that shipped pre-built .ez archives
  4. 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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.