getScaletestPrebuildWorkspaces returns all prebuild workspaces that belong to scaletest templates. It uses getScaletestPrebuildsTemplates to scope the query so that legitimate (non-scaletest) prebuilds on the deployment are not caught in the cleanup. If template is non-empty only workspaces for that
(ctx context.Context, client *codersdk.Client, template string)
| 547 | // caught in the cleanup. If template is non-empty only workspaces for that |
| 548 | // template are returned. |
| 549 | func getScaletestPrebuildWorkspaces(ctx context.Context, client *codersdk.Client, template string) ([]codersdk.Workspace, error) { |
| 550 | const pageSize = 100 |
| 551 | |
| 552 | templates, err := getScaletestPrebuildsTemplates(ctx, client, template) |
| 553 | if err != nil { |
| 554 | return nil, xerrors.Errorf("list scaletest prebuild templates: %w", err) |
| 555 | } |
| 556 | |
| 557 | seen := make(map[uuid.UUID]struct{}) |
| 558 | var result []codersdk.Workspace |
| 559 | |
| 560 | for _, tmpl := range templates { |
| 561 | for page := 0; ; page++ { |
| 562 | resp, err := client.Workspaces(ctx, codersdk.WorkspaceFilter{ |
| 563 | Template: tmpl.Name, |
| 564 | Offset: page * pageSize, |
| 565 | Limit: pageSize, |
| 566 | }) |
| 567 | if err != nil { |
| 568 | return nil, xerrors.Errorf("list workspaces for template %q (page %d): %w", tmpl.Name, page, err) |
| 569 | } |
| 570 | for _, ws := range resp.Workspaces { |
| 571 | if _, ok := seen[ws.ID]; !ok { |
| 572 | seen[ws.ID] = struct{}{} |
| 573 | result = append(result, ws) |
| 574 | } |
| 575 | } |
| 576 | if len(resp.Workspaces) < pageSize { |
| 577 | break |
| 578 | } |
| 579 | } |
| 580 | } |
| 581 | |
| 582 | return result, nil |
| 583 | } |
| 584 | |
| 585 | // getScaletestPrebuildsTemplates returns all templates created by the scaletest |
| 586 | // prebuilds runner (identified by prebuilds.TemplatePrefix). If template is |
no test coverage detected