2024-12-02 07:00:28 -06:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2025-01-29 20:00:26 -06:00
|
|
|
"errors"
|
2025-01-05 17:35:21 -06:00
|
|
|
"os"
|
2025-01-29 20:00:26 -06:00
|
|
|
"path/filepath"
|
2025-01-19 10:48:16 -06:00
|
|
|
"time"
|
2025-01-05 17:35:21 -06:00
|
|
|
|
2025-01-19 10:48:16 -06:00
|
|
|
"go.wit.com/lib/gui/shell"
|
2024-12-16 00:19:03 -06:00
|
|
|
"go.wit.com/lib/protobuf/gitpb"
|
2024-12-02 07:00:28 -06:00
|
|
|
"go.wit.com/log"
|
|
|
|
)
|
|
|
|
|
2024-12-17 23:59:08 -06:00
|
|
|
func forceReleaseVersion(repo *gitpb.Repo) {
|
|
|
|
if argv.Minor {
|
|
|
|
// if v1.2.3 change to v.1.3.0
|
|
|
|
repo.IncrementTargetMinor()
|
|
|
|
} else {
|
|
|
|
// if v1.2.3 change to v.1.2.4
|
2025-01-29 20:00:26 -06:00
|
|
|
repo.IncrementTargetRevision()
|
2024-12-17 23:59:08 -06:00
|
|
|
}
|
2025-01-29 20:00:26 -06:00
|
|
|
me.forge.SetConfigSave(true)
|
|
|
|
}
|
|
|
|
|
|
|
|
func checkpkgcache(repo *gitpb.Repo) error {
|
|
|
|
homedir, err := os.UserHomeDir()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
rver := repo.GetLastTag()
|
|
|
|
if rver == "" {
|
|
|
|
return errors.New("could not get master version")
|
|
|
|
}
|
|
|
|
moddir := filepath.Join(homedir, "go/pkg/mod", repo.GetGoPath()+"@"+rver)
|
|
|
|
if shell.IsDir(moddir) {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
getpath := repo.GetGoPath() + "@" + repo.GetLastTag()
|
|
|
|
_, err = me.startRepo.RunVerboseOnError([]string{"go", "get", getpath})
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
func rillRestore(repo *gitpb.Repo) error {
|
|
|
|
if me.forge.Config.IsReadOnly(repo.GetGoPath()) {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
if me.forge.Config.IsPrivate(repo.GetGoPath()) {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
if err := checkpkgcache(repo); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
_, err := repo.RunStrictNew([]string{"go-mod-clean", "--restore"})
|
|
|
|
if err != nil {
|
|
|
|
log.Info("go-mod-clean --restore failed", repo.GetGoPath(), err)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return nil
|
2025-01-19 10:48:16 -06:00
|
|
|
}
|
2024-12-17 23:59:08 -06:00
|
|
|
|
|
|
|
func rePrepareRelease() {
|
|
|
|
// reload the config
|
2025-01-29 21:24:08 -06:00
|
|
|
// me.forge = forgepb.Init()
|
2024-12-17 23:59:08 -06:00
|
|
|
me.found = new(gitpb.Repos)
|
|
|
|
|
2025-01-20 08:14:18 -06:00
|
|
|
now := time.Now()
|
|
|
|
me.forge.RillFuncError(rillRestore)
|
|
|
|
log.Printf("showRestore() (%d total repos) took:%s\n", me.forge.Repos.Len(), shell.FormatDuration(time.Since(now)))
|
2024-12-18 20:24:28 -06:00
|
|
|
|
2025-01-19 10:48:16 -06:00
|
|
|
all := me.forge.Repos.SortByFullPath()
|
2024-12-12 02:05:47 -06:00
|
|
|
for all.Scan() {
|
|
|
|
check := all.Next()
|
2024-12-02 08:45:13 -06:00
|
|
|
|
2025-01-29 20:00:26 -06:00
|
|
|
if alreadyDone(check) {
|
|
|
|
// means it was already published
|
|
|
|
// protects against logic errors that might result
|
|
|
|
// in an infinite loop
|
2025-01-29 21:24:08 -06:00
|
|
|
log.Info("WARNING alreadyDone rePrepareRelease()", check.GetGoPath())
|
2025-01-29 20:00:26 -06:00
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
2024-12-17 07:03:17 -06:00
|
|
|
if me.forge.Config.IsReadOnly(check.GetGoPath()) {
|
2024-12-13 02:21:39 -06:00
|
|
|
// can't release readonly repos
|
|
|
|
continue
|
|
|
|
}
|
2024-12-12 02:05:47 -06:00
|
|
|
// if master != lastTag, always increment
|
|
|
|
master := check.GetMasterVersion()
|
|
|
|
lastTag := check.GetLastTag()
|
|
|
|
if master != lastTag {
|
2025-01-29 20:00:26 -06:00
|
|
|
newmhash := check.GetTagHash(master)
|
|
|
|
oldlhash := check.GetTagHash(lastTag)
|
|
|
|
if newmhash == oldlhash {
|
|
|
|
// they are actually equal
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
b1 := check.CountDiffObjects(oldlhash, newmhash)
|
|
|
|
b2 := check.CountDiffObjects(newmhash, oldlhash)
|
|
|
|
if b1 != 0 {
|
|
|
|
log.Printf("HASH ERROR %-50s tag %s < %s\n", check.GetGoPath(), newmhash, oldlhash)
|
|
|
|
log.Info("old vs new count", b1, b2, "git merge", oldlhash)
|
|
|
|
}
|
|
|
|
|
|
|
|
// if b1 == 0 && b2 == 0 {
|
|
|
|
if gitpb.IsGoTagVersionGreater(lastTag, master) {
|
|
|
|
// this function is not right really. the hash error above should catch it correctly
|
|
|
|
// log.Printf("PROBABLY NOT NEE %-50s tag %s < %s\n", check.GetGoPath(), lastTag, master)
|
|
|
|
}
|
|
|
|
log.Printf("NEED RELEASE FOR %-50s tag %s != %s\n", check.GetGoPath(), master, lastTag)
|
2024-12-16 00:19:03 -06:00
|
|
|
forceReleaseVersion(check)
|
2025-01-13 08:11:43 -06:00
|
|
|
me.found.AppendByGoPath(check)
|
2024-12-16 00:19:03 -06:00
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
2025-01-17 06:20:55 -06:00
|
|
|
if argv.Quick != nil {
|
|
|
|
// if argv has 'quick' don't do anything
|
|
|
|
// that doesn't actually have a patch
|
|
|
|
if master == lastTag {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-12-17 07:03:17 -06:00
|
|
|
if argv.Protobuf && check.GetRepoType() == "protobuf" {
|
2025-01-29 20:00:26 -06:00
|
|
|
log.Printf("NEED RELEASE FOR %s err: %v\n", check.GetGoPath(), "because --protobuf")
|
2024-12-16 00:19:03 -06:00
|
|
|
// if --protobuf, this will force upgrade each one
|
|
|
|
forceReleaseVersion(check)
|
2025-01-13 08:11:43 -06:00
|
|
|
me.found.AppendByGoPath(check)
|
2024-12-12 02:05:47 -06:00
|
|
|
continue
|
2024-12-02 08:45:13 -06:00
|
|
|
}
|
2024-12-12 02:05:47 -06:00
|
|
|
|
2024-12-14 23:28:53 -06:00
|
|
|
// if the repo is a go binary or plugin for a new release for
|
|
|
|
// any library version change
|
2025-01-20 07:58:39 -06:00
|
|
|
// if check.GetRepoType() == "binary" || check.GetRepoType() == "plugin" {
|
|
|
|
// check if the package dependancies changed, if so, re-publish
|
2025-01-29 20:00:26 -06:00
|
|
|
if err := me.forge.FinalGoDepsCheckOk(check, false); err == nil {
|
|
|
|
// log.Printf("go.sum is perfect! %s\n", check.GetGoPath())
|
2025-01-20 07:58:39 -06:00
|
|
|
continue
|
2025-01-29 20:00:26 -06:00
|
|
|
} else {
|
|
|
|
log.Printf("NEED RELEASE FOR %-50s err: %v\n", check.GetGoPath(), err)
|
|
|
|
forceReleaseVersion(check)
|
|
|
|
me.found.AppendByGoPath(check)
|
2024-12-02 07:00:28 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2025-01-17 05:13:11 -06:00
|
|
|
me.forge.PrintHumanTable(me.found)
|
2024-12-16 00:19:03 -06:00
|
|
|
}
|
2025-01-17 14:19:26 -06:00
|
|
|
|
2025-01-18 05:52:41 -06:00
|
|
|
func printDone() {
|
|
|
|
for _, gopath := range me.done {
|
2025-01-20 05:09:28 -06:00
|
|
|
log.Info("printDone() THESE WERE PUBLISHED", gopath)
|
2025-01-18 05:52:41 -06:00
|
|
|
}
|
2025-01-20 05:09:28 -06:00
|
|
|
log.Sleep(1)
|
2025-01-18 05:52:41 -06:00
|
|
|
}
|
|
|
|
|
2025-01-17 14:19:26 -06:00
|
|
|
func alreadyDone(repo *gitpb.Repo) bool {
|
|
|
|
for _, gopath := range me.done {
|
2025-01-18 07:30:11 -06:00
|
|
|
// log.Info("WARNING already done", gopath, repo.GetGoPath())
|
|
|
|
// log.Info("WARNING already done", gopath, repo.GetGoPath())
|
|
|
|
// log.Info("WARNING already done", gopath, repo.GetGoPath())
|
2025-01-17 14:19:26 -06:00
|
|
|
if repo.GetGoPath() == gopath {
|
2025-01-18 07:30:11 -06:00
|
|
|
log.Info("FOUND. RETURN TRUE. already done", gopath, repo.GetGoPath())
|
2025-01-17 14:19:26 -06:00
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|