Compare commits

...

62 Commits

Author SHA1 Message Date
Jeff Carr dcac6d6608 build-quick 2025-09-22 20:35:06 -05:00
Jeff Carr da0540d3a7 more stuff 2025-09-13 07:45:09 -05:00
Jeff Carr bcaded6b37 s// 2025-09-13 07:30:31 -05:00
Jeff Carr 926a1ce33c moved to new scan func 2025-09-13 07:09:28 -05:00
Jeff Carr d31c80d780 minor 2025-09-13 05:32:42 -05:00
Jeff Carr 0e6cefb72e duh 2025-09-13 01:57:04 -05:00
Jeff Carr 5ceab01b0e smarter build 2025-09-13 01:31:07 -05:00
Jeff Carr 2d5a45476c api change 2025-09-13 01:07:42 -05:00
Jeff Carr 03daf07ec2 rm bits 2025-09-12 16:02:14 -05:00
Jeff Carr dca25f2425 rm debugging code 2025-09-12 16:01:33 -05:00
Jeff Carr 756586e95e attempt to debug the release process further 2025-09-12 15:51:45 -05:00
Jeff Carr bad8a5c628 trying to debug the process 2025-09-12 15:40:19 -05:00
Jeff Carr 73cc9c0693 track down versioning 2025-09-12 15:12:32 -05:00
Jeff Carr 63dc802ded add tag check to doRelease() 2025-09-12 14:52:13 -05:00
Jeff Carr fd2254cd72 stop using GoSrc() 2025-09-11 22:14:41 -05:00
Jeff Carr d813ade5ab trying to get things back to working 2025-09-11 07:53:07 -05:00
Jeff Carr 7cf1758a36 back to a common Init() 2025-09-11 04:38:22 -05:00
Jeff Carr ad1144efe5 new forge init() 2025-09-11 03:28:07 -05:00
Jeff Carr fa876aa17d switch to new config 2025-09-11 03:15:28 -05:00
Jeff Carr 131d6b4178 everything must be on the master branch to publish 2025-09-10 17:30:33 -05:00
Jeff Carr c0d131a659 new GUI codebase 2025-09-09 05:45:29 -05:00
Jeff Carr e5c43347ea try even quicker release process 2025-09-05 13:04:46 -05:00
Jeff Carr 515f862f19 patch stuff 2025-09-05 01:24:25 -05:00
Jeff Carr 27b10fdc73 releaser went through the whole process this time 2025-09-04 12:34:37 -05:00
Jeff Carr 09d595fd53 attempt to fix the release process 2025-09-03 20:50:30 -05:00
Jeff Carr d5626a5e23 fixes 2025-08-31 16:30:12 -05:00
Jeff Carr d8706ed738 fix the release process somewhat 2025-08-31 09:15:25 -05:00
Jeff Carr 1528d8d507 verify all repos are on master 2025-08-17 23:44:34 -05:00
Jeff Carr 2f6b497b12 fixes do to 'go mod' behavior changes 2025-05-29 19:18:12 -05:00
Jeff Carr c0b5f7da3a stub in args 2025-03-23 11:41:33 -05:00
Jeff Carr 8037a3cc01 minor 2025-03-22 05:21:48 -05:00
Jeff Carr 0cfaf29361 run this way 2025-03-19 07:52:51 -05:00
Jeff Carr 0662c2e0cb minor 2025-03-19 07:19:32 -05:00
Jeff Carr 236a7cb5e8 add verbose 2025-03-05 05:11:50 -06:00
Jeff Carr 8d5d7ca85c hmm. notsure what is going on 2025-03-05 04:35:38 -06:00
Jeff Carr 6add3f9982 notsure why this stalled without this line 2025-03-05 03:57:17 -06:00
Jeff Carr bfa63cac22 these are done now 2025-03-03 11:10:19 -06:00
Jeff Carr 392ea6e98e misc 2025-02-22 07:35:45 -06:00
Jeff Carr 0a1cb978e8 allow building just changed packages 2025-02-22 03:40:49 -06:00
Jeff Carr 3ff6dae849 put a non-empty file in resources/ 2025-02-20 11:06:08 -06:00
Jeff Carr 721ee08ad2 actually try to make all the packages also 2025-02-19 18:19:28 -06:00
Jeff Carr 38a0f70c78 trim old code 2025-02-17 14:14:00 -06:00
Jeff Carr eb57f644f7 rm old code 2025-02-15 18:58:56 -06:00
Jeff Carr 93b659020b remove wrong code 2025-02-15 18:55:19 -06:00
Jeff Carr a128a45ef9 attempt to make debian packages on success 2025-02-15 18:02:46 -06:00
Jeff Carr 8efada2a54 handle private repos first 2025-02-14 20:42:16 -06:00
Jeff Carr f70f3bfe1a hopefully the last check. perfectly perfect? 2025-02-14 19:15:57 -06:00
Jeff Carr 2f1d7ac1f2 minor 2025-02-14 17:58:20 -06:00
Jeff Carr ffecf5ea0a finally am checking for duplicate tags correctly. maybe. 2025-02-14 00:43:16 -06:00
Jeff Carr 8f514d4268 fix changes related to plugin updates 2025-02-14 00:09:37 -06:00
Jeff Carr 225cd84f68 set MAX loop to Repos.Len() 2025-02-12 17:02:47 -06:00
Jeff Carr 248642b681 minor 2025-02-12 17:01:03 -06:00
Jeff Carr cfd6046978 handle primitive package logic 2025-02-12 10:35:50 -06:00
Jeff Carr 76c327b1f1 send back an error on nil 2025-02-09 15:05:10 -06:00
Jeff Carr 447b4ebd3b changed 20 to 40 2025-02-09 14:53:31 -06:00
Jeff Carr 973032af1c nil check 2025-02-09 14:50:08 -06:00
Jeff Carr 8d33a63e7e hot diggity. this might actually work. 2025-02-08 19:46:39 -06:00
Jeff Carr 8cc487393f checks for more things 2025-02-08 06:32:37 -06:00
Jeff Carr 021c7774b2 moved lots of logic to go-mod-clean 2025-02-07 11:21:51 -06:00
Jeff Carr 3ceb5d0bf5 lame debugging code before. couldn't tell what was failing 2025-01-30 14:12:29 -06:00
Jeff Carr 501241dbb6 func name change 2025-01-30 12:08:08 -06:00
Jeff Carr 2ea06531dc minor debugging on the end 2025-01-30 04:43:51 -06:00
15 changed files with 452 additions and 507 deletions

View File

@ -55,15 +55,9 @@ curl-setBranchesToMasterB:
findNext:
curl --silent http://localhost:9419/findNext
fixNext:
curl --silent http://localhost:9419/fixNext
showNext:
curl --silent http://localhost:9419/showNext
testNext:
curl --silent http://localhost:9419/testNext
doRelease:
reset
make showNext
@ -92,6 +86,40 @@ list-release-notdone:
curl --silent http://localhost:9419/releaseList?readonly=true
safe-build: install
forge list --private
# forge list --private
wit-test install --verbose
cd ~/go/src/go.wit.com/lib/xgb/ && GUIRELEASE_REASON="safe-build" guireleaser
# cd ~/go/src/go.wit.com/lib/xgb/ && time GUIRELEASE_REASON="safe-build" guireleaser --gui gocui --gui-verbose --gui-file ../../toolkits/gocui/gocui.so >/tmp/forge.log 2>&1
rm -f go.* ; git checkout go.mod ; cd ~/go/src/go.wit.com/lib/xgb/ && time GUIRELEASE_REASON="safe-build" guireleaser --gui andlabs
build-quick: install
wit-test install --verbose
# rm -f go.* ; git checkout go.mod ;cd ~/go/src/go.wit.com/lib/xgb/ && time GUIRELEASE_REASON="safe-build" guireleaser --gui andlabs quick
sudo "wit update"
autocomplete:
guireleaser --bash > ~/.local/share/bash-completion/completions/guireleaser
test-build-force:
GUIRELEASE_REASON="safe-build" guireleaser --gui andlabs --force
# time GUIRELEASE_REASON="safe-build" make test-build
test-build:
wit-test install --verbose
rm ~/go/bin/forged
cd ~/go/src/go.wit.com/lib/xgb/ && rm -f go.*
cd ~/go/src/go.wit.com/lib/xgb/ && git checkout go.mod
cd ~/go/src/go.wit.com/lib/xgb/ && time guireleaser --gui andlabs
cd ~/go/src/go.wit.com/apps/guireleaser
wit-test debian --verbose
do-aptly
# time GUIRELEASE_REASON="safe-build" make test-build-quick
test-build-quick:
wit-test install --verbose
rm ~/go/bin/forged
cd ~/go/src/go.wit.com/lib/xgb/ && rm -f go.*
cd ~/go/src/go.wit.com/lib/xgb/ && git checkout go.mod
cd ~/go/src/go.wit.com/lib/xgb/ && time guireleaser --gui andlabs quick
cd ~/go/src/go.wit.com/apps/guireleaser
wit-test debian --verbose
do-aptly

8
TODO
View File

@ -2,13 +2,7 @@ notes on what to fix next
go-args make patches for alexflint
forge checkout jcarr (alias username to 'user')
forge verify devel branches
fix going2go build
fix fyne build
go-mod-clean --restore *.pb.go files
go-mod-clean set ctime on files
go-mod-clean fix --purge to be used more often. put --purge in 'make clean' ?
guireleaser change "title small" to the package being updated"

69
argv.go
View File

@ -1,5 +1,11 @@
package main
import (
"fmt"
"os"
"os/user"
)
/*
this parses the command line arguements
@ -7,22 +13,23 @@ package main
*/
type args struct {
Quick *QuickCmd `arg:"subcommand:quick" help:"only do repos with patches"`
DryRun bool `arg:"--dry-run,env:DRYRUN" help:"don't actually do the release"`
// Fix bool `arg:"--fix" help:"run fixGoMod() on startup"`
Minor bool `arg:"--minor" help:"increment minor verion numbers"`
Protobuf bool `arg:"--protobuf" help:"increment protobuf repos"`
Verbose bool `arg:"--verbose" help:"talk alot"`
Reason string `arg:"--reason" help:"tag message"`
// DumpVersions bool `arg:"--dump-versions" help:"dump the versions file for go.wit.com"`
Port int `arg:"--port" default:"9419" help:"do fun stuff with curl"`
Bash bool `arg:"--bash" help:"generate bash completion"`
BashAuto []string `arg:"--auto-complete" help:"does the actual autocompletion"`
Quick *QuickCmd `arg:"subcommand:quick" help:"only do repos with patches"`
DryRun bool `arg:"--dry-run,env:DRYRUN" help:"don't actually do the release"`
Minor bool `arg:"--minor" help:"increment minor verion numbers"`
Protobuf bool `arg:"--protobuf" help:"increment protobuf repos"`
Verbose bool `arg:"--verbose" help:"talk alot"`
Full bool `arg:"--full" help:"build every package"`
Reason string `arg:"--reason" help:"tag message"`
Force bool `arg:"--force" help:"try harder than normal"`
Port int `arg:"--port" default:"9419" help:"do fun stuff with curl"`
Bash bool `arg:"--bash" help:"generate bash completion"`
BashAuto []string `arg:"--auto-complete" help:"does the actual autocompletion"`
}
type QuickCmd struct {
List *EmptyCmd `arg:"subcommand:list" help:"list available patches"`
Show *EmptyCmd `arg:"subcommand:show" help:"show a specific patch"`
List *EmptyCmd `arg:"subcommand:list" help:"list available patches"`
Show *EmptyCmd `arg:"subcommand:show" help:"show a specific patch"`
NoLibs *EmptyCmd `arg:"subcommand:show" help:"skip libraries that aren't changed"`
}
type EmptyCmd struct {
@ -40,3 +47,39 @@ the repositories in the go.sum file using git clone`
func (args) Version() string {
return "guireleaser " + VERSION
}
/*
handles shell autocomplete
*/
func (a args) DoAutoComplete(argv []string) {
switch argv[0] {
case "checkout":
usr, _ := user.Current()
fmt.Println("user devel master " + usr.Username)
case "commit":
fmt.Println("--all")
case "config":
fmt.Println("add fix list delete")
case "list":
fmt.Println("--all --mine --favorites --private")
case "pull":
fmt.Println("--all --mine --favorites --private")
case "patch":
fmt.Println("--list --submit --show")
case "dirty":
fmt.Println("--show-files")
case "user":
fmt.Println("--force")
case "devel":
fmt.Println("--force")
case "master":
fmt.Println("--force")
default:
if argv[0] == ARGNAME {
// list the subcommands here
fmt.Println("--bash quick")
}
}
os.Exit(0)
}

View File

@ -1,97 +0,0 @@
package main
import (
"fmt"
"os"
"os/user"
)
/*
handles shell autocomplete
*/
// used for shell auto completion
// var ARGNAME string = "forge" // todo: get this from $0 ?
func (args) doBashAuto() {
argv.doBashHelp()
switch argv.BashAuto[0] {
case "checkout":
usr, _ := user.Current()
fmt.Println("user devel master " + usr.Username)
case "commit":
fmt.Println("--all")
case "config":
fmt.Println("add fix list delete")
case "list":
fmt.Println("--all --mine --favorites --private")
case "pull":
fmt.Println("--all --mine --favorites --private")
case "patch":
fmt.Println("--list --submit --show")
case "dirty":
fmt.Println("--show-files")
case "user":
fmt.Println("--force")
case "devel":
fmt.Println("--force")
case "master":
fmt.Println("--force")
default:
if argv.BashAuto[0] == ARGNAME {
// list the subcommands here
fmt.Println("--bash quick")
}
}
os.Exit(0)
}
// prints help to STDERR // TODO: move everything below this to go-args
func (args) doBashHelp() {
if argv.BashAuto[1] != "''" {
// if this is not blank, then the user has typed something
return
}
if argv.BashAuto[0] != ARGNAME {
// if this is not the name of the command, the user already started doing something
return
}
if argv.BashAuto[0] == ARGNAME {
me.pp.WriteHelp(os.Stderr)
return
}
fmt.Fprintln(os.Stderr, "")
fmt.Fprintln(os.Stderr, "hello world")
fmt.Fprintln(os.Stderr, "")
}
// complete -F forge --bash forge
func (args) doBash() {
fmt.Println("# add this in your bashrc:")
fmt.Println("")
fmt.Println("# todo: add this to go-arg as a 'hidden' go-arg option --bash")
fmt.Println("#")
fmt.Println("# todo: make this output work/parse with:")
fmt.Println("# complete -C " + ARGNAME + " --bash go")
fmt.Println("")
fmt.Println("_" + ARGNAME + "_complete()")
fmt.Println("{")
fmt.Println(" # sets local to this func vars")
fmt.Println(" local cur prev all")
fmt.Println(" cur=${COMP_WORDS[COMP_CWORD]}")
fmt.Println(" prev=${COMP_WORDS[COMP_CWORD-1]}")
fmt.Println(" all=${COMP_WORDS[@]}")
fmt.Println("")
fmt.Println(" # this is where we generate the go-arg output")
fmt.Println(" GOARGS=$(" + ARGNAME + " --auto-complete $prev \\'$cur\\' $all)")
fmt.Println("")
fmt.Println(" # this compares the command line input from the user")
fmt.Println(" # to whatever strings we output")
fmt.Println(" COMPREPLY=( $(compgen -W \"$GOARGS\" -- $cur) ) # THIS WORKS")
fmt.Println(" return 0")
fmt.Println("}")
fmt.Println("complete -F _" + ARGNAME + "_complete " + ARGNAME)
fmt.Println("")
fmt.Println("# copy and paste the above into your bash shell should work")
os.Exit(0)
}

View File

@ -54,9 +54,32 @@ func doRelease() error {
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.ReloadCheck()
return fmt.Errorf("already released %s", check.GetGoPath())
}
// check if the git tag already exists somehow
testtag := me.release.version.String()
if check.LocalTagExists(testtag) {
log.Info("TAG ALREADY EXISTS", testtag)
return log.Errorf("%s TAG ALREADY EXISTS %s", check.FullPath, testtag)
} else {
log.Info("TAG IS NEW", testtag)
}
if me.forge.Config.IsPrivate(me.current.GetGoPath()) {
// do not self update private repos
log.Info("This is a private repo.")
var retag [][]string
retag = append(retag, []string{"git", "tag", "-m", me.releaseReasonS, me.release.version.String()})
retag = append(retag, []string{"git", "push", "origin", me.release.version.String()})
if !me.current.RunAll(retag) {
log.Info("retag failed")
findOk = false
return fmt.Errorf("RETAG FAILED %s", check.GetGoPath())
}
return skipToNext()
}
me.done = append(me.done, me.current.GetGoPath())
if err := me.forge.FinalGoDepsCheckOk(check, true); err != nil {
msg := fmt.Sprint("the go.mod file is wrong. fix it here?", check.GetGoPath())
@ -86,6 +109,23 @@ func doRelease() error {
badExit(errors.New(msg))
}
// this is the final check. even here, just to be a total asshole
// I rerun go mod init and go mod tidy
// the re-parse all the results
// this is the last and final check.
// believe it or not, I've seen this fail. It's not worth being careful here
// or liberal about it. if it doesn't work, yep, you are stuck here you bastard
// (bastard being me. I designed this to be so annoying that if it makes it
// past this point it always works. that is the whole point of this code. NEVER
// EVER FAIL PAST THIS POINT
// )
// so let's do it: let's run go-mod-clean strict
// then reparse everything
_, err := check.RunVerboseOnError([]string{"go-mod-clean", "strict"})
if err != nil {
badExit(err)
}
var all [][]string
var autogen []string
all = append(all, []string{"git", "add", "-f", "go.mod"})
@ -139,9 +179,9 @@ func doRelease() error {
time.Sleep(3 * time.Second)
// this can fail to update, try it again after sleep(3s)
if !doPublishVersion() {
log.Info("PUBLISH FAILED")
log.Info("PUBLISH FAILED gopath=%s", check.GetGoPath())
findOk = false
return fmt.Errorf("PUBLISH FAILED %s", check.GetGoPath())
return fmt.Errorf("PUBLISH FAILED gopath=%s", check.GetGoPath())
}
}
@ -163,13 +203,6 @@ func doRelease() error {
retag = append(retag, []string{"git", "tag", "-m", me.releaseReasonS, me.release.version.String()})
retag = append(retag, []string{"git", "push", "origin", me.release.version.String()})
if err := check.AutogenRestore(cname); err != nil {
log.Info("AutogenRestore() failed", err)
} else {
cmd := []string{"git", "push", "origin", "refs/notes/*:refs/notes/*"}
check.Run(cmd)
}
if !me.current.RunAll(retag) {
log.Info("retag failed")
findOk = false
@ -177,30 +210,6 @@ func doRelease() error {
}
log.Info("EVERYTHING OK. RERELEASED", me.current.GetGoPath())
// save autogen files under the tag version (for example: "v0.2.3")
newtag := me.release.version.String()
if err := check.AutogenSave(autogen, newtag, true); err != nil {
log.Info("AutogenSave() error", err)
msg := fmt.Sprint("AutogenSave() error", err)
badExit(errors.New(msg))
}
me.current.Reload()
me.forge.SetConfigSave(true)
me.forge.ConfigSave()
log.Info("sleep 2")
time.Sleep(2 * time.Second)
printDone()
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
}

View File

@ -8,11 +8,12 @@ import (
func okExit(thing string) {
log.Info(thing, "ok")
// log.Info("Finished go-clean on", check.GetGoPath(), "ok")
// log.Info("Finished go-clean on", check.GetNamespace(), "ok")
me.forge.Exit()
os.Exit(0)
}
func badExit(err error) {
log.Info("forge failed: ", err, me.forge.GetGoSrc())
log.Info("forge failed: ", err, me.forge.Config.ReposDir)
os.Exit(-1)
}

View File

@ -1,9 +1,10 @@
// This is a simple example
package main
import (
"errors"
"fmt"
"slices"
"os"
"path/filepath"
"go.wit.com/log"
@ -16,24 +17,25 @@ var findOk bool = true
func checkDeps(repo *gitpb.Repo) error {
if repo.GoDeps == nil {
return fmt.Errorf("%s has GoDeps == nil", repo.GetGoPath())
return fmt.Errorf("%s has GoDeps == nil", repo.GetNamespace())
}
all := repo.GoDeps.All()
for all.Scan() {
dep := all.Next()
// log.Info(repo.GetGoPath(), dep.GoPath, dep.Version)
for dep := range repo.GoDeps.IterAll() {
// log.Info(repo.GetNamespace(), dep.GoPath, dep.Version)
// check if the package in question is waiting for another package to publish
found := me.forge.FindByGoPath(dep.GoPath)
if found == nil {
return fmt.Errorf("%s has dep == nil", repo.GetGoPath(), dep.GoPath)
return fmt.Errorf("%s has dep == nil", repo.GetNamespace(), dep.GoPath)
}
// loop through all the repos that need to be published with new go versions
all := me.found.SortByFullPath()
for all.Scan() {
check := all.Next()
if found.GetGoPath() == check.GetGoPath() {
if found.GetNamespace() == check.GetNamespace() {
// this package is waiting on other packages to publish
return fmt.Errorf("%s is waiting on %s", repo.GetGoPath(), found.GetGoPath())
return fmt.Errorf("%s is waiting on %s", repo.GetNamespace(), found.GetNamespace())
}
}
// found package isn't being published. is the version correct?
@ -42,7 +44,7 @@ func checkDeps(repo *gitpb.Repo) error {
if found.GetLastTag() == dep.Version {
// everything is normal
} else {
return fmt.Errorf("%s version mismatch on %s (%s vs %s)", repo.GetGoPath(), found.GetGoPath(), found.GetLastTag(), dep.Version)
return fmt.Errorf("%s version mismatch on %s (%s vs %s)", repo.GetNamespace(), found.GetNamespace(), found.GetLastTag(), dep.Version)
}
*/
}
@ -59,73 +61,66 @@ func findNext() bool {
for all.Scan() {
check := all.Next()
if check.GetMasterBranchName() != check.GetCurrentBranchName() {
log.Info("YOU MUST BE ON THE MASTER BRANCH", check.GetGoPath())
log.Info("YOU MUST BE ON THE MASTER BRANCH", check.GetNamespace())
continue
}
if check.IsDirty() {
log.Info("CAN NOT RELEASE DIRTY REPO", check.GetGoPath())
log.Info("CAN NOT RELEASE DIRTY REPO", check.GetNamespace())
continue
}
if alreadyDone(check) {
log.Info("findNext() alreadyDone. WHY IS THIS STILL CHECKING?", check.GetGoPath())
log.Info("findNext() alreadyDone. WHY IS THIS STILL CHECKING?", check.GetNamespace())
continue
}
log.Info("CHECKING:", check.GetGoPath())
// _, err := check.RunVerboseOnError([]string{"go-mod-clean", "--strict"})
_, err := check.RunQuiet([]string{"go-mod-clean", "--smart"})
log.Info("CHECKING START:", check.GetNamespace())
if me.forge.Config.IsPrivate(check.GetNamespace()) {
log.Info("GOOD TO GO ON PRIVATE REPO", check.GetNamespace())
setCurrentRepo(check, "should be good to release", "pretty sure")
return true
}
godepsNew, err := check.GoSumFromRepo()
if err != nil {
log.Info("FAILED: findNext() go-mod-clean --smart", check.GetGoPath(), err)
log.Info("CHECKING go deps from repo failed", err)
continue
}
findCounter += 1
if !check.ParseGoSum() {
log.Info("ParseGoSum() failed", check.GetGoPath())
log.Info("ParseGoSum() failed", check.GetGoPath())
log.Info("ParseGoSum() failed", check.GetGoPath())
continue
}
/*
if err := me.forge.CleanGoDepsCheckOk(check); err != nil {
log.Info("CleanGoDepsCheckOk() failed", check.GetGoPath(), err)
log.Info("CleanGoDepsCheckOk() failed", check.GetGoPath(), err)
if godepsNew == nil {
// don't check godepsNew, but check to make sure go mod tidy actually ran without error
os.Unsetenv("GO111MODULE")
cmd := []string{"go", "mod", "tidy"}
err := check.RunVerbose(cmd)
if err != nil {
log.Info("go mod tidy failed. this go package needs to be examined by hand as it doesn't appear to be primitive")
os.Exit(-1)
}
// if godepsNew == nil, then this go package is a primitive and there is no go.sum file
} else {
if err := testGoDepsCheckOk(godepsNew, argv.Verbose); err != nil {
log.Info("CHECKING current repo deps failed", err)
continue
}
*/
/*
if err := checkDeps(check); err != nil {
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
} else {
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, false); err != nil {
log.Info("FinalGoDepsCheckOk() repo=", check.GetGoPath(), "err:", err)
log.Info("CHECKING END:", check.GetGoPath())
log.Info("FinalGoDepsCheckOk() repo=", check.GetNamespace(), "err:", err)
log.Info("CHECKING END:", check.GetNamespace())
log.Info("")
continue
}
log.Info("GOOD TO GO ON", check.GetGoPath())
log.Info("GOOD TO GO ON", check.GetNamespace())
setCurrentRepo(check, "should be good to release", "pretty sure")
return true
}
if findCounter == 0 {
log.Info("NOTHING TO UPDATE. findCounter =", findCounter)
log.Info("NOTHING TO UPDATE. findCounter =", findCounter, "found len =", me.found.Len())
if me.found.Len() == 0 {
printDone()
okExit("")
}
} else {
log.Info("me.current is nil findCounter =", findCounter, "so set findFix =", findFix)
}
@ -135,70 +130,6 @@ func findNext() bool {
return false
}
// tries to fix the go.mod and go.sum files
func fixGodeps(check *gitpb.Repo) bool {
var good bool = true
check.GoDeps = nil
if result, err := check.RunQuiet([]string{"go-mod-clean", "--strict"}); err != nil {
// log.Info("fixGoDeps() runGoClean() strict failed", check.GetGoPath(), err)
// log.Info("fixGoDeps() runGoClean() strict failed", check.GetGoPath(), len(result.Stdout), len(result.Stderr))
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
}
if check.ParseGoSum() {
return true
} else {
log.Info("ParseGoSum() failed but go-mod-clean --strict worked", check.GetGoPath())
return false
}
// skip primative ones
if check.GetGoPrimitive() {
if check.Exists("go.sum") {
log.Info("fixGoDeps() has go.sum but says it is primitive", check.GetGoPath())
return false
}
log.Info("fixGoDeps() skipping primitive", check.GetGoPath())
return true
}
log.Printf("current repo %s go dependancy count: %d\n", check.GetGoPath(), check.GoDepsLen())
log.Printf("current repo %s go dependancy count: %d\n", check.GetGoPath(), check.GoDepsLen())
log.Printf("current repo %s go dependancy count: %d\n", check.GetGoPath(), check.GoDepsLen())
deps := check.GoDeps.SortByGoPath()
for deps.Scan() {
depRepo := deps.Next()
// log.Info("found dep", depRepo.GetGoPath())
if me.forge.Config.IsReadOnly(depRepo.GetGoPath()) {
log.Info("IsReadOnly = true", depRepo.GetGoPath())
continue
} else {
// log.Info("IsReadOnly = false", depRepo.GetGoPath())
}
found := me.forge.FindByGoPath(depRepo.GetGoPath())
if found == nil {
log.Info("not found:", depRepo.GetGoPath())
continue
}
log.Printf("%-48s dep ver=%10s repo ver=%10s target ver=%10s\n", found.GetGoPath(), depRepo.GetVersion(), found.GetMasterVersion(), found.GetTargetVersion())
if depRepo.GetVersion() != found.GetMasterVersion() {
log.Printf("%-48s %10s (gitpb depRepo)\n", depRepo.GetGoPath(), depRepo.GetVersion())
log.Printf("%-48s %10s (gitpb found)\n", found.GetGoPath(), found.GetMasterVersion())
cmd := []string{"go", "get", depRepo.GetGoPath() + "@latest"}
check.RunVerbose(cmd)
}
}
return good
}
func setCurrentRepo(check *gitpb.Repo, s string, note string) bool {
me.current = check
if check == nil {
@ -207,14 +138,30 @@ func setCurrentRepo(check *gitpb.Repo, s string, note string) bool {
me.release.releaseVersionB.SetText("nope")
me.release.version.SetText("badver")
} else {
me.release.repo.SetText(check.GetGoPath())
me.release.repo.SetText(check.GetNamespace())
me.release.version.SetText(check.GetTargetVersion())
me.release.releaseVersionB.SetText("release version " + check.GetTargetVersion())
me.release.version.SetText(check.GetTargetVersion())
}
me.release.status.SetText(s)
me.release.notes.SetText(note)
me.release.openrepo.Enable()
// me.release.openrepo.Enable()
return true
}
func testGoDepsCheckOk(godeps *gitpb.GoDeps, verbose bool) error {
if godeps == nil {
return errors.New("testGoDepsCheckOk() godeps == nil")
}
all := godeps.SortByGoPath()
for all.Scan() {
depRepo := all.Next()
fullpath := filepath.Join(me.forge.Config.ReposDir, depRepo.GoPath)
found := me.found.FindByFullPath(fullpath)
if found == nil {
continue
}
return fmt.Errorf("dep is being upgraded %s", depRepo.GoPath)
}
return nil
}

View File

@ -4,7 +4,6 @@ import (
"go.wit.com/gui"
"go.wit.com/lib/debugger"
"go.wit.com/lib/gui/logsettings"
"go.wit.com/log"
)
func globalDisplayOptions(box *gui.Node) {
@ -12,17 +11,18 @@ func globalDisplayOptions(box *gui.Node) {
group1 := vbox.NewGroup("Global Display Options")
hidegrid := group1.NewGrid("hidecfg", 0, 0)
hidegrid.NewButton("Show Repository Window", func() {
if me.repos.Hidden() {
me.repos.Show()
} else {
me.repos.Hide()
}
log.Info("showing reposwin")
})
hidegrid.NextRow()
/*
hidegrid := group1.NewGrid("hidecfg", 0, 0)
hidegrid.NewButton("Show Repository Window", func() {
if me.repos.Hidden() {
me.repos.Show()
} else {
me.repos.Hide()
}
log.Info("showing reposwin")
})
hidegrid.NextRow()
*/
group1 = vbox.NewGroup("prep for release")
grid := group1.RawGrid()

13
http.go
View File

@ -72,8 +72,6 @@ func okHandler(w http.ResponseWriter, r *http.Request) {
// log.Info(me.current.StandardHeader())
log.Info(me.forge.StandardReleaseHeader(me.current, "todoing"))
case "/rescanAll":
me.repos.View.ScanRepositories()
case "/setCurrentRepo":
log.Info("repo: " + repoName)
log.Info("version: " + version)
@ -87,16 +85,6 @@ func okHandler(w http.ResponseWriter, r *http.Request) {
setCurrentRepo(repo, "HTTP", "doRelease() ?")
return
case "/fixNext":
check := me.forge.FindByGoPath(me.current.GetGoPath())
if check == nil {
log.Info("boo, you didn't git clone", me.current.GetGoPath())
return
}
// destroy and recreate the go.sum
fixGodeps(check)
findOk = true
return
case "/showNext":
check := me.forge.FindByGoPath(me.current.GetGoPath())
if check == nil {
@ -105,6 +93,7 @@ func okHandler(w http.ResponseWriter, r *http.Request) {
}
testGoRepo(check)
me.forge.HumanPrintRepo(check)
log.Info("upgrade reason:", me.reason[check])
return
case "/list":
me.forge.PrintHumanTable(me.found)

63
main.go
View File

@ -8,8 +8,9 @@ import (
"path/filepath"
"go.wit.com/dev/alexflint/arg"
"go.wit.com/gui"
"go.wit.com/lib/fhelp"
"go.wit.com/lib/gadgets"
"go.wit.com/lib/gui/prep"
"go.wit.com/lib/gui/shell"
"go.wit.com/lib/protobuf/forgepb"
"go.wit.com/lib/protobuf/gitpb"
@ -26,27 +27,18 @@ var argv args
func main() {
me = new(autoType)
// parse the command line
prep.Bash(ARGNAME, argv.DoAutoComplete) // this line should be: prep.Bash(argv)
me.myGui = prep.Gui() // prepares the GUI package for go-args
me.pp = arg.MustParse(&argv)
if argv.Bash {
argv.doBash()
os.Exit(0)
}
if len(argv.BashAuto) != 0 {
argv.doBashAuto()
os.Exit(0)
}
// load the ~/.config/forge/ config
me.forge = forgepb.Init()
me.forge.ScanRepoDir() // looks for new dirs, checks existing repos for changes
me.found = new(gitpb.Repos)
fhelp.CheckGoModCleanExit()
// me.forge.ConfigPrintTable()
os.Setenv("REPO_WORK_PATH", me.forge.GetGoSrc())
os.Setenv("REPO_WORK_PATH", me.forge.Config.ReposDir)
// save the ENV var here
me.releaseReasonS = os.Getenv("GUIRELEASE_REASON")
@ -60,19 +52,20 @@ func main() {
// user drops to a shell or xterm, then they shouldn't be set there either
os.Unsetenv("GO111MODULE")
me.myGui = gui.New()
me.myGui.InitEmbed(resources)
me.myGui.Default()
me.myGui.Start() // loads the GUI toolkit
// our main window
me.mainWindow = me.myGui.NewWindow("GUI release manager " + VERSION)
me.mainWindow = gadgets.RawBasicWindow("GUI release manager " + VERSION)
me.mainWindow.Custom = func() {
log.Warn("Window closed. forge configsave")
// sets the hidden flag to false so Toggle() works
me.forge.ConfigSave()
okExit("")
}
me.mainBox = me.mainWindow.NewBox("bw hbox", true)
me.mainWindow.Make()
me.mainWindow.Show()
me.mainBox = me.mainWindow.Box()
// sanity check of things that might be around that mess
// up things later
@ -86,10 +79,6 @@ func main() {
log.Info("Creating the Release Window")
// initialize the repo list window
// which should be all the git repositories in ~/go/src & the .config file
me.repos = makeRepoView()
// the left side of the window options
globalDisplayOptions(me.mainBox)
@ -100,19 +89,28 @@ func main() {
me.release.box.Disable()
me.Disable()
// scan in the State of all the repos
// TODO: should not really be necessary directly after init()
me.repos.View.ScanRepositories()
// todo: add this to forgepb
me.startRepo = me.forge.FindWorkingDirRepo()
if _, count, _, err := me.forge.IsEverythingOnMaster(); err != nil {
log.Info("not everything is on the master branch (", count, "repos)")
if argv.Quick != nil {
// quick also means ignore the master branch check
argv.Force = true
}
if !argv.Force {
os.Exit(-1)
}
}
if me.startRepo == nil {
pwd, _ := os.Getwd()
msg := fmt.Sprint("Can not run if pwd is not a repo", pwd)
badExit(errors.New(msg))
}
me.forge.RillFuncError(rillPurge)
// run this each time something gets published successfully
rePrepareRelease()
@ -122,21 +120,12 @@ func main() {
// check if nothing is found an exit?
if me.found.Len() == 0 {
log.Info("nothing found to publish")
os.Exit(0)
okExit("found nothing")
}
}
me.Enable()
me.release.box.Enable()
/*
// intermittently scans the status indefinitly
me.repos.View.Watchdog(func() {
log.Info("In main()")
log.Sleep(10)
// processing is done. update the repo summary box
// me.summary.Update()
})
*/
// start the http server for polling status
startHTTP()
}

View File

@ -2,11 +2,13 @@ package main
import (
"errors"
"fmt"
"os"
"path/filepath"
"time"
"go.wit.com/lib/gui/shell"
"go.wit.com/lib/protobuf/forgepb"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
@ -36,13 +38,30 @@ func checkpkgcache(repo *gitpb.Repo) error {
}
getpath := repo.GetGoPath() + "@" + repo.GetLastTag()
log.Info("MISSING:", getpath)
log.Infof("~/go/pkg/mod/ IS MISSING %s so I'm running go get here.", getpath)
_, err = me.startRepo.RunVerboseOnError([]string{"go", "get", getpath})
return err
}
var rillcount int
func rillPurge(repo *gitpb.Repo) error {
if me.forge.Config.IsReadOnly(repo.GetGoPath()) {
return nil
}
if me.forge.Config.IsPrivate(repo.GetGoPath()) {
return nil
}
_, err := repo.RunQuiet([]string{"go-mod-clean", "purge"})
rillcount += 1
if err != nil {
log.Info("go-mod-clean purge failed", repo.GetGoPath(), err)
return err
}
return nil
}
func rillRestore(repo *gitpb.Repo) error {
if me.forge.Config.IsReadOnly(repo.GetGoPath()) {
return nil
@ -51,22 +70,34 @@ func rillRestore(repo *gitpb.Repo) error {
return nil
}
_, err := repo.RunQuiet([]string{"go-mod-clean", "--restore"})
var err error
if argv.Verbose {
log.Info("go-mod-clean lax START", repo.GetGoPath())
result := repo.RunRealtime([]string{"go-mod-clean", "lax"})
log.Info("go-mod-clean lax END", repo.GetGoPath())
if result.Exit != 0 {
err = fmt.Errorf("repo %s failed %d", repo.GetGoPath(), result.Exit)
}
} else {
_, err = repo.RunQuiet([]string{"go-mod-clean", "lax"})
}
rillcount += 1
if err != nil {
log.Info("go-mod-clean --restore failed", repo.GetGoPath(), err)
log.Info("go-mod-clean lax failed", repo.GetGoPath(), err)
return err
}
return nil
}
func rePrepareRelease() {
// reload the config
// me.forge = forgepb.Init()
me.forge.ScanRepoDir() // looks for new dirs, checks existing repos for changes
me.found = new(gitpb.Repos)
me.reason = make(map[*gitpb.Repo]string) // stores the reason repos need to be versioned & released
log.Printf("rePrepareRelease() START rill go-mod-clean --restore (11 seconds?)")
log.Printf("rePrepareRelease() START rill go-mod-clean lax (11 seconds?)")
rillcount = 0
forgepb.RillX = 2
forgepb.RillY = 2
now := time.Now()
me.forge.RillFuncError(rillRestore)
log.Printf("showRestore() (%d total repos) took:%s\n", rillcount, shell.FormatDuration(time.Since(now)))
@ -102,9 +133,33 @@ func rePrepareRelease() {
// can't release readonly repos
continue
}
// if master != lastTag, always increment
master := check.GetMasterVersion()
lastTag := check.GetLastTag()
if argv.Quick != nil {
// if argv has 'quick' don't do anything
// that doesn't actually have a patch
if master == lastTag {
continue
}
}
log.Info("LAST TAG", check.FullPath, master, lastTag)
// this is detailed. It makes sure the go.* files are absolutely perfect
if !me.forge.Config.IsPrivate(check.GetGoPath()) {
if err := checkPublishedGodeps(check); err != nil {
// this means the published godeps are no longer up to date
forceReleaseVersion(check)
me.found.AppendByFullPath(check)
log.Info("checkPublishedGodeps failed with err", check.GetGoPath(), err)
continue
} else {
// log.Info("checkPublishedGodeps is ok", check.GetGoPath())
}
}
// if master != lastTag, always increment
if master != lastTag {
newmhash := check.GetTagHash(master)
oldlhash := check.GetTagHash(lastTag)
@ -119,14 +174,20 @@ func rePrepareRelease() {
log.Info("old vs new count", b1, b2, "git merge", oldlhash)
}
// if b1 == 0 && b2 == 0 {
if b1 == 0 && b2 == 0 {
log.Info("got to identical repo", check.GetGoPath(), b1, b2)
log.Info("got to identical repo", check.GetGoPath(), oldlhash, newmhash)
// actually identical. do nothing
continue
}
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)
forceReleaseVersion(check)
me.found.AppendByGoPath(check)
me.found.AppendByFullPath(check)
me.reason[check] = "master != lastTag"
continue
}
@ -135,19 +196,12 @@ func rePrepareRelease() {
continue
}
if argv.Quick != nil {
// if argv has 'quick' don't do anything
// that doesn't actually have a patch
if master == lastTag {
continue
}
}
if argv.Protobuf && check.GetRepoType() == "protobuf" {
log.Printf("NEED RELEASE FOR %s err: %v\n", check.GetGoPath(), "because --protobuf")
// if --protobuf, this will force upgrade each one
forceReleaseVersion(check)
me.found.AppendByGoPath(check)
me.found.AppendByFullPath(check)
me.reason[check] = "protobuf repo deps changed"
continue
}
@ -161,18 +215,29 @@ func rePrepareRelease() {
} else {
log.Printf("NEED RELEASE FOR %-50s err: %v\n", check.GetGoPath(), err)
forceReleaseVersion(check)
me.found.AppendByGoPath(check)
me.found.AppendByFullPath(check)
me.reason[check] = "FinalGoDepsCheckOk() failed even though master tag == last tag"
}
}
me.forge.PrintHumanTable(me.found)
// todo: verify each found repo is on the master branch
for repo := range me.found.IterAll() {
if repo.CurrentBranchName != repo.MasterBranchName {
log.Info("repo not on master branch", repo.FullPath)
if !argv.Force {
os.Exit(-1)
}
}
}
}
func printDone() {
for _, gopath := range me.done {
log.Info("printDone() THESE WERE PUBLISHED", gopath)
}
log.Sleep(1)
log.Info("printDone() total finished so far:", len(me.done))
time.Sleep(time.Second)
}
func alreadyDone(repo *gitpb.Repo) bool {
@ -187,3 +252,46 @@ func alreadyDone(repo *gitpb.Repo) bool {
}
return false
}
/*
func upgradeReason(repo *gitpb.Repo) string {
for _, gopath := range me.reason {
// log.Info("WARNING already done", gopath, repo.GetGoPath())
// log.Info("WARNING already done", gopath, repo.GetGoPath())
// log.Info("WARNING already done", gopath, repo.GetGoPath())
if repo.GetGoPath() == gopath {
log.Info("FOUND. RETURN TRUE. already done", gopath, repo.GetGoPath())
return true
}
}
return false
}
*/
func checkPublishedGodeps(repo *gitpb.Repo) error {
godepsOld, err := repo.GoSumFromPkgDir()
if err != nil {
return err
}
if godepsOld != nil {
if err := me.forge.TestGoDepsCheckOk(godepsOld, argv.Verbose); err != nil {
return err
}
}
godepsNew, err := repo.GoSumFromRepo()
if err != nil {
return err
}
if godepsOld == nil {
if godepsNew == nil {
log.Printf("%s published godeps == nil && real == nil\n", repo.GetGoPath())
return nil
} else {
return fmt.Errorf("published godeps == nil vs real != nil")
}
}
if err := me.forge.TestGoDepsCheckOk(godepsNew, argv.Verbose); err != nil {
return err
}
return nil
}

View File

@ -2,11 +2,15 @@
package main
import (
"fmt"
"time"
"go.wit.com/gui"
"go.wit.com/log"
"go.wit.com/lib/gadgets"
"go.wit.com/lib/gui/repolist"
"go.wit.com/lib/gui/shell"
"go.wit.com/lib/protobuf/gitpb"
)
type releaseStruct struct {
@ -21,14 +25,14 @@ type releaseStruct struct {
releaseVersionB *gui.Node
reason *gadgets.BasicEntry
openrepo *gui.Node
// openrepo *gui.Node
goGetB *gui.Node
checkGoSumB *gui.Node
checkDirtyB *gui.Node
sendVersionB *gui.Node
checkSafeB *gui.Node
whitelist map[string]*repolist.RepoRow
// whitelist map[string]*repolist.RepoRow
}
func (w *autoType) Disable() {
@ -47,12 +51,18 @@ func createReleaseBox(box *gui.Node) {
me.release.releaseVersionB = me.release.grid.NewButton("release version", func() {
buttonDisable()
fpath := me.current.FullPath
if err := doRelease(); err == nil {
buttonEnable()
log.Info("doRelease() worked")
log.Info("doRelease() worked", fpath)
} else {
log.Info("doRelease() failed", err, me.current.GetGoPath())
log.Info("doRelease() failed", err, fpath)
log.Info("doRelease() FAILED", err, fpath)
log.Info("doRelease() FAILED", err, fpath)
log.Info("doRelease() FAILED", err, fpath)
}
skipToNext()
me.forge.PrintHumanTable(me.found)
})
me.release.grid.NewButton("Find Next", func() {
me.Disable()
@ -74,12 +84,6 @@ func createReleaseBox(box *gui.Node) {
me.release.grid.NextRow()
me.release.repo = gadgets.NewOneLiner(me.release.grid, "repo")
me.release.openrepo = me.release.grid.NewButton("Configure", func() {
if repov := me.repos.View.FindByPath(me.current.GetGoPath()); repov != nil {
repov.Status.Toggle()
}
})
me.release.openrepo.Disable()
me.release.grid.NextRow()
me.release.status = gadgets.NewOneLiner(me.release.grid, "status")
me.release.grid.NextRow()
@ -101,38 +105,69 @@ func createReleaseBox(box *gui.Node) {
me.release.grid.NextRow()
// me.userHomePwd.SetText(homeDir)
me.goSrcPwd.SetText(me.forge.GetGoSrc())
me.goSrcPwd.SetText(me.forge.Config.ReposDir)
group := me.release.box.NewGroup("Run on Current Repo")
grid := group.NewGrid("buildOptions", 0, 0)
/*
grid.NewButton("whitelist", func() {
})
*/
grid.NextRow()
group = me.release.box.NewGroup("Publish until done")
grid = group.NewGrid("buildOptions", 0, 0)
grid.NewButton("doRelease() all", func() {
buttonDisable()
count := 0
for {
log.Info("START doRelease() LOOP count =", count, "len me.done =", len(me.done))
if err := doRelease(); err != nil {
break
}
count += 1
if count > 20 {
break
}
}
doReleaseAll()
buttonEnable()
})
grid.NextRow()
}
func doReleaseAll() {
count := 0
for {
log.Info("START doRelease() LOOP count =", count, "len me.done =", len(me.done))
if err := doRelease(); err != nil {
break
}
if err := skipToNext(); err != nil {
break
}
count += 1
if count > me.forge.Repos.Len() {
// never allow a loop longer than all the known repos
// this probably doesn't matter, but often this code is wrong
// so this is a safety check. never remove this check.
break
}
}
}
func skipToNext() error {
shell.RunVerbose([]string{"forge", "dirty"})
log.Info("Sleeping for 2 seconds for no reason.")
time.Sleep(1)
me.forge.ScanRepoDir() // looks for new dirs, checks existing repos for changes
me.found = new(gitpb.Repos)
me.current.ReloadCheck()
me.forge.SetConfigSave(true)
me.forge.ConfigSave()
log.Info("sleep 2")
time.Sleep(2 * time.Second)
printDone()
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
}
func buttonDisable() {
me.Disable()
me.release.box.Disable()

View File

@ -1,73 +0,0 @@
package main
import (
"go.wit.com/lib/gadgets"
"go.wit.com/lib/gui/repolist"
"go.wit.com/log"
"go.wit.com/gui"
)
type repoWindow struct {
win *gadgets.BasicWindow
box *gui.Node
View *repolist.RepoList
}
func (r *repoWindow) Hidden() bool {
return r.win.Hidden()
}
func (r *repoWindow) Show() {
r.win.Show()
}
func (r *repoWindow) Hide() {
r.win.Hide()
}
func (r *repoWindow) Disable() {
r.box.Disable()
}
func (r *repoWindow) Enable() {
r.box.Enable()
}
// you can only have one of these
func makeRepoView() *repoWindow {
if me.repos != nil {
return me.repos
}
r := new(repoWindow)
r.win = gadgets.RawBasicWindow("GUI repositories in ~/go/src/")
r.win.Make()
r.box = r.win.Box().NewBox("bw vbox", false)
r.win.Custom = func() {
log.Warn("GOT HERE: main() gadgets.NewBasicWindow() close")
log.Warn("Should I do something special here?")
}
// reposbox.SetExpand(false)
group1 := r.box.NewGroup("Run on all repos:")
hbox := group1.Box()
// hbox.Horizontal()
hbox.Vertical()
r.View = repolist.InitBox(me.forge, r.box)
r.View.Enable()
r.View.ScanRepositories()
/*
r.View = repolist.GuireleaserView(r.box)
showncount := r.View.MirrorShownCount()
box2.Append(showncount)
duration := r.View.MirrorScanDuration()
box2.Append(duration)
*/
return r
}

1
resources/README Normal file
View File

@ -0,0 +1 @@
* you can put toolkit .so binaries here

View File

@ -5,6 +5,7 @@ import (
"go.wit.com/dev/alexflint/arg"
"go.wit.com/gui"
"go.wit.com/lib/gadgets"
"go.wit.com/lib/gui/prep"
"go.wit.com/lib/protobuf/forgepb"
"go.wit.com/lib/protobuf/gitpb"
)
@ -12,16 +13,17 @@ import (
var me *autoType
type autoType struct {
pp *arg.Parser // for parsing the command line args. Yay to alexf lint!
myGui *gui.Node // the gui handle itself
releaseReasonS string // = "gocui dropdown select"
release releaseStruct // notsure
reposbox *gui.Node // notsure
reposgrid *gui.Node // notsure
reposgroup *gui.Node // notsure
current *gitpb.Repo // tracks the next repo to publish
found *gitpb.Repos // stores the list of repos to process things on
done []string // gopaths for repos already published
pp *arg.Parser // for parsing the command line args. Yay to alexf lint!
myGui *prep.GuiPrep // the gui handle itself
releaseReasonS string // = "gocui dropdown select"
release releaseStruct // notsure
reposbox *gui.Node // notsure
reposgrid *gui.Node // notsure
reposgroup *gui.Node // notsure
current *gitpb.Repo // tracks the next repo to publish
found *gitpb.Repos // stores the list of repos to process things on
done []string // gopaths for repos already published
reason map[*gitpb.Repo]string // the reason this package is going to be updated
// this is the repo we are starting in
// make sure it never changes so go.mod and go.sum are always there
@ -29,35 +31,10 @@ type autoType struct {
startRepo *gitpb.Repo
// guireleaser window
mainWindow *gui.Node
mainWindow *gadgets.BasicWindow
mainBox *gui.Node
// our view of the repositories
repos *repoWindow
// your customized repo preferences and settings
forge *forgepb.Forge
// #### autotypist Global Build Options
// what to change all the branches to
// so, as a developer, you can move all the repos
// to the 'devel' branch and then test a devel branch build
// then switch back to your 'username' branch and do a build there
// toMoveToBranch string
// displays the preferred names used for the repo tree state
// mainBranch *gadgets.BasicCombobox
// develBranch *gadgets.BasicCombobox
// userBranch *gadgets.BasicCombobox
// this button will regenerate everyones go.mod & go.sum
rerunGoMod *gui.Node
// if checked, will stop trying to os.Exec() things after failure
stopOnErrors *gui.Node
// button to attempt to autorebuild
autoRebuildButton *gui.Node
forge *forgepb.Forge // your customized repo preferences and settings
// checkbox for --dry-run
autoDryRun *gui.Node
@ -83,9 +60,3 @@ type autoType struct {
// show the time it took to do a scan
duration *gui.Node
}
/*
func (my *autoType) GoSrcPath() string {
return my.goSrcPwd.String()
}
*/