mirror of
https://github.com/grafana/grafana.git
synced 2024-11-26 02:40:26 -06:00
8745d7ef1b
* extract kindsys * reinstate kindsys report This may end up living somewhere else (or not! who knows!), but the important part is that I don't get rid of it right now :) I hate the package layout (kindsysreport/codegen) for the main function and will take pretty much any alternative suggestion, but we can change also change it later. Note that the generated report.json is in a different location - anything using this (ops something) needs to be updated. * kindsysreport in codeowners
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
package codegen
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
"github.com/grafana/codejen"
|
|
"github.com/grafana/kindsys"
|
|
|
|
"github.com/grafana/grafana/pkg/cuectx"
|
|
)
|
|
|
|
// CRDKindRegistryJenny generates a static registry of the CRD representations
|
|
// of core Grafana kinds, layered on top of the publicly consumable generated
|
|
// registry in pkg/corekinds.
|
|
//
|
|
// Path should be the relative path to the directory that will contain the
|
|
// generated registry.
|
|
func CRDKindRegistryJenny(path string) ManyToOne {
|
|
return &crdregjenny{
|
|
path: path,
|
|
}
|
|
}
|
|
|
|
type crdregjenny struct {
|
|
path string
|
|
}
|
|
|
|
func (j *crdregjenny) JennyName() string {
|
|
return "CRDKindRegistryJenny"
|
|
}
|
|
|
|
func (j *crdregjenny) Generate(kinds ...kindsys.Kind) (*codejen.File, error) {
|
|
cores := make([]kindsys.Core, 0, len(kinds))
|
|
for _, d := range kinds {
|
|
if corekind, is := d.(kindsys.Core); is {
|
|
cores = append(cores, corekind)
|
|
}
|
|
}
|
|
if len(cores) == 0 {
|
|
return nil, nil
|
|
}
|
|
|
|
buf := new(bytes.Buffer)
|
|
if err := tmpls.Lookup("core_crd_registry.tmpl").Execute(buf, tvars_kind_registry{
|
|
PackageName: "corecrd",
|
|
KindPackagePrefix: filepath.ToSlash(filepath.Join("github.com/grafana/grafana", cuectx.GoCoreKindParentPath)),
|
|
Kinds: cores,
|
|
}); err != nil {
|
|
return nil, fmt.Errorf("failed executing core crd registry template: %w", err)
|
|
}
|
|
|
|
b, err := postprocessGoFile(genGoFile{
|
|
path: j.path,
|
|
in: buf.Bytes(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return codejen.NewFile(filepath.Join(j.path, "registry_gen.go"), b, j), nil
|
|
}
|