src.dualinventive.com/go/common/deb/main.go

76 lines
1.6 KiB
Go

package main
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"runtime"
"strings"
"text/template"
"github.com/xor-gate/debpkg"
"src.dualinventive.com/go/common/version/version"
)
func miscDir() string {
_, file, _, _ := runtime.Caller(0)
return filepath.Dir(filepath.Dir(file)) + "/misc"
}
func processTemplate(t *template.Template, name string, vars interface{}) (string, error) {
f, err := ioutil.TempFile("", name)
if err != nil {
return "", err
}
defer f.Close()
if err := t.ExecuteTemplate(f, name, vars); err != nil {
return "", err
}
return f.Name(), nil
}
func main() {
t, err := template.New("tex").Delims("@", "@").Option("missingkey=error").ParseGlob(miscDir() + "/*.in")
if err != nil {
panic(err)
}
deb := debpkg.New()
if err := deb.Config("package.yml"); err != nil {
panic(fmt.Errorf("Error while loading config file: %v", err))
}
deb.SetName(os.Getenv("PROJECT_NAME"))
deb.SetVersion(version.GetVersion())
vars := map[string]interface{}{
"PROJECT_APP_NAME": os.Getenv("PROJECT_NAME"),
"CPACK_PROJECT_APP_NAME": strings.TrimLeft(os.Getenv("PROJECT_NAME"), "di-"),
"CPACK_DEBIAN_INSTALL_POSTINST_EXTRA": "",
}
file, err := processTemplate(t, "prerm.in", vars)
if err != nil {
panic(err)
}
deb.AddControlExtra("prerm", file)
file, err = processTemplate(t, "postinst.in", vars)
if err != nil {
panic(err)
}
deb.AddControlExtra("postinst", file)
file, err = processTemplate(t, "postrm.in", vars)
if err != nil {
panic(err)
}
deb.AddControlExtra("postrm", file)
if err := deb.Write(""); err != nil {
fmt.Println("debpkg: error:", err)
return
}
}