(c *types.BuildConfig, project *types.Project, imageName string)
| 33 | ) |
| 34 | |
| 35 | func parseBuildConfig(c *types.BuildConfig, project *types.Project, imageName string) (*Build, error) { |
| 36 | if unknown := reflectutil.UnknownNonEmptyFields(c, |
| 37 | "Context", "Dockerfile", "Args", "CacheFrom", "Target", "Labels", "Secrets", "DockerfileInline", "AdditionalContexts", |
| 38 | ); len(unknown) > 0 { |
| 39 | log.L.Warnf("Ignoring: build: %+v", unknown) |
| 40 | } |
| 41 | |
| 42 | if c.Context == "" { |
| 43 | return nil, errors.New("build: context must be specified") |
| 44 | } |
| 45 | if strings.Contains(c.Context, "://") { |
| 46 | return nil, fmt.Errorf("build: URL-style context (%q) is not supported yet: %w", c.Context, errdefs.ErrNotImplemented) |
| 47 | } |
| 48 | ctxDir := project.RelativePath(c.Context) |
| 49 | |
| 50 | var b Build |
| 51 | b.BuildArgs = append(b.BuildArgs, "-t="+imageName) |
| 52 | if c.Dockerfile != "" { |
| 53 | if filepath.IsAbs(c.Dockerfile) { |
| 54 | log.L.Warnf("build.dockerfile should be relative path, got %q", c.Dockerfile) |
| 55 | b.BuildArgs = append(b.BuildArgs, "-f="+c.Dockerfile) |
| 56 | } else { |
| 57 | // no need to use securejoin |
| 58 | dockerfile := filepath.Join(ctxDir, c.Dockerfile) |
| 59 | b.BuildArgs = append(b.BuildArgs, "-f="+dockerfile) |
| 60 | } |
| 61 | } |
| 62 | |
| 63 | if c.DockerfileInline != "" { |
| 64 | b.DockerfileInline = c.DockerfileInline |
| 65 | } |
| 66 | |
| 67 | for k, v := range c.Args { |
| 68 | if v == nil { |
| 69 | b.BuildArgs = append(b.BuildArgs, "--build-arg="+k) |
| 70 | } else { |
| 71 | b.BuildArgs = append(b.BuildArgs, "--build-arg="+k+"="+*v) |
| 72 | } |
| 73 | } |
| 74 | |
| 75 | for _, s := range c.CacheFrom { |
| 76 | b.BuildArgs = append(b.BuildArgs, "--cache-from="+s) |
| 77 | } |
| 78 | |
| 79 | for k, v := range c.AdditionalContexts { |
| 80 | b.BuildArgs = append(b.BuildArgs, "--build-context="+k+"="+v) |
| 81 | } |
| 82 | |
| 83 | if c.Target != "" { |
| 84 | b.BuildArgs = append(b.BuildArgs, "--target="+c.Target) |
| 85 | } |
| 86 | |
| 87 | if c.Labels != nil { |
| 88 | for k, v := range c.Labels { |
| 89 | b.BuildArgs = append(b.BuildArgs, "--label="+k+"="+v) |
| 90 | } |
| 91 | } |
| 92 |
no test coverage detected
searching dependent graphs…