diff --git a/src/cmd/linuxkit/pkg_build.go b/src/cmd/linuxkit/pkg_build.go index 5eacf349d9..c782591308 100644 --- a/src/cmd/linuxkit/pkg_build.go +++ b/src/cmd/linuxkit/pkg_build.go @@ -129,7 +129,7 @@ func pkgBuildCmd() *cobra.Command { for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) // check if the value is a special linuxkit value - buildArg, err := pkglib.TransformBuildArgValue(line, filename) + buildArg, err := pkglib.TransformBuildArgValue("", line, filename) if err != nil { return fmt.Errorf("error transforming build arg %s: %v", line, err) } diff --git a/src/cmd/linuxkit/pkglib/buildarg.go b/src/cmd/linuxkit/pkglib/buildarg.go index e0c84026f9..757374093e 100644 --- a/src/cmd/linuxkit/pkglib/buildarg.go +++ b/src/cmd/linuxkit/pkglib/buildarg.go @@ -15,7 +15,7 @@ const ( ) // TransformBuildArgValue transforms a build arg pair whose value starts with the special linuxkit prefix. -func TransformBuildArgValue(line, anchorFile string) ([]string, error) { +func TransformBuildArgValue(ownPkgName string, line, anchorFile string) ([]string, error) { parts := strings.SplitN(line, "=", 2) if len(parts) != 2 { return nil, fmt.Errorf("invalid build-arg, must be in format 'arg=value': %s", line) @@ -80,6 +80,9 @@ func TransformBuildArgValue(line, anchorFile string) ([]string, error) { if !info.IsDir() { continue } + if match == ownPkgName { + continue + } if strings.HasPrefix(info.Name(), ".") { continue } diff --git a/src/cmd/linuxkit/pkglib/pkglib.go b/src/cmd/linuxkit/pkglib/pkglib.go index 325b32ca50..6219f2ecf5 100644 --- a/src/cmd/linuxkit/pkglib/pkglib.go +++ b/src/cmd/linuxkit/pkglib/pkglib.go @@ -271,17 +271,7 @@ func NewFromConfig(cfg PkglibConfig, args ...string) ([]Pkg, error) { tagTmpl = "{{.Hash}}" } - // calculate the tag to use based on the template and the pkgHash - tmpl, err := template.New("tag").Parse(tagTmpl) - if err != nil { - return nil, fmt.Errorf("invalid tag template: %v", err) - } - var buf bytes.Buffer - if err := tmpl.Execute(&buf, map[string]string{"Hash": pkgHash}); err != nil { - return nil, fmt.Errorf("failed to execute tag template: %v", err) - } - tag := buf.String() - pkgs = append(pkgs, Pkg{ + pkg := Pkg{ image: pi.Image, org: pi.Org, hash: pkgHash, @@ -299,8 +289,32 @@ func NewFromConfig(cfg PkglibConfig, args ...string) ([]Pkg, error) { buildYML: buildYmlFile, dockerfile: pi.Dockerfile, git: git, - tag: tag, - }) + } + err = pkg.ProcessBuildArgs() + if err != nil { + return pkgs, fmt.Errorf("processing build-args failed: %w", err) + } + if pkg.buildArgs != nil { + for _, buildArg := range *pkg.buildArgs { + fmt.Printf("add buildArg '%s' to hash\n", buildArg) + + buildArgKey := fmt.Sprintf("buildArg=%s", buildArg) + pkgHash += fmt.Sprintf("%x", sha1.Sum([]byte(buildArgKey))) + pkgHash = fmt.Sprintf("%x", sha1.Sum([]byte(pkgHash))) + } + } + // calculate the tag to use based on the template and the pkgHash + tmpl, err := template.New("tag").Parse(tagTmpl) + if err != nil { + return nil, fmt.Errorf("invalid tag template: %v", err) + } + var buf bytes.Buffer + if err := tmpl.Execute(&buf, map[string]string{"Hash": pkgHash}); err != nil { + return nil, fmt.Errorf("failed to execute tag template: %v", err) + } + tag := buf.String() + pkg.tag = tag + pkgs = append(pkgs, pkg) } return pkgs, nil } @@ -374,7 +388,7 @@ func (p *Pkg) ProcessBuildArgs() error { } var buildArgs []string for _, arg := range *p.buildArgs { - transformedLine, err := TransformBuildArgValue(arg, p.buildYML) + transformedLine, err := TransformBuildArgValue(p.path, arg, p.buildYML) if err != nil { return fmt.Errorf("error processing build arg %q: %v", arg, err) }