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

stacklok / toolhive / 32282977351
70%

Build:
DEFAULT BRANCH: main
Ran 19 Aug 2026 05:48PM UTC
Jobs 1
Files 882
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

19 Aug 2026 05:40PM UTC coverage: 70.494% (+0.01%) from 70.482%
32282977351

push

github

web-flow
Add plugin lock-file sync (#6316)

* Add plugin lock-file sync

Restore project plugins from the lock file via thv ai-plugin sync
and POST /plugins/sync, gated by TOOLHIVE_PLUGINS_LOCK_ENABLED.

Signed-off-by: Samuele Verzi <samu@stacklok.com>

* Fix adopt rollback and add plugin sync e2e

A failed DB update after writing the lock entry left the plugin
untracked; remove the entry so the next sync can retry. Cover
thv ai-plugin sync exit codes the same way skills lock does.

Signed-off-by: Samuele Verzi <samu@stacklok.com>

* Require restorable pins and client health on sync

Sync must not report a plugin current when a requested client is
missing or marketplace registration is gone, and must refuse to
adopt a local tag that cannot be restored later.

Signed-off-by: Samuele Verzi <samu@stacklok.com>

* Serialize adopt and restore the prior lock pin

Adoption must hold the per-plugin lock and put back the
pre-existing entry if marking Managed fails.

Signed-off-by: Samuele Verzi <samu@stacklok.com>

* Reconcile each plugin under its lock on sync

A stale lock/DB snapshot can resurrect uninstalls; default
sync must also expand to newly detected clients.

Signed-off-by: Samuele Verzi <samu@stacklok.com>

* Make plugin sync use detected clients and locked helpers

Default sync targets installed plugin clients, validates pinned
canonical names before mutate, and drops context lock reentrancy.

Signed-off-by: Samuele Verzi <samu@stacklok.com>

* Drop unused adoptPlugin wrapper after locked sync

Sync already calls adoptLocked under the held mutex; remove the
dead public wrapper and quiet installFromOCI gocyclo.

Signed-off-by: Samuele Verzi <samu@stacklok.com>

* Expand sole clients all sentinel on plugin sync

A lone --clients all now matches the documented detected-client
default instead of failing validation on every sync.

Signed-off-by: Samuele Verzi <samu@stacklok.com>

* Match unified update hook signature in adopt test

Signed-off-by: Samuele Verzi <... (continued)

383 of 585 new or added lines in 12 files covered. (65.47%)

24 existing lines in 6 files now uncovered.

86649 of 122917 relevant lines covered (70.49%)

101.82 hits per line

Uncovered Changes

Lines Coverage ∆ File
99
68.97
pkg/plugins/pluginsvc/sync.go
81
17.35
cmd/thv/app/ai_plugin_sync.go
14
80.08
-4.94% pkg/plugins/client/client.go
6
90.63
pkg/plugins/pluginsvc/pin.go
2
58.82
0.03% pkg/plugins/pluginsvc/install_oci.go

Coverage Regressions

Lines Coverage ∆ File
6
20.11
-3.45% pkg/client/manager.go
6
76.15
-5.5% pkg/secrets/keyring/keyctl_linux.go
5
61.48
-0.43% pkg/workloads/manager.go
3
81.06
-0.69% pkg/transport/proxy/httpsse/http_proxy.go
2
93.94
-6.06% pkg/foreach/foreach.go
2
94.77
-1.31% pkg/vmcp/composer/dag_executor.go
Jobs
ID Job ID Ran Files Coverage
1 32282977351.1 19 Aug 2026 05:48PM UTC 882
70.49
GitHub Action Run
Source Files on build 32282977351
  • Tree
  • List 882
  • Changed 25
  • Source Changed 10
  • Coverage Changed 25
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32282977351
  • 95002a56 on github
  • Prev Build on main (#32277794331)
  • Next Build on main (#32309543269)
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