diff --git a/go.mod b/go.mod index b5ae8b4808b..85d53c9f914 100644 --- a/go.mod +++ b/go.mod @@ -277,6 +277,7 @@ require ( github.com/Masterminds/semver/v3 v3.1.1 github.com/dave/dst v0.27.2 github.com/grafana/thema v0.0.0-20230122235053-b4b6714dd1c9 + github.com/hmarr/codeowners v1.1.1 github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f k8s.io/apimachinery v0.25.3 ) diff --git a/go.sum b/go.sum index 27ca07ac835..4cd7978beac 100644 --- a/go.sum +++ b/go.sum @@ -1563,6 +1563,8 @@ github.com/hetznercloud/hcloud-go v1.26.2/go.mod h1:2C5uMtBiMoFr3m7lBFPf7wXTdh33 github.com/hetznercloud/hcloud-go v1.32.0/go.mod h1:XX/TQub3ge0yWR2yHWmnDVIrB+MQbda1pHxkUmDlUME= github.com/hetznercloud/hcloud-go v1.33.2 h1:ptWKVYLW7YtjXzsqTFKFxwpVo3iM9UMkVPBYQE4teLU= github.com/hetznercloud/hcloud-go v1.33.2/go.mod h1:XX/TQub3ge0yWR2yHWmnDVIrB+MQbda1pHxkUmDlUME= +github.com/hmarr/codeowners v1.1.1 h1:a1eD22I36JYH6O/zb+R+JkJgQ3CSlbu6H9EserOojSw= +github.com/hmarr/codeowners v1.1.1/go.mod h1:+ez+YARvfVhzL1MzY0f2+D/VusjODs4iRj3tO/IxBMw= github.com/hodgesds/perf-utils v0.0.8/go.mod h1:F6TfvsbtrF88i++hou29dTXlI2sfsJv+gRZDtmTJkAs= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= diff --git a/pkg/kindsys/kindsysreport/kindsysreport.go b/pkg/kindsys/kindsysreport/attributes.go similarity index 100% rename from pkg/kindsys/kindsysreport/kindsysreport.go rename to pkg/kindsys/kindsysreport/attributes.go diff --git a/pkg/kindsys/kindsysreport/codeowners.go b/pkg/kindsys/kindsysreport/codeowners.go new file mode 100644 index 00000000000..5c1a3edcc7a --- /dev/null +++ b/pkg/kindsys/kindsysreport/codeowners.go @@ -0,0 +1,61 @@ +package kindsysreport + +import ( + "os" + "path/filepath" + + "github.com/hmarr/codeowners" +) + +type CodeOwnersFinder struct { + ruleset codeowners.Ruleset +} + +func NewCodeOwnersFinder(groot string) (CodeOwnersFinder, error) { + //nolint:gosec + file, err := os.Open(filepath.Join(groot, ".github", "CODEOWNERS")) + if err != nil { + return CodeOwnersFinder{}, err + } + + ruleset, err := codeowners.ParseFile(file) + if err != nil { + return CodeOwnersFinder{}, err + } + + return CodeOwnersFinder{ + ruleset: ruleset, + }, nil +} + +func (f CodeOwnersFinder) FindFor(pp ...string) ([]string, error) { + if len(f.ruleset) == 0 { + return nil, nil + } + + // Set, to avoid duplicates + m := make(map[string]struct{}) + + for _, p := range pp { + r, err := f.ruleset.Match(p) + if err != nil { + return nil, err + } + + // No rule found for path p + if r == nil { + continue + } + + for _, o := range r.Owners { + m[o.Value] = struct{}{} + } + } + + result := make([]string, 0, len(m)) + for k := range m { + result = append(result, k) + } + + return result, nil +} diff --git a/pkg/kindsys/report.go b/pkg/kindsys/report.go index 70a955d4604..b853abbe97d 100644 --- a/pkg/kindsys/report.go +++ b/pkg/kindsys/report.go @@ -9,8 +9,9 @@ import ( "context" "encoding/json" "fmt" + "net/url" "os" - "path" + "path/filepath" "reflect" "sort" "strings" @@ -88,6 +89,7 @@ type Kind struct { Category string Links KindLinks GrafanaMaturityCount int + CodeOwners []string } // MarshalJSON is overwritten to marshal @@ -106,6 +108,12 @@ func (k Kind) MarshalJSON() ([]byte, error) { m["category"] = k.Category m["grafanaMaturityCount"] = k.GrafanaMaturityCount + if len(k.CodeOwners) == 0 { + m["codeowners"] = []string{} + } else { + m["codeowners"] = k.CodeOwners + } + m["links"] = map[string]string{} for _, ref := range []string{"Schema", "Go", "Ts", "Docs"} { refVal := reflect.ValueOf(k.Links).FieldByName(ref).String() @@ -179,17 +187,22 @@ func buildKindStateReport() *KindStateReport { r := emptyKindStateReport() b := corekind.NewBase(nil) + groot := filepath.Join(elsedie(os.Getwd())("cannot get cwd"), "..", "..") + of := elsedie(kindsysreport.NewCodeOwnersFinder(groot))("cannot parse .github/codeowners") + seen := make(map[string]bool) for _, k := range b.All() { seen[k.Props().Common().Name] = true lin := k.Lineage() switch k.Props().(type) { case kindsys.CoreProperties: + links := buildCoreLinks(lin, k.Decl().Properties) r.add(Kind{ SomeKindProperties: k.Props(), Category: "core", - Links: buildCoreLinks(lin, k.Decl().Properties), + Links: links, GrafanaMaturityCount: grafanaMaturityAttrCount(lin.Latest().Underlying()), + CodeOwners: findCodeOwners(of, links), }) } } @@ -217,11 +230,13 @@ func buildKindStateReport() *KindStateReport { for _, pp := range corelist.New(nil) { for _, si := range all { if ck, has := pp.ComposableKinds[si.Name()]; has { + links := buildComposableLinks(pp.Properties, ck.Decl().Properties) r.add(Kind{ SomeKindProperties: ck.Props(), Category: "composable", - Links: buildComposableLinks(pp.Properties, ck.Decl().Properties), + Links: links, GrafanaMaturityCount: grafanaMaturityAttrCount(ck.Lineage().Latest().Underlying()), + CodeOwners: findCodeOwners(of, links), }) } else if may := si.Should(string(pp.Properties.Type)); may { n := plugindef.DerivePascalName(pp.Properties) + si.Name() @@ -253,10 +268,6 @@ func buildKindStateReport() *KindStateReport { return r } -func buildDocsRef(category string, props kindsys.CommonProperties) string { - return path.Join(docsBaseURL, category, props.MachineName, "schema-reference") -} - func buildCoreLinks(lin thema.Lineage, cp kindsys.CoreProperties) KindLinks { const category = "core" vpath := fmt.Sprintf("v%v", lin.Latest().Version()[0]) @@ -265,10 +276,10 @@ func buildCoreLinks(lin thema.Lineage, cp kindsys.CoreProperties) KindLinks { } return KindLinks{ - Schema: path.Join(repoBaseURL, fmt.Sprintf(coreCUEPath, cp.MachineName, cp.MachineName)), - Go: path.Join(repoBaseURL, fmt.Sprintf(coreGoPath, cp.MachineName)), - Ts: path.Join(repoBaseURL, fmt.Sprintf(coreTSPath, cp.MachineName, vpath, cp.MachineName)), - Docs: path.Join(docsBaseURL, category, cp.MachineName, "schema-reference"), + Schema: elsedie(url.JoinPath(repoBaseURL, fmt.Sprintf(coreCUEPath, cp.MachineName, cp.MachineName)))("cannot build schema link"), + Go: elsedie(url.JoinPath(repoBaseURL, fmt.Sprintf(coreGoPath, cp.MachineName)))("cannot build go link"), + Ts: elsedie(url.JoinPath(repoBaseURL, fmt.Sprintf(coreTSPath, cp.MachineName, vpath, cp.MachineName)))("cannot build ts link"), + Docs: elsedie(url.JoinPath(docsBaseURL, category, cp.MachineName, "schema-reference"))("cannot build docs link"), } } @@ -302,14 +313,14 @@ func buildComposableLinks(pp plugindef.PluginDef, cp kindsys.ComposablePropertie var goLink string if pp.Backend != nil && *pp.Backend { - goLink = path.Join(repoBaseURL, fmt.Sprintf(composableGoPath, pName, schemaInterface, schemaInterface)) + goLink = elsedie(url.JoinPath(repoBaseURL, fmt.Sprintf(composableGoPath, pName, schemaInterface, schemaInterface)))("cannot build go link") } return KindLinks{ - Schema: path.Join(repoBaseURL, fmt.Sprintf(composableCUEPath, string(pp.Type), pName, schemaInterface)), + Schema: elsedie(url.JoinPath(repoBaseURL, fmt.Sprintf(composableCUEPath, string(pp.Type), pName, schemaInterface)))("cannot build schema link"), Go: goLink, - Ts: path.Join(repoBaseURL, fmt.Sprintf(composableTSPath, string(pp.Type), pName, schemaInterface)), - Docs: path.Join(docsBaseURL, category, cp.MachineName, "schema-reference"), + Ts: elsedie(url.JoinPath(repoBaseURL, fmt.Sprintf(composableTSPath, string(pp.Type), pName, schemaInterface)))("cannot build ts link"), + Docs: elsedie(url.JoinPath(docsBaseURL, category, cp.MachineName, "schema-reference"))("cannot build docs link"), } } @@ -319,6 +330,17 @@ func grafanaMaturityAttrCount(sch cue.Value) int { return aw.Count(sch, attr)[attr] } +func findCodeOwners(of kindsysreport.CodeOwnersFinder, links KindLinks) []string { + owners := elsedie(of.FindFor([]string{ + toLocalPath(links.Schema), + toLocalPath(links.Go), + toLocalPath(links.Ts), + }...))("cannot find code owners") + + sort.Strings(owners) + return owners +} + func machinize(s string) string { return strings.Map(func(r rune) rune { switch { @@ -342,6 +364,10 @@ func toCamelCase(s string) string { return strings.ToLower(string(s[0])) + s[1:] } +func toLocalPath(s string) string { + return strings.Replace(s, repoBaseURL+"/", "", 1) +} + type reportJenny struct{} func (reportJenny) JennyName() string { diff --git a/pkg/kindsys/report.json b/pkg/kindsys/report.json index cd7bc62cec8..673cd823e10 100644 --- a/pkg/kindsys/report.json +++ b/pkg/kindsys/report.json @@ -2,6 +2,7 @@ "kinds": { "alertgroupspanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -23,6 +24,7 @@ }, "alertlistpanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -44,6 +46,7 @@ }, "alertmanagerdataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -65,6 +68,7 @@ }, "alertmanagerdatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -86,6 +90,9 @@ }, "annotationslistpanelcfg": { "category": "composable", + "codeowners": [ + "grafana/user-essentials" + ], "currentVersion": [ 0, 0 @@ -93,10 +100,10 @@ "grafanaMaturityCount": 0, "lineageIsGroup": true, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/composable/annotationslistpanelcfg/schema-reference", + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/composable/annotationslistpanelcfg/schema-reference", "go": "n/a", - "schema": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/annolist/panelcfg.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/annolist/panelcfg.gen.ts" + "schema": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/annolist/panelcfg.cue", + "ts": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/annolist/panelcfg.gen.ts" }, "machineName": "annotationslistpanelcfg", "maturity": "experimental", @@ -107,6 +114,7 @@ }, "apikey": { "category": "core", + "codeowners": [], "currentVersion": [ 0, 0 @@ -127,6 +135,7 @@ }, "azuremonitordataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -148,6 +157,7 @@ }, "azuremonitordatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -169,6 +179,9 @@ }, "barchartpanelcfg": { "category": "composable", + "codeowners": [ + "grafana/grafana-bi-squad" + ], "currentVersion": [ 0, 0 @@ -176,10 +189,10 @@ "grafanaMaturityCount": 0, "lineageIsGroup": true, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/composable/barchartpanelcfg/schema-reference", + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/composable/barchartpanelcfg/schema-reference", "go": "n/a", - "schema": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/barchart/panelcfg.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/barchart/panelcfg.gen.ts" + "schema": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/barchart/panelcfg.cue", + "ts": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/barchart/panelcfg.gen.ts" }, "machineName": "barchartpanelcfg", "maturity": "experimental", @@ -190,6 +203,9 @@ }, "bargaugepanelcfg": { "category": "composable", + "codeowners": [ + "grafana/user-essentials" + ], "currentVersion": [ 0, 0 @@ -197,10 +213,10 @@ "grafanaMaturityCount": 0, "lineageIsGroup": true, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/composable/bargaugepanelcfg/schema-reference", + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/composable/bargaugepanelcfg/schema-reference", "go": "n/a", - "schema": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/bargauge/panelcfg.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/bargauge/panelcfg.gen.ts" + "schema": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/bargauge/panelcfg.cue", + "ts": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/bargauge/panelcfg.gen.ts" }, "machineName": "bargaugepanelcfg", "maturity": "experimental", @@ -211,6 +227,7 @@ }, "cloudwatchdataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -232,6 +249,7 @@ }, "cloudwatchdatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -253,6 +271,12 @@ }, "dashboard": { "category": "core", + "codeowners": [ + "grafana/grafana-as-code", + "grafana/grafana-bi-squad", + "grafana/plugins-platform-frontend", + "grafana/user-essentials" + ], "currentVersion": [ 0, 0 @@ -260,10 +284,10 @@ "grafanaMaturityCount": 144, "lineageIsGroup": false, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/core/dashboard/schema-reference", - "go": "https:/github.com/grafana/grafana/tree/main/pkg/kinds/dashboard", - "schema": "https:/github.com/grafana/grafana/tree/main/kinds/dashboard/dashboard_kind.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/packages/grafana-schema/src/raw/dashboard/x/dashboard_types.gen.ts" + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/core/dashboard/schema-reference", + "go": "https://github.com/grafana/grafana/tree/main/pkg/kinds/dashboard", + "schema": "https://github.com/grafana/grafana/tree/main/kinds/dashboard/dashboard_kind.cue", + "ts": "https://github.com/grafana/grafana/tree/main/packages/grafana-schema/src/raw/dashboard/x/dashboard_types.gen.ts" }, "machineName": "dashboard", "maturity": "experimental", @@ -273,6 +297,7 @@ }, "dashboarddataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -294,6 +319,7 @@ }, "dashboarddatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -315,6 +341,9 @@ }, "dashboardlistpanelcfg": { "category": "composable", + "codeowners": [ + "grafana/user-essentials" + ], "currentVersion": [ 0, 0 @@ -322,10 +351,10 @@ "grafanaMaturityCount": 0, "lineageIsGroup": true, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/composable/dashboardlistpanelcfg/schema-reference", + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/composable/dashboardlistpanelcfg/schema-reference", "go": "n/a", - "schema": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/dashlist/panelcfg.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/dashlist/panelcfg.gen.ts" + "schema": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/dashlist/panelcfg.cue", + "ts": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/dashlist/panelcfg.gen.ts" }, "machineName": "dashboardlistpanelcfg", "maturity": "experimental", @@ -336,6 +365,7 @@ }, "datasource": { "category": "core", + "codeowners": [], "currentVersion": [ 0, 0 @@ -356,6 +386,7 @@ }, "debugpanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -377,6 +408,7 @@ }, "elasticsearchdataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -398,6 +430,7 @@ }, "elasticsearchdatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -419,6 +452,7 @@ }, "flamegraphpanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -440,6 +474,7 @@ }, "folder": { "category": "core", + "codeowners": [], "currentVersion": [ 0, 0 @@ -460,6 +495,9 @@ }, "gaugepanelcfg": { "category": "composable", + "codeowners": [ + "grafana/user-essentials" + ], "currentVersion": [ 0, 0 @@ -467,10 +505,10 @@ "grafanaMaturityCount": 0, "lineageIsGroup": true, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/composable/gaugepanelcfg/schema-reference", + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/composable/gaugepanelcfg/schema-reference", "go": "n/a", - "schema": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/gauge/panelcfg.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/gauge/panelcfg.gen.ts" + "schema": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/gauge/panelcfg.cue", + "ts": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/gauge/panelcfg.gen.ts" }, "machineName": "gaugepanelcfg", "maturity": "experimental", @@ -481,6 +519,7 @@ }, "geomappanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -502,6 +541,7 @@ }, "gettingstartedpanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -523,6 +563,7 @@ }, "googlecloudmonitoringdataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -544,6 +585,7 @@ }, "googlecloudmonitoringdatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -565,6 +607,7 @@ }, "grafanadataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -586,6 +629,7 @@ }, "grafanadatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -607,6 +651,7 @@ }, "graphitedataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -628,6 +673,7 @@ }, "graphitedatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -649,6 +695,7 @@ }, "grapholdpanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -670,6 +717,9 @@ }, "histogrampanelcfg": { "category": "composable", + "codeowners": [ + "grafana/grafana-bi-squad" + ], "currentVersion": [ 0, 0 @@ -677,10 +727,10 @@ "grafanaMaturityCount": 0, "lineageIsGroup": true, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/composable/histogrampanelcfg/schema-reference", + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/composable/histogrampanelcfg/schema-reference", "go": "n/a", - "schema": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/histogram/panelcfg.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/histogram/panelcfg.gen.ts" + "schema": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/histogram/panelcfg.cue", + "ts": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/histogram/panelcfg.gen.ts" }, "machineName": "histogrampanelcfg", "maturity": "experimental", @@ -691,6 +741,7 @@ }, "iconpanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -712,6 +763,7 @@ }, "jaegerdataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -733,6 +785,7 @@ }, "jaegerdatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -754,6 +807,7 @@ }, "livepanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -775,6 +829,7 @@ }, "logspanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -796,6 +851,7 @@ }, "lokidataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -817,6 +873,7 @@ }, "lokidatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -838,6 +895,7 @@ }, "microsoftsqlserverdataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -859,6 +917,7 @@ }, "microsoftsqlserverdatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -880,6 +939,7 @@ }, "mysqldataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -901,6 +961,7 @@ }, "mysqldatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -922,6 +983,9 @@ }, "newspanelcfg": { "category": "composable", + "codeowners": [ + "grafana/user-essentials" + ], "currentVersion": [ 0, 0 @@ -929,10 +993,10 @@ "grafanaMaturityCount": 0, "lineageIsGroup": true, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/composable/newspanelcfg/schema-reference", + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/composable/newspanelcfg/schema-reference", "go": "n/a", - "schema": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/news/panelcfg.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/news/panelcfg.gen.ts" + "schema": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/news/panelcfg.cue", + "ts": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/news/panelcfg.gen.ts" }, "machineName": "newspanelcfg", "maturity": "experimental", @@ -943,6 +1007,7 @@ }, "nodegraphpanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -964,6 +1029,7 @@ }, "parcadataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -985,6 +1051,7 @@ }, "parcadatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1006,6 +1073,7 @@ }, "phlaredataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1027,6 +1095,7 @@ }, "phlaredatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1048,6 +1117,9 @@ }, "piechartpanelcfg": { "category": "composable", + "codeowners": [ + "grafana/grafana-bi-squad" + ], "currentVersion": [ 0, 0 @@ -1055,10 +1127,10 @@ "grafanaMaturityCount": 0, "lineageIsGroup": true, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/composable/piechartpanelcfg/schema-reference", + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/composable/piechartpanelcfg/schema-reference", "go": "n/a", - "schema": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/piechart/panelcfg.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/piechart/panelcfg.gen.ts" + "schema": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/piechart/panelcfg.cue", + "ts": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/piechart/panelcfg.gen.ts" }, "machineName": "piechartpanelcfg", "maturity": "experimental", @@ -1069,6 +1141,12 @@ }, "playlist": { "category": "core", + "codeowners": [ + "grafana/grafana-as-code", + "grafana/grafana-bi-squad", + "grafana/plugins-platform-frontend", + "grafana/user-essentials" + ], "currentVersion": [ 0, 0 @@ -1076,10 +1154,10 @@ "grafanaMaturityCount": 0, "lineageIsGroup": false, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/core/playlist/schema-reference", - "go": "https:/github.com/grafana/grafana/tree/main/pkg/kinds/playlist", - "schema": "https:/github.com/grafana/grafana/tree/main/kinds/playlist/playlist_kind.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/packages/grafana-schema/src/raw/playlist/x/playlist_types.gen.ts" + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/core/playlist/schema-reference", + "go": "https://github.com/grafana/grafana/tree/main/pkg/kinds/playlist", + "schema": "https://github.com/grafana/grafana/tree/main/kinds/playlist/playlist_kind.cue", + "ts": "https://github.com/grafana/grafana/tree/main/packages/grafana-schema/src/raw/playlist/x/playlist_types.gen.ts" }, "machineName": "playlist", "maturity": "merged", @@ -1089,6 +1167,7 @@ }, "postgresqldataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1110,6 +1189,7 @@ }, "postgresqldatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1131,6 +1211,7 @@ }, "prometheusdataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1152,6 +1233,7 @@ }, "prometheusdatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1173,6 +1255,7 @@ }, "query": { "category": "core", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1193,6 +1276,7 @@ }, "queryhistory": { "category": "core", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1213,6 +1297,7 @@ }, "serviceaccount": { "category": "core", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1233,6 +1318,9 @@ }, "statpanelcfg": { "category": "composable", + "codeowners": [ + "grafana/user-essentials" + ], "currentVersion": [ 0, 0 @@ -1240,10 +1328,10 @@ "grafanaMaturityCount": 0, "lineageIsGroup": true, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/composable/statpanelcfg/schema-reference", + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/composable/statpanelcfg/schema-reference", "go": "n/a", - "schema": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/stat/panelcfg.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/stat/panelcfg.gen.ts" + "schema": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/stat/panelcfg.cue", + "ts": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/stat/panelcfg.gen.ts" }, "machineName": "statpanelcfg", "maturity": "experimental", @@ -1254,6 +1342,7 @@ }, "tableoldpanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1275,6 +1364,12 @@ }, "team": { "category": "core", + "codeowners": [ + "grafana/grafana-as-code", + "grafana/grafana-bi-squad", + "grafana/plugins-platform-frontend", + "grafana/user-essentials" + ], "currentVersion": [ 0, 0 @@ -1282,10 +1377,10 @@ "grafanaMaturityCount": 7, "lineageIsGroup": false, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/core/team/schema-reference", - "go": "https:/github.com/grafana/grafana/tree/main/pkg/kinds/team", - "schema": "https:/github.com/grafana/grafana/tree/main/kinds/team/team_kind.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/packages/grafana-schema/src/raw/team/x/team_types.gen.ts" + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/core/team/schema-reference", + "go": "https://github.com/grafana/grafana/tree/main/pkg/kinds/team", + "schema": "https://github.com/grafana/grafana/tree/main/kinds/team/team_kind.cue", + "ts": "https://github.com/grafana/grafana/tree/main/packages/grafana-schema/src/raw/team/x/team_types.gen.ts" }, "machineName": "team", "maturity": "merged", @@ -1295,6 +1390,7 @@ }, "tempodataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1316,6 +1412,7 @@ }, "tempodatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1337,6 +1434,7 @@ }, "testdatadbdataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1358,6 +1456,7 @@ }, "testdatadbdatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1379,6 +1478,9 @@ }, "textpanelcfg": { "category": "composable", + "codeowners": [ + "grafana/user-essentials" + ], "currentVersion": [ 0, 0 @@ -1386,10 +1488,10 @@ "grafanaMaturityCount": 0, "lineageIsGroup": true, "links": { - "docs": "https:/grafana.com/docs/grafana/next/developers/kinds/composable/textpanelcfg/schema-reference", + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/composable/textpanelcfg/schema-reference", "go": "n/a", - "schema": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/text/panelcfg.cue", - "ts": "https:/github.com/grafana/grafana/tree/main/public/app/plugins/panel/text/panelcfg.gen.ts" + "schema": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/text/panelcfg.cue", + "ts": "https://github.com/grafana/grafana/tree/main/public/app/plugins/panel/text/panelcfg.gen.ts" }, "machineName": "textpanelcfg", "maturity": "experimental", @@ -1400,6 +1502,7 @@ }, "thumb": { "category": "core", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1420,6 +1523,7 @@ }, "tracespanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1441,6 +1545,7 @@ }, "user": { "category": "core", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1461,6 +1566,7 @@ }, "welcomepanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1482,6 +1588,7 @@ }, "xychartpanelcfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1503,6 +1610,7 @@ }, "zipkindataquery": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0 @@ -1524,6 +1632,7 @@ }, "zipkindatasourcecfg": { "category": "composable", + "codeowners": [], "currentVersion": [ 0, 0