Skip to content

[FEATURE] Provisioner registry and install layer for Score (score-hub) #207

Description

@ShantKhatri

Detailed description

Installing a community provisioner today is done by copy-pasting a raw GitHub URL:

score-k8s init --provisioners \
  https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/dapr-pubsub/score-k8s/10-redis-dapr-pubsub.provisioners.yaml

That's 140+ characters, it's platform-specific, there's no checksum, nothing is pinned, and there's no record of what was installed. As community-provisioners grows this gets worse.

I'd like to discuss adding a proper install layer so developers can do:

score-hub install dapr-pubsub --variant redis

Context

Provisioners are how platform engineers wire resources to Score workloads. Every developer hits the install step whenever they onboard to a new resource type. The raw URL workflow is the first impression and it's rough.

Specific problems right now:

  • No discovery: you have to already know the URL or go searching on GitHub
  • No variant selection: dapr-pubsub has a rabbitmq variant and a redis variant, you pick by editing the URL
  • No integrity check: the URL can silently serve different content at different times
  • No lock file: nothing records what was installed, at what commit, or with what checksum, so environments aren't reproducible
  • No way to mix official and internal provisioners in the same workflow

I built a POC called score-hub-cli (https://github.com/ShantKhatri/score-hub-cli) to explore what this could look like.

Possible implementation

The core primitives any solution would need:

An index - a structured YAML describing available provisioners, variants, platforms, and checksums. Something like:

- name: dapr-pubsub
  category: messaging
  variants:
    - id: redis
      platforms:
        k8s:
          path: dapr-pubsub/score-k8s/10-redis-dapr-pubsub.provisioners.yaml
          checksum: "sha256:bd80a6bc..."
        compose:
          path: dapr-pubsub/score-compose/10-redis-dapr-pubsub.provisioners.yaml
          checksum: "sha256:8434fbfd..."

A lock file - .score-hub.lock committed to source control, pinning every installed provisioner to a specific version, commit, and checksum. Same idea as a go.sum or package-lock.json.

Platform auto-detection - inspect .score-k8s/ or .score-compose/ directories to figure out which Score platform is active so you don't have to specify it every time.

Additional information

POC: https://github.com/ShantKhatri/score-hub-cli (Go, Resolver interface abstraction, GitHub-backed index)

The POC currently indexes 11 provisioners from community-provisioners across 28 variants (messaging, networking, storage, compute, LLM, configuration).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions