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

stacklok / toolhive / 28384795303
68%

Build:
DEFAULT BRANCH: main
Ran 29 Jun 2026 03:56PM UTC
Jobs 1
Files 772
Run time 2min
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

29 Jun 2026 03:50PM UTC coverage: 67.381% (-0.002%) from 67.383%
28384795303

push

github

web-flow
Add plugin core service, validation, and storage (Phase 2, THV-0077) (#5676)

* Add plugin core service, validation, and storage (Phase 2, THV-0077)

Stand up the plugin distribution layer's foundation: types, manifest
parser, validator, the build/push/validate/content service, and SQLite
storage. Mirrors pkg/skills and pkg/skills/skillsvc file-for-file,
substituting toolhive-core's oci/plugins package for oci/skills.

Phase 2 implements only the build/push/validate/list-builds/delete-build/
get-content surface on pluginsvc.New (returning plugins.PluginService).
Install/uninstall/list/info and the MaterializationAdapter are declared
in the issue but land in Phase 3 (#5527); REST API and CLI are Phase 4
(#5528). App wiring is deferred to Phase 4 — this lands the library and
storage layer plus the migration, which applies to the shared DB on
existing deployments.

Storage introduces a typed EntryType ("skill"/"plugin") replacing the
stringly-typed entry_type literal in skill_store.go, and a new 002
migration adding installed_plugins + plugin_dependencies off the existing
entries table (reusing, not redefining, its UNIQUE(entry_type, name)).

Exit gate tests: parser/validator units (keywords-must-be-array type
mismatch, component-path traversal rejection, bundled-skill validation
reuse), packager determinism via the service, migration up/down, and a
build→push round-trip against a mock OCI registry.

Part of stacklok/toolhive#5525
Refs RFC stacklok/toolhive-rfcs#77

* Address panel review round 2 findings

Narrow PluginService to the 6 Phase-2 methods and drop the unused store
param from pluginsvc.New (now an option, WithStore, for Phase 3). Round-1
declared the full 10-method interface but *service only implemented 6,
making var s plugins.PluginService = pluginsvc.New(...) a compile error.

Backfill test gaps the QA reviewer flagged:
- parser symlink/oversize guards (security-relevant TOCTOU/bomb paths)
- validateLocalPath null-byte rejection
- List ORD... (continued)

779 of 1138 new or added lines in 14 files covered. (68.45%)

14 existing lines in 4 files now uncovered.

70505 of 104637 relevant lines covered (67.38%)

62.64 hits per line

Uncovered Changes

Lines Coverage ∆ File
85
79.06
pkg/storage/sqlite/plugin_store.go
72
0.0
pkg/plugins/mocks/mock_service.go
70
42.86
-42.86% pkg/storage/mocks/mock_skill_store.go
56
50.0
pkg/plugins/pluginsvc/oci.go
16
46.88
-46.88% pkg/storage/noop.go
14
83.33
pkg/plugins/pluginsvc/content.go
13
83.75
pkg/plugins/parser.go
10
93.87
pkg/plugins/pluginsvc/build.go
10
57.14
-28.57% pkg/storage/sqlite/factory.go
7
86.27
pkg/plugins/validator.go
6
64.71
pkg/plugins/pluginsvc/local_build_marker.go

Coverage Regressions

Lines Coverage ∆ File
6
76.15
-5.5% pkg/secrets/keyring/keyctl_linux.go
3
97.37
-0.53% pkg/authz/authorizers/cedar/core.go
3
64.29
-4.29% pkg/state/runconfig.go
2
61.69
0.0% pkg/workloads/manager.go
Jobs
ID Job ID Ran Files Coverage
1 28384795303.1 29 Jun 2026 03:56PM UTC 772
67.38
GitHub Action Run
Source Files on build 28384795303
  • Tree
  • List 772
  • Changed 9
  • Source Changed 4
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #28384795303
  • 6327b364 on github
  • Prev Build on main (#28378137776)
  • Next Build on main (#28401510091)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc