mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: add TemplateBuilderCompose SDK types and client method (#26350)
> [!NOTE]
> This PR was authored by Coder Agents on behalf of @jeremyruppel.
Part 3 of DEVEX-277 (POST /api/v2/templatebuilder/compose).
Adds SDK types and client method for the compose endpoint:
- `TemplateBuilderComposeRequest` with `BaseTemplateID` and `Modules` (list of `{ID, Variables}`). Registry URL is omitted from the request; it comes from server-side deployment config.
- `TemplateBuilderCompose(ctx, req)` client method that POSTs the request and returns raw `application/x-tar` bytes (matching the `Download` pattern in `codersdk/files.go`).
- Generated TypeScript types updated.
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Generated
+20
@@ -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<string, string>;
|
||||
}
|
||||
|
||||
// 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;
|
||||
|
||||
Reference in New Issue
Block a user