mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
Scaffolds the `coderd/templatebuilder` package for the guided template builder ([DEVEX-272](https://linear.app/codercom/issue/DEVEX-272), [RFC](https://www.notion.so/coderhq/RFC-Guided-Template-Creation-Workflow-342d579be59280dfbf8eea2e5006dbda)). Adds the module catalog types and `go:embed` wiring that the template builder endpoints will use: - `codersdk.TemplateBuilderModule`, `TemplateBuilderModuleVariable`, and related types matching the RFC schema - Internal `ModuleManifest` type with `go:embed` wiring to bundle `module.json` files from `coderd/templatebuilder/modules/` - `LoadModules()` with defensive copy, unexported `parseModulesFromFS(fs.FS)` for test isolation, `ToSDK()` conversion - Real `code-server` module manifest as the first catalog entry - Strict validation: ID uniqueness, version non-empty, variable type/name validation, `DisallowUnknownFields`, and requiring `module.json` in every module directory - Tests via internal `catalog_internal_test.go` (for `parseModulesFromFS` with `fstest.MapFS` fixtures) and external `catalog_test.go` (for `LoadModules` and `ToSDK`), covering multi-module parsing, all variable types, validation errors, nil-slice normalization, and full SDK field assertions > [!NOTE] > Generated with [Coder Agents](https://coder.com/agents) by @jeremyruppel --------- Co-authored-by: McKayla はな <mckayla@hey.com>
43 lines
1.8 KiB
Go
43 lines
1.8 KiB
Go
package codersdk
|
|
|
|
import "encoding/json"
|
|
|
|
// TemplateBuilderVariableType enumerates the variable types
|
|
// supported by template builder module manifests.
|
|
type TemplateBuilderVariableType string
|
|
|
|
const (
|
|
TemplateBuilderVariableTypeString TemplateBuilderVariableType = "string"
|
|
TemplateBuilderVariableTypeNumber TemplateBuilderVariableType = "number"
|
|
TemplateBuilderVariableTypeBool TemplateBuilderVariableType = "bool"
|
|
)
|
|
|
|
type TemplateBuilderModuleVariable struct {
|
|
Name string `json:"name"`
|
|
Type TemplateBuilderVariableType `json:"type"`
|
|
Description string `json:"description"`
|
|
Default json.RawMessage `json:"default,omitempty"`
|
|
Required bool `json:"required"`
|
|
Sensitive bool `json:"sensitive"`
|
|
Computed bool `json:"computed"`
|
|
}
|
|
|
|
// TemplateBuilderModule is the API response type returned by
|
|
// GET /api/v2/templatebuilder/modules. The Version field is
|
|
// populated from the catalog manifest's PinnedVersion at serving time.
|
|
type TemplateBuilderModule struct {
|
|
ID string `json:"id"`
|
|
DisplayName string `json:"display_name"`
|
|
Description string `json:"description"`
|
|
Icon string `json:"icon"`
|
|
Category string `json:"category"`
|
|
Version string `json:"version"`
|
|
CompatibleOS []string `json:"compatible_os"`
|
|
ConflictsWith []string `json:"conflicts_with"`
|
|
Variables []TemplateBuilderModuleVariable `json:"variables"`
|
|
}
|
|
|
|
type TemplateBuilderModulesResponse struct {
|
|
Modules []TemplateBuilderModule `json:"modules"`
|
|
}
|