MCPcopy Create free account
hub / github.com/linuxkit/linuxkit / Build

Method Build

src/cmd/linuxkit/pkglib/dockerimpl.go:510–758  ·  view source on GitHub ↗
(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)

Source from the content-addressed store, hash-verified

508}
509
510func (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

Callers

nothing calls this directly

Calls 8

BuilderMethod · 0.95
fixedWriteCloserFunction · 0.85
OpenMethod · 0.65
FindDescriptorMethod · 0.65
ImagePullMethod · 0.65
StringMethod · 0.65
StoreMethod · 0.65
CloseMethod · 0.45

Tested by

no test coverage detected