diff --git a/codersdk/templatebuilder.go b/codersdk/templatebuilder.go index 8b41b00773..098250fd5d 100644 --- a/codersdk/templatebuilder.go +++ b/codersdk/templatebuilder.go @@ -3,6 +3,7 @@ package codersdk import ( "context" "encoding/json" + "io" "net/http" "net/url" ) @@ -95,3 +96,31 @@ func (c *Client) TemplateBuilderModules(ctx context.Context, base string) (Templ var resp TemplateBuilderModulesResponse return resp, json.NewDecoder(res.Body).Decode(&resp) } + +// TemplateBuilderComposeRequest is the request body for +// POST /api/v2/templatebuilder/compose. +type TemplateBuilderComposeRequest struct { + BaseTemplateID string `json:"base_template_id"` + Modules []TemplateBuilderComposeModule `json:"modules"` +} + +// TemplateBuilderComposeModule identifies a module and its variable +// values for the compose request. +type TemplateBuilderComposeModule struct { + ID string `json:"id"` + Variables map[string]string `json:"variables,omitempty"` +} + +// TemplateBuilderCompose renders a base template with the selected +// modules and returns the resulting tar archive bytes. +func (c *Client) TemplateBuilderCompose(ctx context.Context, req TemplateBuilderComposeRequest) ([]byte, error) { + res, err := c.Request(ctx, http.MethodPost, "/api/v2/templatebuilder/compose", req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK { + return nil, ReadBodyAsError(res) + } + return io.ReadAll(res.Body) +} diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index dce48dfb84..f63f476f7d 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -8172,6 +8172,26 @@ export interface TemplateBuilderBasesResponse { readonly bases: readonly TemplateBuilderBase[]; } +// From codersdk/templatebuilder.go +/** + * TemplateBuilderComposeModule identifies a module and its variable + * values for the compose request. + */ +export interface TemplateBuilderComposeModule { + readonly id: string; + readonly variables?: Record; +} + +// From codersdk/templatebuilder.go +/** + * TemplateBuilderComposeRequest is the request body for + * POST /api/v2/templatebuilder/compose. + */ +export interface TemplateBuilderComposeRequest { + readonly base_template_id: string; + readonly modules: readonly TemplateBuilderComposeModule[]; +} + // From codersdk/deployment.go export interface TemplateBuilderConfig { readonly disabled?: boolean;