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

Function waitForBuild

scaletest/autostart/run.go:201–231  ·  view source on GitHub ↗

waitForBuild waits for a build with the given transition to reach a terminal state. It returns nil on success, or an error if the build fails, is canceled, or the context expires. If an unexpected transition is received, it returns an error immediately.

(ctx context.Context, logger slog.Logger, updates <-chan codersdk.WorkspaceBuildUpdate, transition codersdk.WorkspaceTransition)

Source from the content-addressed store, hash-verified

199// fails, is canceled, or the context expires. If an unexpected transition
200// is received, it returns an error immediately.
201func waitForBuild(ctx context.Context, logger slog.Logger, updates <-chan codersdk.WorkspaceBuildUpdate, transition codersdk.WorkspaceTransition) error {
202 for {
203 select {
204 case <-ctx.Done():
205 return ctx.Err()
206 case update, ok := <-updates:
207 if !ok {
208 return xerrors.New("build updates channel closed")
209 }
210 logger.Debug(ctx, "received build update",
211 slog.F("transition", update.Transition),
212 slog.F("job_status", update.JobStatus),
213 slog.F("build_number", update.BuildNumber))
214
215 if update.Transition != string(transition) {
216 return xerrors.Errorf("unexpected transition: expected %s, got %s (build_number=%d)", transition, update.Transition, update.BuildNumber)
217 }
218 switch codersdk.ProvisionerJobStatus(update.JobStatus) {
219 case codersdk.ProvisionerJobSucceeded:
220 return nil
221 case codersdk.ProvisionerJobFailed:
222 return xerrors.Errorf("workspace build failed (transition=%s, build_number=%d)", update.Transition, update.BuildNumber)
223 case codersdk.ProvisionerJobCanceled:
224 return xerrors.Errorf("workspace build canceled (transition=%s, build_number=%d)", update.Transition, update.BuildNumber)
225 default:
226 // Intermediate states (pending, running, canceling)
227 // are expected; keep waiting.
228 }
229 }
230 }
231}
232
233func (r *Runner) Cleanup(ctx context.Context, id string, logs io.Writer) error {
234 if r.workspacebuildRunner != nil {

Callers 1

RunReturningResultMethod · 0.70

Calls 5

ProvisionerJobStatusTypeAlias · 0.92
ErrMethod · 0.80
NewMethod · 0.65
DoneMethod · 0.45
ErrorfMethod · 0.45

Tested by

no test coverage detected