Use Alpine-based grafana/mcp-grafana image to clear container scan findings - #51728
Conversation
…ndings Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
|
@copilot fix agentic workflow to fix Grype could not be run locally (its vulnerability DB host is blocked by the sandbox firewall), so CVE counts for the new image should be confirmed by the next scheduled scan. |
There was a problem hiding this comment.
Pull request overview
Switches the shared Grafana MCP component to the pinned Alpine image to reduce Debian-derived scan findings.
Changes:
- Uses
grafana/mcp-grafana:1.0.0-alpine. - Refreshes container pins and generated workflows.
- Adds release notes explaining the migration.
Show a summary per file
| File | Description |
|---|---|
.changeset/grafana-mcp-alpine-image.md |
Documents the image migration. |
.github/aw/actions-lock.json |
Updates the canonical container pin. |
.github/workflows/daily-token-consumption-report.lock.yml |
Refreshes generated metadata. |
.github/workflows/portfolio-analyst.lock.yml |
Uses the pinned Alpine image. |
.github/workflows/shared/mcp/grafana.md |
Selects and documents the Alpine variant. |
.github/workflows/smoke-otel-backends.lock.yml |
Uses the pinned Alpine image. |
pkg/actionpins/data/action_pins.json |
Synchronizes embedded action-pin data. |
pkg/workflow/data/action_pins.json |
Synchronizes workflow pin data. |
Review details
Tip
Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
- Files reviewed: 8/8 changed files
- Comments generated: 2
- Review effort level: Balanced
| mcp-servers: | ||
| grafana: | ||
| container: "grafana/mcp-grafana" | ||
| container: "grafana/mcp-grafana:1.0.0-alpine" |
| "gh-aw": patch | ||
| --- | ||
|
|
||
| The `shared/mcp/grafana.md` component now uses the Alpine-based `grafana/mcp-grafana:1.0.0-alpine` image instead of the untagged (Debian bookworm-slim) image. The Debian base layer shipped a large set of OS packages (perl-base, libc-bin, util-linux, ...) responsible for all of the container scan findings; the Alpine variant removes those packages and pins the component to an explicit release tag. |
Looked into this and the blocked Grype run turned out to be hiding a real bug rather than just a sandbox limitation.
Fixed in
The scanners run on the bare runner before the AWF firewall is installed, so the workflow's |
|
🎉 This pull request is included in a new release. Release: |
The daily container scan reported 26 CVEs (7 Critical) and 90 license violations for
grafana/mcp-grafana. All of them originate from the Debianbookworm-slimbase layer of the untagged (latest) image — the pinned digestsha256:5efeafd0…is already the newestlatest, so re-pinning cannot fix anything.Upstream publishes an Alpine variant (
Dockerfile.alpine:alpine:3.23+apk upgrade) with an identical entrypoint. The shared component now uses it, pinned to a release tag.shared/mcp/grafana.md—container: grafana/mcp-grafana:1.0.0-alpine, with a comment recording why the Debian variant is avoided..github/aw/actions-lock.jsonrefreshed tografana/mcp-grafana:1.0.0-alpine@sha256:b04c198d…, synced intopkg/actionpins/data/action_pins.jsonandpkg/workflow/data/action_pins.json. The unrelatedgh-aw-nodebump that--force-refresh-container-pinspicked up was reverted to keep the diff scoped.Grant, run with the repo
.grant.yaml, drops from 90 to 12 denied packages — all standard Alpine base packages (busybox,apk-tools,musl-utils,ca-certificates,zlib); the entire Debian OS package set and its CVEs are gone. Those 12 remaining denials are the same base-package class other Alpine images in this repo produce and are left for a separate policy decision rather than widening the license allowlist here.Grype could not be run locally (its vulnerability DB host is blocked by the sandbox firewall), so CVE counts for the new image should be confirmed by the next scheduled scan.