diff --git a/coderd/templateversions_test.go b/coderd/templateversions_test.go index 938c202863bd5..17d77440ff1d6 100644 --- a/coderd/templateversions_test.go +++ b/coderd/templateversions_test.go @@ -760,7 +760,7 @@ func TestPatchCancelTemplateVersion(t *testing.T) { user := coderdtest.CreateFirstUser(t, client) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, - ProvisionApply: []*proto.Response{{ + ProvisionPlan: []*proto.Response{{ Type: &proto.Response_Log{ Log: &proto.Log{}, }, @@ -793,7 +793,7 @@ func TestPatchCancelTemplateVersion(t *testing.T) { user := coderdtest.CreateFirstUser(t, client) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, - ProvisionApply: []*proto.Response{{ + ProvisionPlan: []*proto.Response{{ Type: &proto.Response_Log{ Log: &proto.Log{}, }, diff --git a/coderd/workspacebuilds_test.go b/coderd/workspacebuilds_test.go index 1fa278120ab98..fd6f324c61c5c 100644 --- a/coderd/workspacebuilds_test.go +++ b/coderd/workspacebuilds_test.go @@ -1500,18 +1500,18 @@ func TestPostWorkspaceBuild(t *testing.T) { client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) user := coderdtest.CreateFirstUser(t, client) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ - ProvisionApply: []*proto.Response{ + ProvisionPlan: []*proto.Response{ { - Type: &proto.Response_Apply{ - Apply: &proto.ApplyComplete{ - Error: "failed to import", + Type: &proto.Response_Plan{ + Plan: &proto.PlanComplete{ + Error: "failed to plan", }, }, }, }, }) template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) - coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID) + version = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID) ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() diff --git a/provisioner/echo/serve.go b/provisioner/echo/serve.go index 1ecdd69179753..e4141572fc6e0 100644 --- a/provisioner/echo/serve.go +++ b/provisioner/echo/serve.go @@ -403,69 +403,47 @@ func TarWithOptions(ctx context.Context, logger slog.Logger, responses *Response ExtraFiles: nil, } } - // source apply from the graph if graph exists - if responses.ProvisionApply == nil && len(responses.ProvisionGraph) > 0 { - for _, resp := range responses.ProvisionGraph { - if resp.GetLog() != nil { - responses.ProvisionApply = append(responses.ProvisionApply, resp) - continue - } - responses.ProvisionApply = append(responses.ProvisionApply, &proto.Response{ - Type: &proto.Response_Apply{Apply: &proto.ApplyComplete{ - Error: resp.GetGraph().GetError(), - }}, - }) - } - } - if responses.ProvisionGraph == nil { - for _, resp := range responses.ProvisionApply { - if resp.GetLog() != nil { - responses.ProvisionGraph = append(responses.ProvisionGraph, resp) - continue - } - responses.ProvisionGraph = append(responses.ProvisionGraph, &proto.Response{ - Type: &proto.Response_Graph{Graph: &proto.GraphComplete{ - Error: resp.GetApply().GetError(), - }}, - }) - } + + // Apply sane defaults for missing responses. + if responses.Parse == nil { + responses.Parse = ParseComplete } if responses.ProvisionInit == nil { - for _, resp := range responses.ProvisionGraph { - if resp.GetLog() != nil { - responses.ProvisionInit = append(responses.ProvisionInit, resp) - continue - } - responses.ProvisionInit = append(responses.ProvisionInit, &proto.Response{ - Type: &proto.Response_Init{ - Init: &proto.InitComplete{ - Error: resp.GetGraph().GetError(), - Timings: nil, - Modules: nil, - ModuleFiles: nil, - ModuleFilesHash: nil, - }, - }, - }, - ) - } + responses.ProvisionInit = InitComplete } if responses.ProvisionPlan == nil { + responses.ProvisionPlan = PlanComplete + + // If a graph response exists, make sure it matches the plan. for _, resp := range responses.ProvisionGraph { if resp.GetLog() != nil { - responses.ProvisionPlan = append(responses.ProvisionPlan, resp) continue } - responses.ProvisionPlan = append(responses.ProvisionPlan, &proto.Response{ - Type: &proto.Response_Plan{Plan: &proto.PlanComplete{ - Error: resp.GetGraph().GetError(), - Plan: []byte("{}"), - //nolint:gosec // the number of resources will not exceed int32 - AiTaskCount: int32(len(resp.GetGraph().GetAiTasks())), - }}, - }) + if g := resp.GetGraph(); g != nil { + dailycost := int32(0) + for _, r := range g.GetResources() { + dailycost += r.DailyCost + } + responses.ProvisionPlan = []*proto.Response{{ + Type: &proto.Response_Plan{ + Plan: &proto.PlanComplete{ + Plan: []byte("{}"), + //nolint:gosec // the number of resources will not exceed int32 + AiTaskCount: int32(len(g.GetAiTasks())), + DailyCost: dailycost, + }, + }, + }} + break + } } } + if responses.ProvisionApply == nil { + responses.ProvisionApply = ApplyComplete + } + if responses.ProvisionGraph == nil { + responses.ProvisionGraph = GraphComplete + } for _, resp := range responses.ProvisionPlan { plan := resp.GetPlan()