in packages/deb/build.go [129:219]
func (c cfg) run() error {
log.Printf("!!!!!!!!! doing: %#v", c)
var w []work
srcdir := filepath.Join(c.DistroName, c.Package)
dstdir, err := os.MkdirTemp("", "debs")
if err != nil {
return err
}
if !*keepTmp {
defer os.RemoveAll(dstdir)
}
// allow base package dir to by a symlink so we can reuse packages
// that don't change between distros
realSrcdir, err := filepath.EvalSymlinks(srcdir)
if err != nil {
return err
}
if err := filepath.Walk(realSrcdir, func(srcfile string, f os.FileInfo, err error) error {
if err != nil {
return err
}
dstfile := filepath.Join(dstdir, srcfile[len(realSrcdir):])
if dstfile == dstdir {
return nil
}
if f.IsDir() {
log.Printf(dstfile)
return os.Mkdir(dstfile, f.Mode())
}
t, err := template.
New("").
Funcs(builtins).
Option("missingkey=error").
ParseFiles(srcfile)
if err != nil {
return err
}
w = append(w, work{
src: srcfile,
dst: dstfile,
t: t.Templates()[0],
info: f,
})
return nil
}); err != nil {
return err
}
for _, w := range w {
log.Printf("w: %#v", w)
if err := func() error {
f, err := os.OpenFile(w.dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0)
if err != nil {
return err
}
defer f.Close()
if err := w.t.Execute(f, c); err != nil {
return err
}
if err := os.Chmod(w.dst, w.info.Mode()); err != nil {
return err
}
return nil
}(); err != nil {
return err
}
}
err = runCommand(dstdir, "dpkg-buildpackage", "-us", "-uc", "-b", "-a"+c.DebArch)
if err != nil {
return err
}
dstParts := []string{"bin", string(c.Channel), c.DistroName}
dstPath := filepath.Join(dstParts...)
os.MkdirAll(dstPath, 0777)
fileName := fmt.Sprintf("%s_%s-%s_%s.deb", c.Package, c.Version, c.Revision, c.DebArch)
err = runCommand("", "mv", filepath.Join("/tmp", fileName), dstPath)
if err != nil {
return err
}
return nil
}