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

stacklok / toolhive / 35238935410
71%

Build:
DEFAULT BRANCH: main
Ran 17 Sep 2026 03:23PM UTC
Jobs 1
Files 927
Run time 3min
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

17 Sep 2026 03:14PM UTC coverage: 70.722% (+0.02%) from 70.707%
35238935410

push

github

web-flow
Add RFC 8628 device authorization grant support (#6647)

* Add device-code storage for RFC 8628 device grant

Headless MCP clients (remote dev hosts, CI-adjacent operator boxes)
cannot complete the browser-based authorization-code callback this
auth server currently requires. RFC 8628 (Device Authorization
Grant) lets such a client obtain a device/user code, hand the user
code to a human for out-of-band verification, and poll for a token
without ever receiving a redirect itself.

This is the storage foundation only, mirroring the existing
PendingAuthorizationStorage shape:

- DeviceRequest/DeviceRequestStatus and the DeviceCodeStorage
  interface (types.go), embedded into Storage alongside
  PendingAuthorizationStorage.
- MemoryStorage and RedisStorage implementations, each keyed by both
  device_code (canonical) and user_code (secondary index), TTL-bound
  via DefaultDeviceRequestTTL.
- ErrInvalidState distinguishes "already authorized/denied" from
  not-found/expired, so a stale verification-page resubmission can
  never clobber a request the token endpoint already consumed.

No HTTP endpoints, token-endpoint grant handler, or config/CRD
surface yet -- those land in follow-up PRs once this storage layer
is in.

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

* Add device-code grant handler and authorization endpoint

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Regenerate swagger docs and SDK for device flow config

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Make Redis device-code storage race-safe and precise

DeleteDeviceRequest and updateDeviceRequest did an unconditional
get-then-write, so two concurrent callers could both observe the
pre-mutation state and both commit: a device_code could be redeemed
twice, or a double-click authorize/deny could silently overwrite the
first transition. Both now run inside a Redis WATCH/MULTI transaction,
mirroring UpsertDCRIssuedClient, so the loser retries against th... (continued)

507 of 690 new or added lines in 11 files covered. (73.48%)

5 existing lines in 3 files now uncovered.

82233 of 116276 relevant lines covered (70.72%)

104.29 hits per line

Uncovered Changes

Lines Coverage ∆ File
49
49.93
-2.65% pkg/authserver/storage/mocks/mock_storage.go
39
67.77
pkg/authserver/server/handlers/device_authorization.go
33
82.9
0.13% pkg/authserver/storage/redis.go
22
79.05
pkg/authserver/server/deviceflow/handler.go
21
93.45
-1.41% pkg/authserver/storage/memory.go
7
93.09
-3.3% pkg/authserver/server/handlers/handler.go
4
80.0
pkg/authserver/server/deviceflow/factory.go
4
79.73
-1.96% pkg/authserver/server/handlers/discovery.go
4
81.16
-0.5% pkg/authserver/server_impl.go

Coverage Regressions

Lines Coverage ∆ File
2
96.15
-1.92% pkg/cache/validating_cache.go
2
68.8
-0.85% pkg/ignore/processor.go
1
94.49
-0.79% pkg/vmcp/composer/dag_executor.go
Jobs
ID Job ID Ran Files Coverage
1 35238935410.1 17 Sep 2026 03:23PM UTC 927
70.72
GitHub Action Run
Source Files on build 35238935410
  • Tree
  • List 927
  • Changed 17
  • Source Changed 13
  • Coverage Changed 17
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #35238935410
  • 59ba54db on github
  • Prev Build on main (#35202690433)
  • Next Build on main (#35251987032)
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