Skip to content

Move the plugin registry list to a different format #21

Description

@fzipi

Problem

The registry list lives as a markdown table in the README. It reads well, but it is hard to consume: the website, the docs, and any tool that wants to install a plugin has to parse markdown or scrape HTML.

Hand maintenance has also let the table drift. As of today: two CI badges are swapped between the nextcloud and dokuwiki rows, the false-positive-report-plugin row is missing its License cell, dokuwiki's link text has a typo, two plugins have integration tests but no badge, and there is an undocumented hole in the rule ID space at 9,515,000 - 9,515,999. See this comment for the full audit.

Goal

Make the registry a machine-readable index that tooling can resolve against to discover and install plugins from a place it can trust, and generate the README table from that index instead of maintaining it by hand.

An installer needs to answer, without parsing markdown: which plugins exist, where they live, which version to install (resolved to a release tag, not a moving branch), whether the plugin is vetted, its license, its rule ID range so collisions with already-installed plugins are detectable, and how to configure it.

Design

Two artifacts, with different owners:

  • registry.yaml, in this repo — authoritative for rule ID range allocation and for the vetting signal (type, status). Changed only through reviewed PRs.
  • plugin.yaml, in each plugin repo (feat: add plugin schema #37) — authoritative for the plugin's description and its configuration variables.

The index stays in this repo rather than being assembled by fetching every plugin repo, because ranges have to be allocated centrally to prevent collisions, some registered plugin repos are private and cannot be fetched at all, and a plugin repo declaring itself status: tested in its own descriptor attests nothing — the same field here, set through review, does.

What the registry attests: that a rule ID range is allocated, and that CRS maintainers reviewed the registration. It is not a code audit and not a supply-chain guarantee. Signing or checksums can attach to release tags later; out of scope for the first iteration.

Requirements

  • registry.yaml holding the plugin list (name, rule ID range, repository, type, status, license), migrated from the current table with the drift above fixed
  • JSON Schema for registry.yaml, validated in CI: unique names, no duplicate or overlapping ranges, ranges inside 9,500,000 - 9,999,999, GitHub repository URLs, SPDX license identifiers
  • README skeleton with markers delimiting where the generated table goes
  • generator that renders the table from registry.yaml, with CI badges derived from the repository field instead of typed by hand
  • CI regenerates and fails on drift (git diff --exit-code) rather than committing from a GHA — same guarantee, no write access to main, no branch-protection friction
  • publish a generated machine-readable index (registry.json) at a stable URL, for the website, the docs and installers
  • document what the registry attests and what it does not, so downstream tooling does not over-read it

Refs #37 for the per-plugin descriptor schema.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions