DevCats bc92a24b18 feat: validate skills README frontmatter
Add a validator for registry/<namespace>/skills/README.md that checks
top-level keys, the sources[].repo format, per-skill override shape,
icon path prefix (3-deep for skills, distinct from modules/templates
which are 4-deep), and tag URL-safety. Closes the readmevalidation
gap flagged in PR review.
2026-05-19 22:34:07 +00:00

56 lines
1.5 KiB
Go

// This package is for validating all contributors within the main Registry
// directory. It validates that it has nothing but sub-directories, and that
// each sub-directory has a README.md file. Each of those files must then
// describe a specific contributor. The contents of these files will be parsed
// by the Registry site build step, to be displayed in the Registry site's UI.
package main
import (
"context"
"os"
"cdr.dev/slog"
"cdr.dev/slog/sloggers/sloghuman"
)
var logger = slog.Make(sloghuman.Sink(os.Stdout))
func main() {
logger.Info(context.Background(), "starting README validation")
// If there are fundamental problems with how the repo is structured, we can't make any guarantees that any further
// validations will be relevant or accurate.
err := validateRepoStructure()
if err != nil {
logger.Error(context.Background(), "error when validating the repo structure", "error", err.Error())
os.Exit(1)
}
var errs []error
err = validateAllContributorFiles()
if err != nil {
errs = append(errs, err)
}
err = validateAllCoderModules()
if err != nil {
errs = append(errs, err)
}
err = validateAllCoderTemplates()
if err != nil {
errs = append(errs, err)
}
err = validateAllCoderSkills()
if err != nil {
errs = append(errs, err)
}
if len(errs) == 0 {
logger.Info(context.Background(), "processed all READMEs in directory", "dir", rootRegistryPath)
os.Exit(0)
}
for _, err := range errs {
logger.Error(context.Background(), err.Error())
}
os.Exit(1)
}