MCPcopy Create free account
hub / github.com/coder/coder / RunReturningResult

Method RunReturningResult

scaletest/autostart/run.go:46–195  ·  view source on GitHub ↗
(ctx context.Context, id string, logs io.Writer)

Source from the content-addressed store, hash-verified

44}
45
46func (r *Runner) RunReturningResult(ctx context.Context, id string, logs io.Writer) (RunResult, error) {
47 ctx, span := tracing.StartSpan(ctx)
48 defer span.End()
49
50 result := RunResult{}
51
52 reachedBarrier := false
53 defer func() {
54 if !reachedBarrier {
55 r.cfg.SetupBarrier.Done()
56 }
57 }()
58
59 logs = loadtestutil.NewSyncWriter(logs)
60 logger := slog.Make(sloghuman.Sink(logs)).Leveled(slog.LevelDebug)
61 r.client.SetLogger(logger)
62 r.client.SetLogBodies(true)
63
64 r.createUserRunner = createusers.NewRunner(r.client, r.cfg.User)
65 newUserAndToken, err := r.createUserRunner.RunReturningUser(ctx, id, logs)
66 if err != nil {
67 return result, xerrors.Errorf("create user: %w", err)
68 }
69 newUser := newUserAndToken.User
70
71 newUserClient := codersdk.New(r.client.URL,
72 codersdk.WithSessionToken(newUserAndToken.SessionToken),
73 codersdk.WithLogger(logger),
74 codersdk.WithLogBodies())
75
76 //nolint:gocritic // short log is fine
77 logger.Info(ctx, "user created", slog.F("username", newUser.Username), slog.F("user_id", newUser.ID.String()))
78
79 workspaceBuildConfig := r.cfg.Workspace
80 workspaceBuildConfig.OrganizationID = r.cfg.User.OrganizationID
81 workspaceBuildConfig.UserID = newUser.ID.String()
82 // We'll wait for the build ourselves to avoid multiple API requests.
83 workspaceBuildConfig.NoWaitForBuild = true
84 workspaceBuildConfig.NoWaitForAgents = true
85
86 r.workspacebuildRunner = workspacebuild.NewRunner(newUserClient, workspaceBuildConfig)
87 workspace, err := r.workspacebuildRunner.RunReturningWorkspace(ctx, id, logs)
88 if err != nil {
89 return result, xerrors.Errorf("create workspace: %w", err)
90 }
91
92 result.WorkspaceID = workspace.ID
93 result.WorkspaceName = workspace.Name
94
95 buildUpdates := r.cfg.BuildUpdates
96
97 createWorkspaceCtx, cancel := context.WithTimeout(ctx, r.cfg.WorkspaceJobTimeout)
98 defer cancel()
99
100 logger.Info(ctx, "waiting for initial workspace build", slog.F("workspace_name", workspace.Name), slog.F("workspace_id", workspace.ID.String()))
101 err = waitForBuild(createWorkspaceCtx, logger, buildUpdates, codersdk.WorkspaceTransitionStart)
102 if err != nil {
103 return result, xerrors.Errorf("wait for initial workspace build (workspace=%s, id=%s): %w", workspace.Name, workspace.ID, err)

Callers 1

RunMethod · 0.95

Calls 15

StartSpanFunction · 0.92
NewSyncWriterFunction · 0.92
NewRunnerFunction · 0.92
NewFunction · 0.92
WithSessionTokenFunction · 0.92
WithLoggerFunction · 0.92
WithLogBodiesFunction · 0.92
NewRunnerFunction · 0.92
RunReturningUserMethod · 0.80
RunReturningWorkspaceMethod · 0.80
CreateWorkspaceBuildMethod · 0.80
waitForBuildFunction · 0.70

Tested by

no test coverage detected