guireleaser/main.go

155 lines
4.3 KiB
Go

package main
import (
"embed"
"os"
"path/filepath"
"strings"
"go.wit.com/gui"
"go.wit.com/lib/gui/shell"
"go.wit.com/log"
)
// TODO: autocompute these in the gui
var releaseReasonS string
var releaseVersion string
var widgetVersion string
//go:embed resources/*
var resToolkit embed.FS
func main() {
me = new(autoType)
// TODO: autocompute these in the gui
releaseReasonS = os.Getenv("GUIRELEASE_REASON")
releaseVersion = os.Getenv("GUIRELEASE_VERSION")
widgetVersion = os.Getenv("GUIRELEASE_WIDGET")
if releaseVersion == "" {
log.Info("GUIRELEASE_VERSION not set")
os.Exit(0)
}
me.myGui = gui.New()
me.myGui.InitEmbed(resToolkit)
me.myGui.Default()
// our main window
me.mainWindow = me.myGui.NewWindow("GUI release manager")
me.mainBox = me.mainWindow.NewBox("bw hbox", true)
// the left side of the window options
globalDisplayOptions(me.mainBox)
// sanity check of things that might be around that mess
// up things later
// if you have a go.work file, you must delete it
// TODO: check for go.work files anywhere
homeDir, _ := os.UserHomeDir()
gowork := filepath.Join(homeDir, "go/src/go.work")
if shell.Exists(gowork) {
log.Info("go.work must be deleted")
os.Exit(0)
}
// sanity check of things that might be around that mess
// up things later
// check to make sure we have a go.sum here
gosum := filepath.Join(homeDir, "go/src/go.wit.com/apps/guireleaser/go.sum")
if !shell.Exists(gosum) {
log.Info("go.sum must exist here")
os.Exit(0)
}
// save the ENV var here
me.releaseReasonS = releaseReasonS
me.repos = makeRepoView()
// go through and set the target versions for each repo
// todo: add sanity checking in repolist to verify these and/or autocompute them
// for now, just don't be stupid when you set your ENV vars
// widget I versioned early before I knew what the hell this would mean and can
// not be down versioned because that's not how GO versioning works. Once you
// set the version for a path, it's set in stone forever. (smart system!)
// we could rename go.wit.com/widget to go.wit.com/newwidget and restart the versioning
// system, but that's rediculous and this servers to always remind me to never make this mistake again
for i, repo := range me.repos.View.AllRepos() {
if repo == nil {
log.Info("initial scan i = nil", i)
continue
}
log.Info("initial scan repo", repo.Name())
if repo.Status == nil {
log.Info("repo.status == nil", repo.Name())
continue
}
if repo.GoPath() == "go.wit.com/widget" {
repo.Status.SetTargetVersion("v" + widgetVersion)
} else {
repo.Status.SetTargetVersion("v" + releaseVersion)
}
if strings.HasPrefix(repo.GoPath(), "go.wit.com/dev/") {
lasttag := repo.Status.GetLastTagVersion()
repo.Status.SetTargetVersion(lasttag)
}
}
log.Info("Creating the Release Window")
// create the right side of the main window
createReleaseBox(me.mainBox)
// start the initail scan and make sure each repo is set
// to the master branch
for _, repo := range me.repos.View.AllRepos() {
if repo.ReadOnly() {
continue
}
if whitelist(repo.GoPath()) {
continue
}
if repo.Status.CheckoutMaster() {
log.Warn("git checkout master branch worked", repo.Name())
repo.Status.UpdateNew()
} else {
repo.Status.UpdateNew()
log.Warn("git checkout master branch failed", repo.Name())
}
}
// disable the open repo button. this isn't really important
// but does indicates the app (and toolkit) is working
// this can be removed later, but in these early days, I'm using this
// tool to release the code for this app, the gui and the gui toolkits
// and sometimes they lie, don't display stuff, don't even disable things
// so I can't trust even what I see. It's complicated right now still.
release.openrepo.Disable()
// I don't know what this is autotypist thing?
// globalResetOptions(me.mainbox)
// hopefully this is the list of all the golang packages and only the GUI golang packages
me.repos = makeRepoView()
// parse config file and scan for .git repos
me.repos.initRepoList()
// reads in the State of all the repos
// TODO: should not really be necessary directly after init()
me.repos.View.ScanRepositories()
me.Enable()
// intermittently scans the status indefinitly
me.repos.View.Watchdog(func() {
log.Info("In main()")
// processing is done. update the repo summary box
// me.summary.Update()
})
}