(ctx context.Context, tag, pkg, dockerContext, builderImage, builderConfigPath, platform string, restart, preCacheImages bool, c spec.CacheProvider, stdin io.Reader, stdout io.Writer, sbomScan bool, sbomScannerImage, progressType string, imageBuildOpts spec.ImageBuildOptions)
| 508 | } |
| 509 | |
| 510 | func (dr *dockerRunnerImpl) Build(ctx context.Context, tag, pkg, dockerContext, builderImage, builderConfigPath, platform string, restart, preCacheImages bool, c spec.CacheProvider, stdin io.Reader, stdout io.Writer, sbomScan bool, sbomScannerImage, progressType string, imageBuildOpts spec.ImageBuildOptions) error { |
| 511 | // ensure we have a builder |
| 512 | client, err := dr.Builder(ctx, dockerContext, builderImage, builderConfigPath, platform, restart) |
| 513 | if err != nil { |
| 514 | return fmt.Errorf("unable to ensure builder container: %v", err) |
| 515 | } |
| 516 | |
| 517 | frontendAttrs := map[string]string{} |
| 518 | |
| 519 | for _, proxyVarName := range proxyEnvVars { |
| 520 | if value, ok := os.LookupEnv(proxyVarName); ok { |
| 521 | frontendAttrs[proxyVarName] = value |
| 522 | } |
| 523 | } |
| 524 | // platform |
| 525 | frontendAttrs["platform"] = platform |
| 526 | |
| 527 | // build-args |
| 528 | for k, v := range imageBuildOpts.BuildArgs { |
| 529 | frontendAttrs[fmt.Sprintf("build-arg:%s", k)] = *v |
| 530 | } |
| 531 | |
| 532 | // no-cache option |
| 533 | if !dr.cache { |
| 534 | frontendAttrs["no-cache"] = "" |
| 535 | } |
| 536 | |
| 537 | // network |
| 538 | // translate to net modes understood by buildkit dockerfile frontend |
| 539 | switch imageBuildOpts.NetworkMode { |
| 540 | case "host", "none": |
| 541 | frontendAttrs["force-network-mode"] = imageBuildOpts.NetworkMode |
| 542 | case "default": |
| 543 | frontendAttrs["force-network-mode"] = "sandbox" |
| 544 | default: |
| 545 | return fmt.Errorf("unsupported network mode %q", imageBuildOpts.NetworkMode) |
| 546 | } |
| 547 | |
| 548 | for k, v := range imageBuildOpts.Labels { |
| 549 | frontendAttrs[fmt.Sprintf("label:%s", k)] = v |
| 550 | } |
| 551 | |
| 552 | if sbomScan { |
| 553 | var sbomValue string |
| 554 | if sbomScannerImage != "" { |
| 555 | sbomValue = fmt.Sprintf("generator=%s", sbomScannerImage) |
| 556 | } |
| 557 | frontendAttrs[sbomFrontEndKey] = sbomValue |
| 558 | } |
| 559 | |
| 560 | attachable := []session.Attachable{} |
| 561 | localDirs := map[string]string{} |
| 562 | |
| 563 | // Add SSH agent provider if needed |
| 564 | if len(imageBuildOpts.SSH) > 0 { |
| 565 | configs, err := build.ParseSSH(imageBuildOpts.SSH) |
| 566 | if err != nil { |
| 567 | return err |
nothing calls this directly
no test coverage detected