Kindsys: Rename mudball to common schemas, allow multiple input cue files (#61703)

* kindsys: Rename mudball to common schemas

* Update all core plugin imports

* Add missed table types

* Remove invalid JSON comment

* Remove coremodel dir from codeowners
pull/61648/head
sam boyer 2 years ago committed by GitHub
parent ef6d73e575
commit 492bdbd585
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      .github/CODEOWNERS
  2. 1
      Makefile
  3. 2
      embed.go
  4. 34
      kinds/gen.go
  5. 122
      packages/grafana-schema/src/common/common.gen.ts
  6. 80
      packages/grafana-schema/src/common/mudball.cue
  7. 69
      packages/grafana-schema/src/common/table.cue
  8. 10
      packages/grafana-schema/src/common/time.cue
  9. 2
      packages/grafana-schema/src/index.ts
  10. 3
      packages/grafana-schema/tsconfig.build.json
  11. 3
      packages/grafana-schema/tsconfig.json
  12. 104
      pkg/framework/coremodel/gen.go
  13. 2
      pkg/plugins/codegen/util_ts.go
  14. 2
      pkg/plugins/pfs/pfs.go
  15. 2
      public/app/plugins/panel/barchart/models.cue
  16. 2
      public/app/plugins/panel/bargauge/models.cue
  17. 2
      public/app/plugins/panel/gauge/models.cue
  18. 2
      public/app/plugins/panel/histogram/models.cue
  19. 2
      public/app/plugins/panel/piechart/models.cue
  20. 2
      public/app/plugins/panel/stat/models.cue
  21. 2
      public/app/plugins/panel/state-timeline/models.cue
  22. 2
      public/app/plugins/panel/status-history/models.cue
  23. 2
      public/app/plugins/panel/table/models.cue
  24. 2
      public/app/plugins/panel/timeseries/models.cue

@ -541,7 +541,6 @@ embed.go @grafana/grafana-as-code
/pkg/kinds/ @grafana/grafana-as-code
/pkg/cuectx/ @grafana/grafana-as-code
/pkg/registry/ @grafana/grafana-as-code
/pkg/framework/coremodel/ @grafana/grafana-as-code
/pkg/codegen/ @grafana/grafana-as-code
/pkg/kindsys/ @grafana/grafana-as-code
/pkg/kindsys/kindcat_custom.cue @grafana/apps-platform-core

@ -68,7 +68,6 @@ gen-cue: ## Do all CUE/Thema code generation
@echo "generate code from .cue files"
go generate ./pkg/plugins/plugindef
go generate ./kinds/gen.go
go generate ./pkg/framework/coremodel/gen.go
go generate ./public/app/plugins/gen.go
go generate ./pkg/kindsys/report.go

@ -6,5 +6,5 @@ import (
// CueSchemaFS embeds all schema-related CUE files in the Grafana project.
//
//go:embed cue.mod/module.cue kinds/*.cue kinds/*/*.cue packages/grafana-schema/src/schema/*.cue public/app/plugins/*/*/*.cue public/app/plugins/*/*/plugin.json pkg/kindsys/*.cue pkg/plugins/plugindef/*.cue
//go:embed cue.mod/module.cue kinds/*.cue kinds/*/*.cue packages/grafana-schema/src/common/*.cue public/app/plugins/*/*/*.cue public/app/plugins/*/*/plugin.json pkg/kindsys/*.cue pkg/plugins/plugindef/*.cue
var CueSchemaFS embed.FS

@ -15,6 +15,7 @@ import (
"cuelang.org/go/cue/errors"
"github.com/grafana/codejen"
"github.com/grafana/cuetsy"
"github.com/grafana/grafana/pkg/codegen"
"github.com/grafana/grafana/pkg/cuectx"
@ -43,7 +44,8 @@ func main() {
codegen.DocsJenny(filepath.Join("docs", "sources", "developers", "kinds", "core")),
)
coreKindsGen.AddPostprocessors(codegen.SlashHeaderMapper("kinds/gen.go"))
header := codegen.SlashHeaderMapper("kinds/gen.go")
coreKindsGen.AddPostprocessors(header)
cwd, err := os.Getwd()
if err != nil {
@ -81,6 +83,13 @@ func main() {
if err != nil {
die(fmt.Errorf("core kinddirs codegen failed: %w", err))
}
sharedf, err := dummyCommonJenny{}.Generate(nil)
if err != nil {
die(fmt.Errorf("common schemas failed"))
}
if err = jfs.Add(elsedie(header(*sharedf))("couldn't inject header")); err != nil {
die(err)
}
if _, set := os.LookupEnv("CODEGEN_VERIFY"); set {
if err = jfs.Verify(context.Background(), groot); err != nil {
@ -105,6 +114,29 @@ func nameFor(m kindsys.SomeKindProperties) string {
}
}
type dummyCommonJenny struct{}
func (j dummyCommonJenny) JennyName() string {
return "CommonSchemaJenny"
}
func (j dummyCommonJenny) Generate(dummy any) (*codejen.File, error) {
path := filepath.Join("packages", "grafana-schema", "src", "common")
v, err := cuectx.BuildGrafanaInstance(nil, path, "", nil)
if err != nil {
return nil, err
}
b, err := cuetsy.Generate(v, cuetsy.Config{
Export: true,
})
if err != nil {
return nil, fmt.Errorf("failed to generate TS: %w", err)
}
return codejen.NewFile(filepath.Join(path, "common.gen.ts"), b, dummyCommonJenny{}), nil
}
func elsedie[T any](t T, err error) func(msg string) T {
if err != nil {
return func(msg string) T {

@ -1,8 +1,12 @@
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
// This file is autogenerated. DO NOT EDIT.
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
//
// To regenerate, run "make gen-cue" from the repository root.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Generated by:
// kinds/gen.go
// Using jennies:
// CommonSchemaJenny
//
// Run 'make gen-cue' from repository root to regenerate.
/**
* TODO docs
@ -262,14 +266,6 @@ export enum LegendDisplayMode {
Table = 'table',
}
/**
* TODO docs
*/
export interface TableSortByFieldState {
desc?: boolean;
displayName: string;
}
/**
* TODO docs
*/
@ -388,35 +384,6 @@ export enum BigValueTextMode {
*/
export type FieldTextAlignment = ('auto' | 'left' | 'right' | 'center');
/**
* Internally, this is the "type" of cell that's being displayed
* in the table such as colored text, JSON, gauge, etc.
* The color-background-solid, gradient-gauge, and lcd-gauge
* modes are deprecated in favor of new cell subOptions
*/
export enum TableCellDisplayMode {
Auto = 'auto',
BasicGauge = 'basic',
ColorBackground = 'color-background',
ColorBackgroundSolid = 'color-background-solid',
ColorText = 'color-text',
Gauge = 'gauge',
GradientGauge = 'gradient-gauge',
Image = 'image',
JSONView = 'json-view',
LcdGauge = 'lcd-gauge',
}
/**
* Display mode to the "Colored Background" display
* mode for table cells. Either displays a solid color (basic mode)
* or a gradient.
*/
export enum TableCellBackgroundDisplayMode {
Basic = 'basic',
Gradient = 'gradient',
}
/**
* TODO docs
*/
@ -488,6 +455,43 @@ export enum BarGaugeDisplayMode {
Lcd = 'lcd',
}
/**
* Internally, this is the "type" of cell that's being displayed
* in the table such as colored text, JSON, gauge, etc.
* The color-background-solid, gradient-gauge, and lcd-gauge
* modes are deprecated in favor of new cell subOptions
*/
export enum TableCellDisplayMode {
Auto = 'auto',
BasicGauge = 'basic',
ColorBackground = 'color-background',
ColorBackgroundSolid = 'color-background-solid',
ColorText = 'color-text',
Gauge = 'gauge',
GradientGauge = 'gradient-gauge',
Image = 'image',
JSONView = 'json-view',
LcdGauge = 'lcd-gauge',
}
/**
* Display mode to the "Colored Background" display
* mode for table cells. Either displays a solid color (basic mode)
* or a gradient.
*/
export enum TableCellBackgroundDisplayMode {
Basic = 'basic',
Gradient = 'gradient',
}
/**
* TODO docs
*/
export interface TableSortByFieldState {
desc?: boolean;
displayName: string;
}
/**
* Auto mode table cell options
*/
@ -538,6 +542,24 @@ export interface TableColoredBackgroundCellOptions {
*/
export type TableCellOptions = (TableAutoCellOptions | TableBarGaugeCellOptions | TableColoredBackgroundCellOptions | TableColorTextCellOptions | TableImageCellOptions | TableJsonViewCellOptions);
/**
* Use UTC/GMT timezone
*/
export type TimeZoneUtc = 'utc';
/**
* Use the timezone defined by end user web browser
*/
export type TimeZoneBrowser = 'browser';
/**
* TODO docs
*/
export interface VizTooltipOptions {
mode: TooltipDisplayMode;
sort: SortOrder;
}
/**
* Field options for each field within a table (e.g 10, "The String", 64.20, etc.)
* Generally defines alignment, filtering capabilties, display options, etc.
@ -561,24 +583,6 @@ export const defaultTableFieldOptions: Partial<TableFieldOptions> = {
inspect: false,
};
/**
* TODO docs
*/
export interface VizTooltipOptions {
mode: TooltipDisplayMode;
sort: SortOrder;
}
/**
* Use UTC/GMT timezone
*/
export type TimeZoneUtc = 'utc';
/**
* Use the timezone defined by end user web browser
*/
export type TimeZoneBrowser = 'browser';
/**
* A specific timezone from https://en.wikipedia.org/wiki/Tz_database
*/

@ -1,4 +1,4 @@
package schema
package common
// TODO break this up into individual files. Current limitation on this is codegen logic, imports, dependencies
@ -137,12 +137,6 @@ LegendPlacement: "bottom" | "right" @cuetsy(kind="type")
// Note: "hidden" needs to remain as an option for plugins compatibility
LegendDisplayMode: "list" | "table" | "hidden" @cuetsy(kind="enum")
// TODO docs
TableSortByFieldState: {
displayName: string
desc?: bool
} @cuetsy(kind="interface")
// TODO docs
SingleStatBaseOptions: {
OptionsWithTextFormatting
@ -201,18 +195,6 @@ BigValueTextMode: "auto" | "value" | "value_and_name" | "name" | "none" @cuetsy(
// TODO docs
FieldTextAlignment: "auto" | "left" | "right" | "center" @cuetsy(kind="type")
// Internally, this is the "type" of cell that's being displayed
// in the table such as colored text, JSON, gauge, etc.
// The color-background-solid, gradient-gauge, and lcd-gauge
// modes are deprecated in favor of new cell subOptions
TableCellDisplayMode: "auto" | "color-text" | "color-background" | "color-background-solid" | "gradient-gauge" | "lcd-gauge" | "json-view" | "basic" | "image" | "gauge" @cuetsy(kind="enum",memberNames="Auto|ColorText|ColorBackground|ColorBackgroundSolid|GradientGauge|LcdGauge|JSONView|BasicGauge|Image|Gauge")
// Display mode to the "Colored Background" display
// mode for table cells. Either displays a solid color (basic mode)
// or a gradient.
TableCellBackgroundDisplayMode: "basic" | "gradient" @cuetsy(kind="enum",memberNames="Basic|Gradient")
// TODO docs
VizTextDisplayOptions: {
// Explicit title text size
@ -259,68 +241,8 @@ VizLegendOptions: {
// for the bar gauge component of Grafana UI
BarGaugeDisplayMode: "basic" | "lcd" | "gradient" @cuetsy(kind="enum")
// Auto mode table cell options
TableAutoCellOptions: {
type: TableCellDisplayMode & "auto"
} @cuetsy(kind="interface")
// Colored text cell options
TableColorTextCellOptions: {
type: TableCellDisplayMode & "color-text"
} @cuetsy(kind="interface")
// Json view cell options
TableJsonViewCellOptions: {
type: TableCellDisplayMode & "json-view"
} @cuetsy(kind="interface")
// Json view cell options
TableImageCellOptions: {
type: TableCellDisplayMode & "image"
} @cuetsy(kind="interface")
// Gauge cell options
TableBarGaugeCellOptions: {
type: TableCellDisplayMode & "gauge"
mode?: BarGaugeDisplayMode
} @cuetsy(kind="interface")
// Colored background cell options
TableColoredBackgroundCellOptions: {
type: TableCellDisplayMode & "color-background"
mode?: TableCellBackgroundDisplayMode
} @cuetsy(kind="interface")
// Table cell options. Each cell has a display mode
// and other potential options for that display.
TableCellOptions: TableAutoCellOptions | TableBarGaugeCellOptions | TableColoredBackgroundCellOptions | TableColorTextCellOptions | TableImageCellOptions | TableJsonViewCellOptions @cuetsy(kind="type")
// Field options for each field within a table (e.g 10, "The String", 64.20, etc.)
// Generally defines alignment, filtering capabilties, display options, etc.
TableFieldOptions: {
width?: number
minWidth?: number
align: FieldTextAlignment | *"auto"
// This field is deprecated in favor of using cellOptions
displayMode?: TableCellDisplayMode
cellOptions: TableCellOptions
hidden?: bool // ?? default is missing or false ??
inspect: bool | *false
filterable?: bool
} @cuetsy(kind="interface")
// TODO docs
VizTooltipOptions: {
mode: TooltipDisplayMode
sort: SortOrder
} @cuetsy(kind="interface")
// Use UTC/GMT timezone
TimeZoneUtc: "utc" @cuetsy(kind="type")
// Use the timezone defined by end user web browser
TimeZoneBrowser: "browser" @cuetsy(kind="type")
// A specific timezone from https://en.wikipedia.org/wiki/Tz_database
TimeZone: TimeZoneUtc | TimeZoneBrowser | string | *"browser" @cuetsy(kind="type")

@ -0,0 +1,69 @@
package common
// Internally, this is the "type" of cell that's being displayed
// in the table such as colored text, JSON, gauge, etc.
// The color-background-solid, gradient-gauge, and lcd-gauge
// modes are deprecated in favor of new cell subOptions
TableCellDisplayMode: "auto" | "color-text" | "color-background" | "color-background-solid" | "gradient-gauge" | "lcd-gauge" | "json-view" | "basic" | "image" | "gauge" @cuetsy(kind="enum",memberNames="Auto|ColorText|ColorBackground|ColorBackgroundSolid|GradientGauge|LcdGauge|JSONView|BasicGauge|Image|Gauge")
// Display mode to the "Colored Background" display
// mode for table cells. Either displays a solid color (basic mode)
// or a gradient.
TableCellBackgroundDisplayMode: "basic" | "gradient" @cuetsy(kind="enum",memberNames="Basic|Gradient")
// TODO docs
TableSortByFieldState: {
displayName: string
desc?: bool
} @cuetsy(kind="interface")
// Auto mode table cell options
TableAutoCellOptions: {
type: TableCellDisplayMode & "auto"
} @cuetsy(kind="interface")
// Colored text cell options
TableColorTextCellOptions: {
type: TableCellDisplayMode & "color-text"
} @cuetsy(kind="interface")
// Json view cell options
TableJsonViewCellOptions: {
type: TableCellDisplayMode & "json-view"
} @cuetsy(kind="interface")
// Json view cell options
TableImageCellOptions: {
type: TableCellDisplayMode & "image"
} @cuetsy(kind="interface")
// Gauge cell options
TableBarGaugeCellOptions: {
type: TableCellDisplayMode & "gauge"
mode?: BarGaugeDisplayMode
} @cuetsy(kind="interface")
// Colored background cell options
TableColoredBackgroundCellOptions: {
type: TableCellDisplayMode & "color-background"
mode?: TableCellBackgroundDisplayMode
} @cuetsy(kind="interface")
// Table cell options. Each cell has a display mode
// and other potential options for that display.
TableCellOptions: TableAutoCellOptions | TableBarGaugeCellOptions | TableColoredBackgroundCellOptions | TableColorTextCellOptions | TableImageCellOptions | TableJsonViewCellOptions @cuetsy(kind="type")
// Field options for each field within a table (e.g 10, "The String", 64.20, etc.)
// Generally defines alignment, filtering capabilties, display options, etc.
TableFieldOptions: {
width?: number
minWidth?: number
align: FieldTextAlignment | *"auto"
// This field is deprecated in favor of using cellOptions
displayMode?: TableCellDisplayMode
cellOptions: TableCellOptions
hidden?: bool // ?? default is missing or false ??
inspect: bool | *false
filterable?: bool
} @cuetsy(kind="interface")

@ -0,0 +1,10 @@
package common
// Use UTC/GMT timezone
TimeZoneUtc: "utc" @cuetsy(kind="type")
// Use the timezone defined by end user web browser
TimeZoneBrowser: "browser" @cuetsy(kind="type")
// A specific timezone from https://en.wikipedia.org/wiki/Tz_database
TimeZone: TimeZoneUtc | TimeZoneBrowser | string | *"browser" @cuetsy(kind="type")

@ -3,5 +3,5 @@
*
* @packageDocumentation
*/
export * from './schema/mudball.gen';
export * from './common/common.gen';
export * from './index.gen';

@ -1,5 +1,4 @@
{
// dashboard_experimental.gen.ts needs ignoring as isolatedModules requires it to contain an import or export statement.
"exclude": ["dist/**/*", "src/schema/dashboard/dashboard_experimental.gen.ts", "**/*.test.ts*"],
"exclude": ["dist/**/*", "**/*.test.ts*"],
"extends": "./tsconfig.json"
}

@ -5,8 +5,7 @@
"isolatedModules": true,
"rootDirs": ["."]
},
// dashboard_experimental.gen.ts needs ignoring as isolatedModules requires it to contain an import or export statement.
"exclude": ["dist/**/*", "src/schema/*/*_experimental.gen.ts"],
"exclude": ["dist/**/*"],
"extends": "@grafana/tsconfig",
"include": ["src/**/*.ts*"]
}

@ -1,104 +0,0 @@
//go:build ignore
// +build ignore
//go:generate go run gen.go
package main
import (
"fmt"
"os"
"path/filepath"
"cuelang.org/go/cue/cuecontext"
"cuelang.org/go/cue/load"
"github.com/grafana/cuetsy"
gcgen "github.com/grafana/grafana/pkg/codegen"
)
const sep = string(filepath.Separator)
var tsroot, cmroot, groot string
func init() {
cwd, err := os.Getwd()
if err != nil {
fmt.Fprintf(os.Stderr, "could not get working directory: %s", err)
os.Exit(1)
}
// TODO this binds us to only having coremodels in a single directory. If we need more, compgen is the way
groot = filepath.Dir(filepath.Dir(filepath.Dir(cwd))) // the working dir is <grafana_dir>/pkg/framework/coremodel. Going up 3 dirs we get the grafana root
cmroot = filepath.Join(groot, "pkg", "coremodel")
tsroot = filepath.Join(groot, "packages", "grafana-schema", "src")
}
// Generate Go and Typescript implementations for all coremodels, and populate the
// coremodel static registry.
func main() {
if len(os.Args) > 1 {
fmt.Fprintf(os.Stderr, "coremodel code generator does not currently accept any arguments\n, got %q", os.Args)
os.Exit(1)
}
wd := gcgen.NewWriteDiffer()
// TODO generating these is here temporarily until we make a more permanent home
wdsh, err := genSharedSchemas(groot)
if err != nil {
fmt.Fprintf(os.Stderr, "TS gen error for shared schemas in %s: %w", filepath.Join(groot, "packages", "grafana-schema", "src", "schema"), err)
os.Exit(1)
}
wd.Merge(wdsh)
if _, set := os.LookupEnv("CODEGEN_VERIFY"); set {
err = wd.Verify()
if err != nil {
fmt.Fprintf(os.Stderr, "generated code is not up to date:\n%s\nrun `make gen-cue` to regenerate\n\n", err)
os.Exit(1)
}
} else {
err = wd.Write()
if err != nil {
fmt.Fprintf(os.Stderr, "error while writing generated code to disk:\n%s\n", err)
os.Exit(1)
}
}
}
func genSharedSchemas(groot string) (gcgen.WriteDiffer, error) {
abspath := filepath.Join(groot, "packages", "grafana-schema", "src", "schema")
cfg := &load.Config{
ModuleRoot: groot,
Module: "github.com/grafana/grafana",
Dir: abspath,
}
bi := load.Instances(nil, cfg)
if len(bi) > 1 {
return nil, fmt.Errorf("loading CUE files in %s resulted in more than one instance", abspath)
}
ctx := cuecontext.New()
v := ctx.BuildInstance(bi[0])
if v.Err() != nil {
return nil, fmt.Errorf("errors while building CUE in %s: %s", abspath, v.Err())
}
b, err := cuetsy.Generate(v, cuetsy.Config{
Export: true,
})
if err != nil {
return nil, fmt.Errorf("failed to generate TS: %w", err)
}
wd := gcgen.NewWriteDiffer()
wd[filepath.Join(abspath, "mudball.gen.ts")] = append([]byte(`//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
// This file is autogenerated. DO NOT EDIT.
//
// To regenerate, run "make gen-cue" from the repository root.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
`), b...)
return wd, nil
}

@ -15,7 +15,7 @@ import (
// not present in the list are not not allowed, and code generation will fail.
var importMap = map[string]string{
"github.com/grafana/thema": "",
"github.com/grafana/grafana/packages/grafana-schema/src/schema": "@grafana/schema",
"github.com/grafana/grafana/packages/grafana-schema/src/common": "@grafana/schema",
}
func init() {

@ -26,7 +26,7 @@ import (
func PermittedCUEImports() []string {
return []string{
"github.com/grafana/thema",
"github.com/grafana/grafana/packages/grafana-schema/src/schema",
"github.com/grafana/grafana/packages/grafana-schema/src/common",
}
}

@ -16,7 +16,7 @@ package grafanaplugin
import (
"github.com/grafana/thema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/schema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/common"
)
Panel: thema.#Lineage & {

@ -16,7 +16,7 @@ package grafanaplugin
import (
"github.com/grafana/thema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/schema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/common"
)
Panel: thema.#Lineage & {

@ -16,7 +16,7 @@ package grafanaplugin
import (
"github.com/grafana/thema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/schema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/common"
)
Panel: thema.#Lineage & {

@ -16,7 +16,7 @@ package grafanaplugin
import (
"github.com/grafana/thema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/schema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/common"
)
Panel: thema.#Lineage & {

@ -16,7 +16,7 @@ package grafanaplugin
import (
"github.com/grafana/thema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/schema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/common"
)
Panel: thema.#Lineage & {

@ -16,7 +16,7 @@ package grafanaplugin
import (
"github.com/grafana/thema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/schema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/common"
)
Panel: thema.#Lineage & {

@ -16,7 +16,7 @@ package grafanaplugin
import (
"github.com/grafana/thema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/schema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/common"
)
Panel: thema.#Lineage & {

@ -16,7 +16,7 @@ package grafanaplugin
import (
"github.com/grafana/thema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/schema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/common"
)
Panel: thema.#Lineage & {

@ -16,7 +16,7 @@ package grafanaplugin
import (
"github.com/grafana/thema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/schema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/common"
)
Panel: thema.#Lineage & {

@ -16,7 +16,7 @@ package grafanaplugin
import (
"github.com/grafana/thema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/schema"
ui "github.com/grafana/grafana/packages/grafana-schema/src/common"
)
Panel: thema.#Lineage & {

Loading…
Cancel
Save