1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
package main
import (
"embed"
"os"
"path/filepath"
"time"
"go.wit.com/lib/debian"
"go.wit.com/lib/protobuf/argvpb"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/lib/protobuf/zoopb"
"go.wit.com/log"
)
//go:embed resources/*
var resources embed.FS
func main() {
me = new(mainType)
argvpb.Init(&argv, APPNAME, BUILDTIME, VERSION) // adds shell auto-complete
me.pb = new(zoopb.Package)
wd, err := os.Getwd()
if err != nil {
argvpb.BadExit("your current directory does not exist err=", err)
}
if argv.Arch == "" {
// looking forward to the day when this default is "riscv64"
argv.Arch = "amd64"
}
me.repo, err = gitpb.NewRepo(wd)
if err != nil {
argvpb.BadExit("is this really a .git directory? err=", err)
}
data, err := os.ReadFile("control")
log.Info("INITIAL PARSE:")
if err == nil {
debian.ParseDpkgOutputIntoPB(me.pb, string(data))
log.Info(string(data))
} else {
// make up a new control file
_, dirname := filepath.Split(me.repo.Namespace)
fake := "Package: " + dirname + "\n"
fake += "Maintainer: " + os.Getenv("GIT_AUTHOR_NAME") + "\n"
fake += "URL: " + me.repo.URL + "\n"
fake += "Homepage: " + me.repo.URL + "\n" // deprecate?
fake += "Namespace: " + me.repo.Namespace + "\n"
fake += "Build-Depends: golang\n"
fake += "Description: built with go.wit.com/apps/go-deb\n"
debian.ParseDpkgOutputIntoPB(me.pb, fake)
log.Info(fake)
}
if argv.Arch == "" {
me.pb.Architecture = "amd64"
} else {
me.pb.Architecture = argv.Arch
}
me.pb.Version = me.repo.DebianCurrentVersion(argv.BuildVersion)
me.pb.DebInfo.InstalledSize = "2222" // just to make the control file work
me.pb.DebInfo.URL = me.repo.URL
me.pb.DebInfo.Homepage = me.repo.URL // deprecate this usage (?)
log.Info("INITIAL PARSE RESULT:")
controlfile := debian.MakeControlFile(me.pb)
log.Info(controlfile)
log.Info("INITIAL PARSE END")
// argvpb.GoodExit("rewriting this app")
// build()
if argv.Show != nil {
log.Info("todo: show", me.repo.Namespace)
okExit("")
}
if argv.Namespace != "" {
me.repo.Namespace = argv.Namespace
}
log.Info("Namespace:", me.repo.GetNamespace(), "Fullpath:", me.repo.GetFullPath())
// figure out where we are working from
// os.Chdir to that directory
var debpath string
if me.repo == nil {
os.Setenv("GO_DEB_CUSTOM", "true")
debpath, _ = os.Getwd()
} else {
debpath = me.repo.GetFullPath()
}
_, basename := filepath.Split(debpath)
me.repo.Namespace = basename
os.Chdir(debpath)
/*
// look for a 'config' file in the repo
if readControlFile(me.repo) == nil {
log.Warn("scan worked")
} else {
log.Warn("scan failed")
}
// computeControlValues(me.repo)
*/
/*
if argvpb.Gui() {
// only load teh toolkit if you get this far
me.myGui.Start() // loads the GUI toolkit
doGui()
debug()
}
*/
log.Info("go-deb: attempting to build package")
if ok, err := buildPackage(me.repo); ok {
argvpb.GoodExit("build worked")
} else {
argvpb.BadExit("build failed", err)
}
os.Exit(0)
}
func debug() {
time.Sleep(2 * time.Second)
for {
log.Info("idle loop() todo: could check for things here")
time.Sleep(90 * time.Second)
}
}
|