packaging/linux/rpm/buildroot.go (40 lines of code) (raw):
package rpm
import (
"bytes"
"fmt"
"path/filepath"
"runtime/debug"
"github.com/Azure/dalec"
"github.com/moby/buildkit/client/llb"
)
func ToSpecLLB(spec *dalec.Spec, in llb.State, targetKey, dir string, opts ...llb.ConstraintsOpt) (llb.State, error) {
if err := ValidateSpec(spec); err != nil {
return llb.Scratch(), fmt.Errorf("invalid spec: %w", err)
}
opts = append(opts, dalec.ProgressGroup("Generate RPM spec"))
buf := bytes.NewBuffer(nil)
info, _ := debug.ReadBuildInfo()
buf.WriteString("# Automatically generated by " + info.Main.Path + "\n")
buf.WriteString("\n")
if err := WriteSpec(spec, targetKey, buf); err != nil {
return llb.Scratch(), err
}
if dir == "" {
dir = "SPECS/" + spec.Name
}
return in.
File(llb.Mkdir(dir, 0755, llb.WithParents(true)), opts...).
File(llb.Mkfile(filepath.Join(dir, spec.Name)+".spec", 0640, buf.Bytes()), opts...),
nil
}
func SpecToBuildrootLLB(worker llb.State, spec *dalec.Spec, sOpt dalec.SourceOpts, targetKey string, opts ...llb.ConstraintsOpt) (llb.State, error) {
if err := ValidateSpec(spec); err != nil {
return llb.Scratch(), fmt.Errorf("invalid spec: %w", err)
}
opts = append(opts, dalec.ProgressGroup("Create RPM buildroot"))
sources, err := ToSourcesLLB(worker, spec, sOpt, opts...)
if err != nil {
return llb.Scratch(), err
}
return ToSpecLLB(spec, dalec.MergeAtPath(llb.Scratch(), sources, "SOURCES"), targetKey, "", opts...)
}