From d0c6bfa903cfbe35aaa492a3adb3674d1c0f5fad Mon Sep 17 00:00:00 2001 From: using-system Date: Sun, 20 Sep 2026 12:16:23 +0200 Subject: [PATCH] chore(mcp): bump the local stack image to grafana/otel-lgtm 0.33.1 - Pyroscope 2.3.1, the image's healthcheck waits for the stack's ready marker IMAGE moves to grafana/otel-lgtm:0.33.1 with the unit-test expectations naming the tag; the env reference's pinned-tag line moves and LGTM_READY_FILE joins its lifecycle section (the marker the image's own HEALTHCHECK now waits for - nothing of the server reads it, odd_stack_up keeps its own probes). Grafana 13.2.1, the collector 0.160.0, Prometheus 3.14.0, Tempo 3.0.3 and Loki 3.7.7 unchanged. Verified live: the four signals round-tripped on the 0.33.1 container, unit and integration suites green. Closes #640 Co-Authored-By: Claude Opus 5 (1M context) --- .../setup-local-stack/references/otel-lgtm-env.md | 6 +++++- src/mcp-server/app/stack.py | 2 +- tests/mcp-server/test_stack.py | 12 ++++++------ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.apm/skills/setup-local-stack/references/otel-lgtm-env.md b/.apm/skills/setup-local-stack/references/otel-lgtm-env.md index 7666adc..ef61828 100644 --- a/.apm/skills/setup-local-stack/references/otel-lgtm-env.md +++ b/.apm/skills/setup-local-stack/references/otel-lgtm-env.md @@ -3,7 +3,7 @@ Environment variables are the container's **only** configuration surface, and `odd_stack_up` / `odd_stack_reset` (`env` parameter) are how they reach it. This catalog is built from the pinned image's own tag — -**`grafana/otel-lgtm:0.33.0`** (its README and `docker/run-*.sh` +**`grafana/otel-lgtm:0.33.1`** (its README and `docker/run-*.sh` scripts) — and must be re-validated on every pin bump; when the pin and this file disagree, trust the tag. @@ -117,6 +117,10 @@ what breaks it is changing `GF_SECURITY_ADMIN_USER` / - `LGTM_SHUTDOWN_TIMEOUT_SECONDS` — grace period (default 5 s) before still-running components are forcefully stopped on SIGTERM/SIGINT. +- `LGTM_READY_FILE` — path of the marker `run-all.sh` writes once every + component is up (default `/tmp/ready`); the image's own `HEALTHCHECK` + waits for it before probing the components. Nothing here reads it: + `odd_stack_up` judges readiness with its own probes. - `OTEL_COLLECTOR_DEBUG_EXPORTER=true` — adds the collector's debug exporter, printing received telemetry to the component logs (pair with `ENABLE_LOGS_OTELCOL=true`). diff --git a/src/mcp-server/app/stack.py b/src/mcp-server/app/stack.py index 2fbb9d4..1457e88 100644 --- a/src/mcp-server/app/stack.py +++ b/src/mcp-server/app/stack.py @@ -30,7 +30,7 @@ # forwarding, OBI, GF_*) is cataloged in the setup-local-stack skill's # otel-lgtm-env reference, built from this exact tag - re-validate it on # every pin bump. -IMAGE = "grafana/otel-lgtm:0.33.0" +IMAGE = "grafana/otel-lgtm:0.33.1" CONTAINER_NAME = "oddyssey-lgtm" # Part of the embedded definition, not an option (issue #34): CLI coding diff --git a/tests/mcp-server/test_stack.py b/tests/mcp-server/test_stack.py index 2c743b0..caeac8a 100644 --- a/tests/mcp-server/test_stack.py +++ b/tests/mcp-server/test_stack.py @@ -27,7 +27,7 @@ def test_run_args_build_the_pinned_container(): assert args[:2] == ["docker", "run"] assert args[-1] == IMAGE - assert IMAGE == "grafana/otel-lgtm:0.33.0" + assert IMAGE == "grafana/otel-lgtm:0.33.1" assert CONTAINER_NAME in args for mapping in ("3000:3000", "4317:4317", "4318:4318", "4040:4040"): assert mapping in args @@ -176,7 +176,7 @@ def _raw_container(env=None, image_id="sha256:cafe", **identity): "State": {"StartedAt": identity.get("started", "2026-08-29T08:12:04.5Z")}, "Image": image_id, "Config": { - "Image": identity.get("image", "grafana/otel-lgtm:0.33.0"), + "Image": identity.get("image", "grafana/otel-lgtm:0.33.1"), "Env": env if env is not None else ["PATH=/usr/bin"], }, } @@ -217,7 +217,7 @@ def handler(request: httpx.Request) -> httpx.Response: status = stack_status(transport=httpx.MockTransport(handler)) assert status["running"] is True - assert status["image"] == "grafana/otel-lgtm:0.33.0" + assert status["image"] == "grafana/otel-lgtm:0.33.1" assert status["created"] == "2026-08-29T08:12:03.1Z" assert status["started"] == "2026-08-29T08:12:04.5Z" assert status["env"] == {"GF_LOG_LEVEL": "debug"} @@ -1783,7 +1783,7 @@ def fake_docker(*args, **kwargs): monkeypatch.setattr(stack, "_docker", fake_docker) status = stack_status(transport=httpx.MockTransport(lambda r: httpx.Response(200))) - assert status["image"] == "grafana/otel-lgtm:0.33.0" + assert status["image"] == "grafana/otel-lgtm:0.33.1" assert status["created"] == "2026-09-16T08:00:00.0Z" assert status["env"] == {"GF_LOG_LEVEL": "debug"} assert calls == [("inspect", stack.CONTAINER_NAME, stack.IMAGE)] @@ -1854,12 +1854,12 @@ def fake_docker(*args, **kwargs): stdout=json.dumps( [_raw_container(env=["PATH=/usr/bin", "GF_LOG_LEVEL=debug"])] ), - stderr="No such object: grafana/otel-lgtm:0.33.0", + stderr="No such object: grafana/otel-lgtm:0.33.1", ) monkeypatch.setattr(stack, "_docker", fake_docker) status = stack_status(transport=httpx.MockTransport(lambda r: httpx.Response(200))) - assert status["image"] == "grafana/otel-lgtm:0.33.0" + assert status["image"] == "grafana/otel-lgtm:0.33.1" assert status["env"] == {"GF_LOG_LEVEL": "debug"} assert [c[0] for c in calls] == ["inspect", "image"]