• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stacklok / toolhive / 38864104745
71%

Build:
DEFAULT BRANCH: main
Ran 16 Oct 2026 07:04AM UTC
Jobs 1
Files 955
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

16 Oct 2026 06:56AM UTC coverage: 71.338% (-0.01%) from 71.349%
38864104745

push

github

web-flow
Grant pods/attach only for stdio transport (#6841)

* Grant pods/attach only for stdio transport

The proxy-runner Role created for every MCPServer carried
pods/attach (create, get) regardless of transport. Only stdio
uses it: the runner reaches a stdio MCP server by attaching to
its pod through Client.AttachToWorkload, which is called only
from pkg/transport/stdio.go. A streamable-http or sse server
talks to its pod over the network and never attaches.

Security auditors flag pods/attach as equivalent to pod exec,
so clusters with strict policies saw a finding on every
MCPServer deployment for a permission that could not be used.

Split the rule out of defaultRBACRules into stdioRBACRules and
choose between them in rbacRulesForTransport. An absent
transport is treated as stdio, matching the CRD default, so an
object stored before that default existed keeps working.

Already-deployed servers are corrected without operator action:
EnsureRBACResources replaces Rules wholesale, so the next
reconcile rewrites the Role.

Closes #6230

Signed-off-by: hellouz818 <hellouz818@gmail.com>

* Split proxy-runner Role fixtures by transport

The chainsaw operator E2E suites asserted one shared
proxyrunner-role.yaml for the stdio, sse, streamable-http and
stdio-streamable-http scenarios. That stopped holding once
pods/attach became transport-dependent: chainsaw matches the
rules array positionally and on length, so the stdio scenarios
failed on the rule having moved to the end, and the HTTP ones
would fail on it being absent.

Replace the shared file with proxyrunner-role-stdio.yaml (six
rules, pods/attach last) and proxyrunner-role-http.yaml (the
five shared rules), and point each scenario at the one matching
the transport in its mcpserver.yaml. Both files still spell out
the complete expected Role, so an over-granted rule fails the
assertion rather than slipping through.

Only the multi-tenancy run reached CI: chainsaw runs with
FailFast and both suites share one s... (continued)

6 of 6 new or added lines in 1 file covered. (100.0%)

19 existing lines in 5 files now uncovered.

87199 of 122234 relevant lines covered (71.34%)

126.43 hits per line

Coverage Regressions

Lines Coverage ∆ File
6
19.87
-3.97% pkg/client/manager.go
6
59.0
-0.62% pkg/workloads/manager.go
3
83.08
-0.18% pkg/authserver/storage/redis.go
3
61.43
-4.29% pkg/state/runconfig.go
1
96.77
-3.23% pkg/foreach/foreach.go
Jobs
ID Job ID Ran Files Coverage
1 38864104745.1 16 Oct 2026 07:04AM UTC 955
71.34
GitHub Action Run
Source Files on build 38864104745
  • Tree
  • List 955
  • Changed 8
  • Source Changed 1
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #38864104745
  • 60bfed8b on github
  • Prev Build on main (#38805605138)
  • Next Build on main (#38971390840)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc