| 488 | } |
| 489 | |
| 490 | func (dev *EngineDev) buildTargets(ctx context.Context, tags []string) ([]targetResult, error) { |
| 491 | releaseVersion := releaseVersionFromTags(tags) |
| 492 | targetResults := make([]targetResult, len(targets)) |
| 493 | jobs := parallel.New() |
| 494 | for i, target := range targets { |
| 495 | // determine the target tags |
| 496 | for _, tag := range tags { |
| 497 | targetResults[i].Tags = append(targetResults[i].Tags, fmt.Sprintf(target.Tag, tag)) |
| 498 | } |
| 499 | // build all the target platforms |
| 500 | targetResults[i].Platforms = make([]*dagger.Container, len(target.Platforms)) |
| 501 | for j, platform := range target.Platforms { |
| 502 | jobs = jobs.WithJob(fmt.Sprintf("build %s for %s", target.Name, platform), |
| 503 | func(ctx context.Context) error { |
| 504 | ctr, err := dev.Container(ctx, platform, target.GPUSupport, releaseVersion, releaseVersion) |
| 505 | if err != nil { |
| 506 | return err |
| 507 | } |
| 508 | ctr, err = ctr.Sync(ctx) |
| 509 | if err != nil { |
| 510 | return err |
| 511 | } |
| 512 | targetResults[i].Platforms[j] = ctr |
| 513 | return nil |
| 514 | }, |
| 515 | ) |
| 516 | } |
| 517 | } |
| 518 | if err := jobs.Run(ctx); err != nil { |
| 519 | return nil, err |
| 520 | } |
| 521 | return targetResults, nil |
| 522 | } |
| 523 | |
| 524 | func releaseVersionFromTags(tags []string) string { |
| 525 | for _, tag := range tags { |