Basic implementation of preset ID tracking

Signed-off-by: Danny Kopping <danny@coder.com>

# Conflicts:
#	site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx
This commit is contained in:
Danny Kopping
2025-02-12 14:40:38 +02:00
parent 1f6be5ee7f
commit 7e6a7d26a1
10 changed files with 292 additions and 299 deletions

4
coderd/apidoc/docs.go generated
View File

@ -10988,6 +10988,10 @@ const docTemplate = `{
"type": "string",
"format": "uuid"
},
"template_version_preset_id": {
"type": "string",
"format": "uuid"
},
"ttl_ms": {
"type": "integer"
}

View File

@ -9783,6 +9783,10 @@
"type": "string",
"format": "uuid"
},
"template_version_preset_id": {
"type": "string",
"format": "uuid"
},
"ttl_ms": {
"type": "integer"
}

View File

@ -698,6 +698,9 @@ func createWorkspace(
if req.TemplateVersionID != uuid.Nil {
builder = builder.VersionID(req.TemplateVersionID)
}
if req.TemplateVersionPresetID != uuid.Nil {
builder = builder.TemplateVersionPresetID(req.TemplateVersionPresetID)
}
if claimedWorkspace != nil {
builder = builder.MarkPrebuildClaimedBy(owner.ID)

View File

@ -51,9 +51,10 @@ type Builder struct {
logLevel string
deploymentValues *codersdk.DeploymentValues
richParameterValues []codersdk.WorkspaceBuildParameter
initiator uuid.UUID
reason database.BuildReason
richParameterValues []codersdk.WorkspaceBuildParameter
initiator uuid.UUID
reason database.BuildReason
templateVersionPresetID uuid.UUID
// used during build, makes function arguments less verbose
ctx context.Context
@ -215,6 +216,12 @@ func (b Builder) SetLastWorkspaceBuildJobInTx(job *database.ProvisionerJob) Buil
return b
}
func (b Builder) TemplateVersionPresetID(id uuid.UUID) Builder {
// nolint: revive
b.templateVersionPresetID = id
return b
}
type BuildError struct {
// Status is a suitable HTTP status code
Status int
@ -389,20 +396,23 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
var workspaceBuild database.WorkspaceBuild
err = b.store.InTx(func(store database.Store) error {
err = store.InsertWorkspaceBuild(b.ctx, database.InsertWorkspaceBuildParams{
ID: workspaceBuildID,
CreatedAt: now,
UpdatedAt: now,
WorkspaceID: b.workspace.ID,
TemplateVersionID: templateVersionID,
BuildNumber: buildNum,
ProvisionerState: state,
InitiatorID: b.initiator,
Transition: b.trans,
JobID: provisionerJob.ID,
Reason: b.reason,
Deadline: time.Time{}, // set by provisioner upon completion
MaxDeadline: time.Time{}, // set by provisioner upon completion
TemplateVersionPresetID: uuid.NullUUID{}, // TODO (sasswart): add this in from the caller
ID: workspaceBuildID,
CreatedAt: now,
UpdatedAt: now,
WorkspaceID: b.workspace.ID,
TemplateVersionID: templateVersionID,
BuildNumber: buildNum,
ProvisionerState: state,
InitiatorID: b.initiator,
Transition: b.trans,
JobID: provisionerJob.ID,
Reason: b.reason,
Deadline: time.Time{}, // set by provisioner upon completion
MaxDeadline: time.Time{}, // set by provisioner upon completion
TemplateVersionPresetID: uuid.NullUUID{
UUID: b.templateVersionPresetID,
Valid: b.templateVersionPresetID != uuid.Nil,
},
})
if err != nil {
code := http.StatusInternalServerError