compiler-explorer / compiler-explorer/ce-mcp

CI has been red on main since Sep 2025: three stacked causes (all diagnosed, fixes verified)

Open
#7 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
7
Forks
4
PR merge metrics
No merged PRs in 30d

Description

Context: this repo is largely deprecated now Compiler Explorer has a built-in MCP, so this issue documents the diagnosis (all findings locally verified, fixes tested) rather than demanding urgent work — for whoever next touches the repo.

## 1. `test` job: aioresponses is incompatible with aiohttp ≥ 3.14, and CI ignores the lock file

The `TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'` failures come from **aioresponses** (`core.py:197`), not the tests themselves. aiohttp **3.14.0 (2026-06-01)** made `stream_writer` required; even the newest aioresponses 0.7.9 is broken with it despite declaring `aiohttp<4.0`.

The repo *has* a `uv.lock` (aiohttp 3.12.14) — but CI never uses it: both jobs do `uv venv` + `uv pip install -e ".[dev]"` (test job via `setup.sh`), resolving fresh from PyPI each run against the loose `aiohttp>=3.9.0` in pyproject. So main broke on 2026-06-01 with **zero commits** (none since 2026-03-21). The lock is also stale (pyproject later gained `packaging>=23.0`), so `uv sync --locked` currently refuses.

Verified: CI-style install (aiohttp 3.14.1) reproduces the 9 failures; pinning aiohttp to 3.13.5 → **107 passed**.

**Fix:** constrain `"aiohttp>=3.9.0,<3.14"` in pyproject until aioresponses catches up, rerun `uv lock`, and switch CI to `uv sync --locked --all-extras` so PyPI releases can't break main silently again.

## 2. `lint-and-format` job: one mis-sorted import

Commit `2633bf6` ("cmake support", 2026-03-21) inserted `generate_cmake_share_url,` after `compare_compilers,` in `ce_mcp/server.py`'s `.tools` import block instead of its alphabetical slot after `find_compilers,`. Both locked isort 6.0.1 and current 8.0.1 flag it. **Fix:** `isort ce_mcp/ tests/` — a one-line move (verified passing).

## 3. The original Sep–Nov 2025 reds: live-network integration tests without `continue-on-error`

Last green 2025-09-25 01:10; first red 18 minutes later on a commit touching only unrelated scripts. That era's dependency versions pass today's unit tests locally, so those reds were almost certainly the **"Run all tests" step**, which re-runs the integration tests against live godbolt.org *without* the `continue-on-error` that the dedicated integration step has. **Fix:** drop that step or scope it to `-m "not integration"`.

Minor: the CI cache key hashes only `pyproject.toml` — hash `uv.lock` once CI actually uses it.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with pyproject.toml, uv.lock, ce_mcp/server.py, and the CI job setup referenced in the issue. Reproduce the CI-style install and run the test and lint commands, then verify the dependency constraint, refreshed lockfile, sorted imports, integration-test handling, and cache behavior leave all CI jobs passing.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, python
Domain
ci-cd, testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.