this process is annoying

This commit is contained in:
Jeff Carr 2025-01-30 01:15:00 -06:00
parent f690c1a8a3
commit ffb90cd28f
6 changed files with 146 additions and 100 deletions

View File

@ -12,23 +12,24 @@ import (
"go.wit.com/log" "go.wit.com/log"
) )
func doRelease() bool { func doRelease() error {
check := me.current
log.Info("doRelease() on", me.current.GetGoPath()) log.Info("doRelease() on", me.current.GetGoPath())
if !findOk { if !findOk {
log.Info("doRelease() immediately end something went wrong last time. findOk == false") log.Info("doRelease() immediately end something went wrong last time. findOk == false")
return false return fmt.Errorf("findOK = false %s", check.GetGoPath())
} }
// double check release version logic // double check release version logic
if me.release.releaseVersionB.String() != "release version "+me.release.version.String() { if me.release.releaseVersionB.String() != "release version "+me.release.version.String() {
log.Warn("something went wrong with the release.version:", me.release.version.String()) log.Warn("something went wrong with the release.version:", me.release.version.String())
return false return fmt.Errorf("GUI lied %s", check.GetGoPath())
} }
if strings.HasPrefix(me.release.version.String(), "v") { if strings.HasPrefix(me.release.version.String(), "v") {
log.Warn("everything is ok. version starts with v.", me.release.version.String()) log.Warn("everything is ok. version starts with v.", me.release.version.String())
} else { } else {
log.Warn("version does not start with v.", me.release.version.String()) log.Warn("version does not start with v.", me.release.version.String())
return false return fmt.Errorf("release does not start with a v %s", check.GetGoPath())
} }
if shell.Exists("go.mod") { if shell.Exists("go.mod") {
@ -36,22 +37,16 @@ func doRelease() bool {
} else { } else {
pwd, _ := os.Getwd() pwd, _ := os.Getwd()
log.Info("go.mod missing in working dir", pwd) log.Info("go.mod missing in working dir", pwd)
return false return fmt.Errorf("go.mod missing %s", check.GetGoPath())
} }
curName := me.current.GetCurrentBranchName() curName := me.current.GetCurrentBranchName()
mName := me.current.GetMasterBranchName() mName := me.current.GetMasterBranchName()
if curName != mName { if curName != mName {
log.Info("\trepo is not working from main branch", curName, "!=", mName) log.Info("\trepo is not working from main branch", curName, "!=", mName)
return false return fmt.Errorf("not on main branch %s", check.GetGoPath())
} }
// check := me.forge.FindByGoPath(me.current.GetGoPath())
check := me.current
if check == nil {
log.Info("boo, you didn't git clone", me.current.GetGoPath())
return false
}
if alreadyDone(check) { if alreadyDone(check) {
// means it was already published // means it was already published
// protects against logic errors that might result // protects against logic errors that might result
@ -60,14 +55,13 @@ func doRelease() bool {
log.Info("doRelease() WARNING. should have never gotten here. return true. already done", check.GetGoPath()) log.Info("doRelease() WARNING. should have never gotten here. return true. already done", check.GetGoPath())
log.Info("doRelease() WARNING. should have never gotten here. return true. already done", check.GetGoPath()) log.Info("doRelease() WARNING. should have never gotten here. return true. already done", check.GetGoPath())
check.Reload() check.Reload()
log.Sleep(1) return fmt.Errorf("already released %s", check.GetGoPath())
return true
} }
me.done = append(me.done, me.current.GetGoPath()) me.done = append(me.done, me.current.GetGoPath())
if err := me.forge.FinalGoDepsCheckOk(check, true); err != nil { if err := me.forge.FinalGoDepsCheckOk(check, true); err != nil {
msg := fmt.Sprint("the go.mod file is wrong. fix it here?", check.GetGoPath()) msg := fmt.Sprint("the go.mod file is wrong. fix it here?", check.GetGoPath())
badExit(errors.New(msg)) badExit(errors.New(msg))
return false return fmt.Errorf("FinalGoDeps %s err %v", check.GetGoPath(), err)
} }
if check.GetGoPath() == me.startRepo.GetGoPath() { if check.GetGoPath() == me.startRepo.GetGoPath() {
log.Info("CAN NOT SELF UPDATE.", check.GetGoPath(), "is the same as os.Getwd()") log.Info("CAN NOT SELF UPDATE.", check.GetGoPath(), "is the same as os.Getwd()")
@ -136,7 +130,7 @@ func doRelease() bool {
if !me.current.RunAll(all) { if !me.current.RunAll(all) {
log.Info("failed to make new release", me.release.version.String()) log.Info("failed to make new release", me.release.version.String())
findOk = false findOk = false
return false return fmt.Errorf("setting findOK = false %s", check.GetGoPath())
} }
log.Info("RELEASE OK") log.Info("RELEASE OK")
@ -147,7 +141,7 @@ func doRelease() bool {
if !doPublishVersion() { if !doPublishVersion() {
log.Info("PUBLISH FAILED") log.Info("PUBLISH FAILED")
findOk = false findOk = false
return false return fmt.Errorf("PUBLISH FAILED %s", check.GetGoPath())
} }
} }
@ -159,7 +153,7 @@ func doRelease() bool {
if !me.current.RevertMasterToDevel() { if !me.current.RevertMasterToDevel() {
log.Info("Revert Failed") log.Info("Revert Failed")
findOk = false findOk = false
return false return fmt.Errorf("REVERT FAILED %s", check.GetGoPath())
} }
// update tag // update tag
@ -179,7 +173,7 @@ func doRelease() bool {
if !me.current.RunAll(retag) { if !me.current.RunAll(retag) {
log.Info("retag failed") log.Info("retag failed")
findOk = false findOk = false
return false return fmt.Errorf("RETAG FAILED %s", check.GetGoPath())
} }
log.Info("EVERYTHING OK. RERELEASED", me.current.GetGoPath()) log.Info("EVERYTHING OK. RERELEASED", me.current.GetGoPath())
@ -191,15 +185,14 @@ func doRelease() bool {
badExit(errors.New(msg)) badExit(errors.New(msg))
} }
me.forge.SetConfigSave(true)
me.forge.ConfigSave()
log.Info("sleep 2")
time.Sleep(2 * time.Second)
printDone() printDone()
log.Info("sleep 2, then Reload()", check.GetGoPath())
time.Sleep(2 * time.Second) // notsure
check.Reload()
/*
// run this each time something gets published successfully // run this each time something gets published successfully
rePrepareRelease()
findNext()
// attempt to find another repo to release // attempt to find another repo to release
if !doReleaseFindNext() { if !doReleaseFindNext() {
@ -211,11 +204,21 @@ func doRelease() bool {
printDone() printDone()
return false return false
} }
log.Info("GOOD TO RUN ANOTHER DAY ON:", me.current.GetGoPath())
printDone() printDone()
return true */
rePrepareRelease()
findNext()
if me.current == nil {
log.Info("NOT GOOD TO RUN ANOTHER DAY")
log.Info("took out all the loop code")
setCurrentRepo(nil, "loop by hand motherfucker", "fucknuts")
return fmt.Errorf("findNext returned next repo == nil")
}
log.Info("GOOD TO RUN ANOTHER DAY ON:", me.current.GetGoPath())
return nil
} }
/*
// try to figure out if there is another package to update // try to figure out if there is another package to update
// returns true if it finds something // returns true if it finds something
func doReleaseFindNext() bool { func doReleaseFindNext() bool {
@ -246,6 +249,7 @@ func doReleaseFindNext() bool {
} }
return false return false
} }
*/
// this pulls the new tag from the golang package repository // this pulls the new tag from the golang package repository
// to insert the new version // to insert the new version

View File

@ -3,6 +3,7 @@ package main
import ( import (
"fmt" "fmt"
"slices"
"go.wit.com/log" "go.wit.com/log"
@ -85,22 +86,39 @@ func findNext() bool {
continue continue
} }
/*
if err := me.forge.CleanGoDepsCheckOk(check); err != nil { if err := me.forge.CleanGoDepsCheckOk(check); err != nil {
log.Info("CleanGoDepsCheckOk() failed", check.GetGoPath(), err) log.Info("CleanGoDepsCheckOk() failed", check.GetGoPath(), err)
log.Info("CleanGoDepsCheckOk() failed", check.GetGoPath(), err) log.Info("CleanGoDepsCheckOk() failed", check.GetGoPath(), err)
continue continue
} }
*/
/*
if err := checkDeps(check); err != nil { if err := checkDeps(check); err != nil {
log.Info("\t", check.GetGoPath(), err) log.Info("CHECK DEPS FAILED", check.GetGoPath(), err)
log.Info("CHECK DEPS FAILED", check.GetGoPath(), err)
log.Info("CHECK DEPS FAILED", check.GetGoPath(), err)
continue continue
} else { } else {
log.Info("Might be ok?", check.GetGoPath()) log.Info("Might be ok?", check.GetGoPath())
} }
*/
fixGodeps(check)
/*
} else {
log.Info("SKIPPING FIX", check.GetGoPath())
log.Info("SKIPPING FIX", check.GetGoPath())
log.Info("SKIPPING FIX", check.GetGoPath())
}
*/
if err := me.forge.FinalGoDepsCheckOk(check, argv.Verbose); err != nil { if err := me.forge.FinalGoDepsCheckOk(check, argv.Verbose); err != nil {
// if err := me.forge.FinalGoDepsCheckOk(check, false); err != nil {
log.Info("FinalGoDepsCheckOk() repo=", check.GetGoPath(), "err:", err) log.Info("FinalGoDepsCheckOk() repo=", check.GetGoPath(), "err:", err)
log.Info("FinalGoDepsCheckOk() repo=", check.GetGoPath(), "err:", err) log.Info("FinalGoDepsCheckOk() repo=", check.GetGoPath(), "err:", err)
log.Info("CHECKING END:", check.GetGoPath())
log.Info("")
continue continue
} }
log.Info("GOOD TO GO ON", check.GetGoPath()) log.Info("GOOD TO GO ON", check.GetGoPath())
@ -110,10 +128,10 @@ func findNext() bool {
if findCounter == 0 { if findCounter == 0 {
log.Info("NOTHING TO UPDATE. findCounter =", findCounter) log.Info("NOTHING TO UPDATE. findCounter =", findCounter)
} else { } else {
findFix = true
log.Info("me.current is nil findCounter =", findCounter, "so set findFix =", findFix) log.Info("me.current is nil findCounter =", findCounter, "so set findFix =", findFix)
} }
log.Info("tried to findNext() but not sure what to do next counter =", findCounter, "findFix =", findFix) log.Info("tried to findNext() but not sure what to do next counter =", findCounter, "findFix =", findFix)
setCurrentRepo(nil, "findNext found nothing", "crap")
me.release.status.SetText("ALL DONE?") me.release.status.SetText("ALL DONE?")
return false return false
} }
@ -127,16 +145,24 @@ func fixGodeps(check *gitpb.Repo) bool {
check.GoDeps = nil check.GoDeps = nil
if _, err := check.RunVerboseOnError([]string{"go-mod-clean", "--strict"}); err != nil { if result, err := check.RunStrictNew([]string{"go-mod-clean", "--strict"}); err != nil {
log.Info("fixGoDeps() runGoClean() strict failed", check.GetGoPath(), err) // log.Info("fixGoDeps() runGoClean() strict failed", check.GetGoPath(), err)
log.Info("fixGoDeps() runGoClean() strict failed", check.GetGoPath(), err) // log.Info("fixGoDeps() runGoClean() strict failed", check.GetGoPath(), len(result.Stdout), len(result.Stderr))
log.Info("fixGoDeps() runGoClean() strict failed", check.GetGoPath(), err) if len(result.Stderr) > 0 {
slices.Reverse(result.Stderr)
log.Info("fixGoDeps() runGoClean() strict failed", check.GetGoPath(), result.Stderr[0])
}
if len(result.Stdout) > 0 {
slices.Reverse(result.Stdout)
log.Info("fixGoDeps() runGoClean() strict failed", check.GetGoPath(), result.Stdout[0])
}
// log.Info("fixGoDeps() runGoClean() strict failed", check.GetGoPath())
return false return false
} }
if check.ParseGoSum() { if check.ParseGoSum() {
return true return true
} else { } else {
log.Info("ParseGoSum() failed", check.GetGoPath()) log.Info("ParseGoSum() failed but go-mod-clean --strict worked", check.GetGoPath())
return false return false
} }
// skip primative ones // skip primative ones
@ -178,12 +204,19 @@ func fixGodeps(check *gitpb.Repo) bool {
} }
func setCurrentRepo(check *gitpb.Repo, s string, note string) bool { func setCurrentRepo(check *gitpb.Repo, s string, note string) bool {
if check == nil {
me.release.repo.SetText("")
me.release.version.SetText("")
me.release.releaseVersionB.SetText("nope")
} else {
me.release.repo.SetText(check.GetGoPath()) me.release.repo.SetText(check.GetGoPath())
me.release.version.SetText(check.GetTargetVersion())
me.release.releaseVersionB.SetText("release version " + check.GetTargetVersion())
}
me.release.status.SetText(s) me.release.status.SetText(s)
me.release.notes.SetText(note) me.release.notes.SetText(note)
me.current = check me.current = check
me.release.version.SetText(check.GetTargetVersion()) me.release.version.SetText(check.GetTargetVersion())
me.release.releaseVersionB.SetText("release version " + check.GetTargetVersion())
me.release.openrepo.Enable() me.release.openrepo.Enable()
return true return true

View File

@ -46,7 +46,7 @@ func okHandler(w http.ResponseWriter, r *http.Request) {
log.Info("") log.Info("")
case "/doRelease": case "/doRelease":
buttonDisable() buttonDisable()
if doRelease() { if err := doRelease(); err == nil {
buttonEnable() buttonEnable()
log.Info("doRelease() worked") log.Info("doRelease() worked")
} else { } else {

View File

@ -74,9 +74,6 @@ func main() {
} }
me.mainBox = me.mainWindow.NewBox("bw hbox", true) me.mainBox = me.mainWindow.NewBox("bw hbox", true)
// start the http server for polling status
go startHTTP()
// sanity check of things that might be around that mess // sanity check of things that might be around that mess
// up things later // up things later
// if you have a go.work file, you must delete it // if you have a go.work file, you must delete it
@ -131,10 +128,15 @@ func main() {
me.Enable() me.Enable()
me.release.box.Enable() me.release.box.Enable()
/*
// intermittently scans the status indefinitly // intermittently scans the status indefinitly
me.repos.View.Watchdog(func() { me.repos.View.Watchdog(func() {
log.Info("In main()") log.Info("In main()")
log.Sleep(10)
// processing is done. update the repo summary box // processing is done. update the repo summary box
// me.summary.Update() // me.summary.Update()
}) })
*/
// start the http server for polling status
startHTTP()
} }

View File

@ -19,7 +19,6 @@ func forceReleaseVersion(repo *gitpb.Repo) {
// if v1.2.3 change to v.1.2.4 // if v1.2.3 change to v.1.2.4
repo.IncrementTargetRevision() repo.IncrementTargetRevision()
} }
me.forge.SetConfigSave(true)
} }
func checkpkgcache(repo *gitpb.Repo) error { func checkpkgcache(repo *gitpb.Repo) error {
@ -37,10 +36,13 @@ func checkpkgcache(repo *gitpb.Repo) error {
} }
getpath := repo.GetGoPath() + "@" + repo.GetLastTag() getpath := repo.GetGoPath() + "@" + repo.GetLastTag()
log.Info("MISSING:", getpath)
_, err = me.startRepo.RunVerboseOnError([]string{"go", "get", getpath}) _, err = me.startRepo.RunVerboseOnError([]string{"go", "get", getpath})
return err return err
} }
var rillcount int
func rillRestore(repo *gitpb.Repo) error { func rillRestore(repo *gitpb.Repo) error {
if me.forge.Config.IsReadOnly(repo.GetGoPath()) { if me.forge.Config.IsReadOnly(repo.GetGoPath()) {
return nil return nil
@ -48,10 +50,9 @@ func rillRestore(repo *gitpb.Repo) error {
if me.forge.Config.IsPrivate(repo.GetGoPath()) { if me.forge.Config.IsPrivate(repo.GetGoPath()) {
return nil return nil
} }
if err := checkpkgcache(repo); err != nil {
return err
}
_, err := repo.RunStrictNew([]string{"go-mod-clean", "--restore"}) _, err := repo.RunStrictNew([]string{"go-mod-clean", "--restore"})
rillcount += 1
if err != nil { if err != nil {
log.Info("go-mod-clean --restore failed", repo.GetGoPath(), err) log.Info("go-mod-clean --restore failed", repo.GetGoPath(), err)
return err return err
@ -64,9 +65,26 @@ func rePrepareRelease() {
// me.forge = forgepb.Init() // me.forge = forgepb.Init()
me.found = new(gitpb.Repos) me.found = new(gitpb.Repos)
log.Printf("rePrepareRelease() START rill go-mod-clean --restore (11 seconds?)")
rillcount = 0
now := time.Now() now := time.Now()
me.forge.RillFuncError(rillRestore) me.forge.RillFuncError(rillRestore)
log.Printf("showRestore() (%d total repos) took:%s\n", me.forge.Repos.Len(), shell.FormatDuration(time.Since(now))) log.Printf("showRestore() (%d total repos) took:%s\n", rillcount, shell.FormatDuration(time.Since(now)))
log.Sleep(1)
all2 := me.forge.Repos.SortByFullPath()
for all2.Scan() {
check := all2.Next()
if me.forge.Config.IsReadOnly(check.GetGoPath()) {
continue
}
if me.forge.Config.IsPrivate(check.GetGoPath()) {
continue
}
// this should be rare? nonexistant?
if err := checkpkgcache(check); err != nil {
log.Info("go get checks failed here.", err, check.GetGoPath())
}
}
all := me.forge.Repos.SortByFullPath() all := me.forge.Repos.SortByFullPath()
for all.Scan() { for all.Scan() {
@ -112,6 +130,11 @@ func rePrepareRelease() {
continue continue
} }
if me.forge.Config.IsPrivate(check.GetGoPath()) {
// only checks after this are GO dep related which don't matter for private repos
continue
}
if argv.Quick != nil { if argv.Quick != nil {
// if argv has 'quick' don't do anything // if argv has 'quick' don't do anything
// that doesn't actually have a patch // that doesn't actually have a patch

View File

@ -3,7 +3,6 @@ package main
import ( import (
"fmt" "fmt"
"os"
"time" "time"
"go.wit.com/gui" "go.wit.com/gui"
@ -51,14 +50,14 @@ func createReleaseBox(box *gui.Node) {
me.release.releaseVersionB = me.release.grid.NewButton("release version", func() { me.release.releaseVersionB = me.release.grid.NewButton("release version", func() {
buttonDisable() buttonDisable()
if doRelease() { if err := doRelease(); err == nil {
buttonEnable() buttonEnable()
log.Info("doRelease() worked") log.Info("doRelease() worked")
} else { } else {
log.Info("doRelease() failed") log.Info("doRelease() failed", err, me.current.GetGoPath())
} }
}) })
me.release.grid.NewButton("Find Next Releasable", func() { me.release.grid.NewButton("Find Next", func() {
me.Disable() me.Disable()
defer me.Enable() defer me.Enable()
if findNext() { if findNext() {
@ -66,6 +65,15 @@ func createReleaseBox(box *gui.Node) {
return return
} }
}) })
me.release.grid.NewButton("Show Next", func() {
check := me.current
if check == nil {
log.Info("boo, current is missing", me.current.GetGoPath())
return
}
testGoRepo(check)
me.forge.HumanPrintRepo(check)
})
me.release.grid.NextRow() me.release.grid.NextRow()
me.release.repo = gadgets.NewOneLiner(me.release.grid, "repo") me.release.repo = gadgets.NewOneLiner(me.release.grid, "repo")
@ -181,21 +189,6 @@ func createReleaseBox(box *gui.Node) {
buttonEnable() buttonEnable()
}) })
grid.NextRow() grid.NextRow()
group = me.release.box.NewGroup("experimental and potentially dangerous stuff")
grid = group.NewGrid("buildOptions", 0, 0)
me.setBranchesToMasterB = grid.NewButton("set all branches to master", func() {
me.Disable()
defer me.Enable()
/*
if setAllBranchesToMaster() {
// if it succeeds, disable this button
me.setBranchesToMasterB.Disable()
}
*/
})
grid.NextRow()
} }
func doReleaseAll() (bool, time.Duration) { func doReleaseAll() (bool, time.Duration) {
@ -210,19 +203,10 @@ func doReleaseAll() (bool, time.Duration) {
worked = false worked = false
break break
} }
if doRelease() { if err := doRelease(); err == nil {
log.Info("doRelease() worked. findCounter =", findCounter) log.Info("doRelease() worked. findCounter =", findCounter)
} else { } else {
if os.Getenv("FindNextDone") == "true" { log.Info("doRelease() failed. findCounter =", findCounter, err)
log.Info("findNext says it was done. findCounter =", findCounter)
log.Info("findNext says it was done. findCounter =", findCounter)
log.Info("we can exit here")
}
if me.release.status.String() == "ALL DONE?" {
log.Info("maybe ALL DONE?. findCounter =", findCounter)
worked = true
}
log.Info("doRelease() failed. findCounter =", findCounter)
worked = false worked = false
break break
} }