summaryrefslogtreecommitdiff
path: root/main.go
blob: 1c4c7d083b5b0150c5ce347606ab1b4cfbd07ed0 (plain)
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
131
132
133
134
135
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"
)

// sent from -ldflags
var VERSION string
var BUILDTIME string

//go:embed resources/*
var resources embed.FS

var ARGNAME string = "go-deb"
var argv args

func main() {
	me = new(mainType)
	me.sh = argvpb.Autocomplete(&argv) // adds shell auto complete to go-args
	me.pb = new(zoopb.Package)

	wd, err := os.Getwd()
	if err != nil {
		me.sh.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 {
		me.sh.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")
	// me.sh.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 argv.Gui != nil {
		// 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 {
		me.sh.GoodExit("build worked")
	} else {
		me.sh.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)
	}
}