Cue Kind Definition

作者 grafana1ccacf29049fApache-2.0279 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫今天更新

Author CUE kind definitions for grafana-app-sdk apps - schemas, versioning, field constraints, named type definitions, custom routes, and codegen configuration. Scaffolds kinds via `grafana-app-sdk project kind add`, writes spec/status schemas with type constraints (regex, enum, range), defines `#`-prefixed named types for reusable structs, registers versions in the app manifest, and runs `grafana-app-sdk generate` with explicit error recovery. Use when working with CUE kinds, adding a new resource type, adding a version to an existing kind, writing schema field constraints, defining `#Definition` types, adding custom routes, editing files under `kinds/`, or when the user asks to "model a resource", "add a CUE schema", or "write a kind" — even without saying "CUE" explicitly.

AI 產生的概覽

為 grafana-app-sdk 應用程式撰寫 CUE kind 定義,涵蓋 schema、版本管理、約束與程式碼產生。

功能
此技能指導為 grafana-app-sdk 應用程式撰寫 CUE kind 定義。它使用 grafana-app-sdk project kind add 指令建立 kind 檔案,撰寫帶有欄位約束的 spec 與 status schema,定義可重複使用的具名型別,在應用程式清單中註冊版本,並執行 grafana-app-sdk generate 並提供錯誤復原方式。它也涵蓋為現有 kind 新增版本,以及設定 TypeScript 與 Go 程式碼產生。
適用情境
適用於處理 CUE kind、新增資源型別或為現有 kind 新增版本、撰寫 schema 欄位約束、定義具名型別、新增自訂路由,或編輯 kinds/ 目錄下的檔案時。當使用者要求對資源建模、新增 CUE schema 或撰寫 kind 時也適用。
執行需求
需要 grafana-app-sdk 命令列工具用於建立與程式碼產生,以及 CUE 工具用於 schema 驗證。此技能不附帶指令碼,僅包含說明與參考文件。

CUE Kind Definition

Common Workflows

Adding a new kind

bash
# 1. Scaffold the kind filesgrafana-app-sdk project kind add MyKind --overwrite# Produces kinds/mykind.cue + kinds/mykind_v1alpha1.cue + updates kinds/manifest.cue.
# 2. Edit the generated .cue files — fill in schema.spec / schema.status fields
# 3. Generate types and clientsgrafana-app-sdk generate
# 4. Verify the generated artifacts existls pkg/generated/    # should contain new types for MyKind

If generate fails with CUE errors:

  • Read the error — CUE prints the offending file + line + which constraint failed
  • Common causes: missing required field, type mismatch (e.g. string field assigned an int), unresolved reference between version files
  • Fix the .cue source, re-run grafana-app-sdk generate. Never edit files under pkg/generated/ — they're overwritten on every run.

Adding a new version to an existing kind

bash
# 1. Copy the existing version filecp kinds/mykind_v1alpha1.cue kinds/mykind_v1.cue
# 2. Edit kinds/mykind_v1.cue — rename the top-level object (e.g. myKindv1) and adjust the schema
# 3. Register the new version in kinds/manifest.cue#    Add a versions["v1"]: { schema: myKindv1 } entry
# 4. Re-generategrafana-app-sdk generate
# 5. Verify both versions were generated — per-version Go types live under pkg/generated/<group>/<version>/ls pkg/generated/             # should list both version directories (e.g. v1alpha1/ v1/)# Optionally inspect the CRD spec under definitions/ to confirm both versions appear in `spec.versions[]`

Breaking changes (removing fields, changing types, adding required fields) must go into a new version — never modify a stable version (v1, v2) in place.

Kind file structure

The CLI produces a flat layout under kinds/:

kinds/├── manifest.cue           # App manifest + version list declarations├── mykind.cue             # Common (cross-version) kind metadata└── mykind_v1alpha1.cue    # v1alpha1 schema + codegen config

For multi-version kinds, additional version files sit alongside (mykind_v1.cue, etc.). For very large kind sets (10+ kinds), consider the per-kind subdirectory layout — full kind anatomy reference in references/kind-layout.md [blocked].

CUE Kind Anatomy

Three layers per kind:

1. Common kind metadata

cue
// kinds/mykind.cuepackage kinds
myKind: {    kind: "MyKind"               // Required: PascalCase kind name    // other cross-version fields (scope, pluralName, validation, mutation, conversion, …)    // Full field reference in references/kind-layout.md.}

2. Per-version schema

cue
// kinds/mykind_v1alpha1.cuepackage kinds
myKindv1alpha1: myKind & {    schema: {        spec: {                       // desired state — user-set            title:       string            description: string | *""            count:       int & >=0            enabled:     bool | *true        }        status: {                     // observed state — operator-set            lastObservedGeneration: int | *0            state:                  string | *""            message:                string | *""        }    }    codegen: {        ts: { enabled: true }        go: { enabled: true }    }}

3. App manifest

cue
// kinds/manifest.cuepackage kinds
App: {    appName: "my-app"    versions: {        "v1alpha1": { schema: myKindv1alpha1 }    }}

Codegen configuration

Control what gets generated per kind per version:

cue
codegen: {    ts: { enabled: true | false }   // TypeScript types    go: { enabled: true | false }   // Go types + client}

Disabling go for frontend-only apps avoids unused Go code. Disabling ts for backend-only resources reduces bundle size. Both default to true when omitted.

References

  • references/kind-layout.md [blocked] — full common-metadata field reference + app manifest fields + per-kind subdirectory layout
  • references/schema-types.md [blocked] — CUE schema field types (basic types, constraints, regex, enums, maps, lists) + #-prefixed named type definitions
  • references/custom-routes.md [blocked] — kind-level + version-level custom routes + handler registration in app.go

External resources

來源與署名

來源:grafana/skills位於skills/grafana-app-sdk/cue-kind-definition提交1ccacf2

授權條款: Apache-2.0

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架

更多來自 grafana/skills 的技能

React 19 Plugin Migration

grafana

指導將 Grafana 外掛遷移至 React 19 相容,依序完成建置、相依性與原始碼修改步驟。

Software Development279今天更新

Plugin Bundle Size

grafana

指導使用 React.lazy、Suspense 與 webpack 程式碼分割來最佳化 Grafana 應用程式外掛的打包體積。

Software Development279今天更新

Grafana Scenes

grafana

使用 @grafana/scenes 框架建置 Grafana 外掛頁面,涵蓋場景、面板、變數與下鑽導覽。

Software Development279今天更新

Check Npm

grafana

對 JS/TS 儲存庫的 npm、yarn 或 pnpm 設定進行唯讀供應鏈強化稽核。

Security279今天更新

Mimir

grafana

指導架設與維運 Grafana Mimir,用於可擴充、多租戶、長期的 Prometheus 與 OTLP 指標儲存。

DevOps & Cloud279今天更新

K6 Trend Analysis

grafana

Analyze Grafana Cloud k6 test run trends over time. Detects slow metric drift (e.g., P95 latency creeping up while still passing thresholds), computes headroom to thresholds, flags anomalies, and recommends threshold tightening. Use when the user asks about test performance trends, wants to know if metrics are degrading, asks whether thresholds should be tightened, or wants a health check across recent runs for a specific test. Trigger on phrases like "how is my test trending", "is P95 getting worse", "check for performance regression", "should I tighten thresholds", "are my tests degrading", "show me trends for test X", "analyze my k6 test runs", or "is my test getting slower". Also trigger when a user asks to check all tests in a project -- run this skill once per test and synthesize.

待分類279今天更新