diff --git a/pkg/builder/buildx.go b/pkg/builder/buildx.go index 458ed23..6e39572 100644 --- a/pkg/builder/buildx.go +++ b/pkg/builder/buildx.go @@ -45,11 +45,15 @@ func (b *BuildxBuilder) SetDryRun(dryRun bool) { func (b *BuildxBuilder) Build(dockerfile, imageName string, configSet map[string]interface{}, contextDir string, verbose bool) { platforms := configSet["platforms"].([]string) labels := configSet["labels"].(map[string]string) + buildArgs := configSet["args"].(map[string]interface{}) builder := cmd.New("docker").Arg("buildx").Arg("build") if len(platforms) > 0 { builder.Arg(platformsToArgs(platforms)...) } - builder.Arg("-f", dockerfile).Arg("-t", imageName).Arg(labelsToArgs(labels)...).Arg(contextDir).SetVerbose(verbose) + builder.Arg("-f", dockerfile).Arg("-t", imageName). + Arg(labelsToArgs(labels)...). + Arg(argsToArgs(buildArgs)...). + Arg(contextDir).SetVerbose(verbose) b.buildTasks.AddTask(builder) } diff --git a/pkg/builder/docker.go b/pkg/builder/docker.go index 20f2733..9d61e23 100644 --- a/pkg/builder/docker.go +++ b/pkg/builder/docker.go @@ -68,6 +68,7 @@ func (b *DockerBuilder) Build(dockerfile, imageName string, configSet map[string Arg("-f", dockerfile). Arg("-t", imageName). Arg(labelsToArgs(configSet["labels"].(map[string]string))...). + Arg(argsToArgs(configSet["args"].(map[string]interface{}))...). Arg(contextDir). PreInfo("Building " + imageName). SetVerbose(verbose) diff --git a/pkg/builder/utils.go b/pkg/builder/utils.go index 4474849..60230a0 100644 --- a/pkg/builder/utils.go +++ b/pkg/builder/utils.go @@ -2,6 +2,7 @@ package builder import ( "encoding/json" + "fmt" "regexp" "strings" @@ -57,6 +58,14 @@ func labelsToArgs(labels map[string]string) []string { return args } +func argsToArgs(buildArgs map[string]interface{}) []string { + args := []string{} + for k, v := range buildArgs { + args = append(args, "--arg", fmt.Sprintf("%s=%s", k, v)) + } + return args +} + func platformsToArgs(platforms []string) []string { args := []string{} args = append(args, "--platform", strings.Join(platforms, ",")) diff --git a/pkg/config/config.go b/pkg/config/config.go index 603a63d..28b583d 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -28,6 +28,7 @@ type ImageConfig struct { Excludes []map[string]interface{} `yaml:"excludes"` Tags []string `yaml:"tags"` Labels map[string]string `yaml:"labels"` + Args map[string]string `yaml:"args"` Platforms []string `yaml:"platforms"` } diff --git a/pkg/parser/parser.go b/pkg/parser/parser.go index a89236f..1f486df 100644 --- a/pkg/parser/parser.go +++ b/pkg/parser/parser.go @@ -72,6 +72,9 @@ func Run(workdir string, cfg *config.Config, flags config.Flags) error { labels := collectOCILabels(configSet) maps.Copy(labels, collectLabels(configSet)) + // Collect build args + // buildArgs := collectBuildArgs(configSet) + var dockerfile string if strings.HasSuffix(dockerfileTemplate, ".tpl") { dockerfile = generateDockerfilePath(dockerfileTemplate, name, configSet) @@ -189,6 +192,7 @@ func generateConfigSet(imageName string, cfg *config.Config, currentConfigSet ma func collectLabels(configSet map[string]interface{}) map[string]string { labels, err := templateLabels(configSet["labels"].(map[string]string), configSet) + // FIXME: return this error further util.FailOnError(err) if len(labels) > 0 { log.Info().Interface("labels", labels).Msg("Generating") @@ -198,6 +202,7 @@ func collectLabels(configSet map[string]interface{}) map[string]string { func collectTags(img config.ImageConfig, configSet map[string]interface{}, name string) []string { tags, err := templateTags(img.Tags, configSet) + // FIXME: return this error further util.FailOnError(err) if len(tags) > 0 { log.Info().Interface("tags", tags).Msg("Generating")