compliles and does stuff

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2024-11-04 08:16:42 -06:00
parent d0e1372a6e
commit 9f7d034339
6 changed files with 294 additions and 112 deletions

View File

@ -40,3 +40,28 @@ redomod:
rm -f go.*
GO111MODULE= go mod init
GO111MODULE= go mod tidy
curl-help:
curl --silent http://localhost:9419/help
curl-setBranchesToMasterB:
curl --silent http://localhost:9419/setBranchesToMasterB
# report on the release
curl-findNext:
curl --silent http://localhost:9419/findNext
# report on the release
curl-list-release:
curl --silent http://localhost:9419/releaselist?readonly=true
#curl-doSingleRepo:
# curl --silent 'http://localhost:9419/doSingleRepo?repo=go.wit.com/gui&dryrun=false'
# only show repos that need to be merged to the master branch
curl-list-changed:
curl --silent http://localhost:9419/list?perfect=false
# include repos that you probably can't git push commits
curl-list-include-readonly:
curl --silent http://localhost:9419/list?readonly=true

11
argv.go
View File

@ -6,16 +6,17 @@ package main
this enables command line options from other packages like 'gui' and 'log'
*/
type args struct {
type argv struct {
Repo string `arg:"positional" help:"go import path"`
Increment bool `arg:"--increment" help:"auto increment"`
Release bool `arg:"--release" help:"do a release an exit"`
// Increment bool `arg:"--increment" help:"auto increment"`
// Release bool `arg:"--release" help:"do a release an exit"`
DryRun bool `arg:"--dry-run,env:DRYRUN" help:"don't actually do the release"`
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"`
}
func (a args) Description() string {
func (a argv) Description() string {
return `
Example usage:
guireleaser go.wit.com/apps/go-clone --increment --release --dry-run --reason "blerg"
@ -24,6 +25,6 @@ This will pull down the go sources and
the repositories in the go.sum file using git clone`
}
func (args) Version() string {
func (argv) Version() string {
return "guireleaser " + VERSION
}

73
doSingleRepo.go Normal file
View File

@ -0,0 +1,73 @@
package main
import (
"os"
"go.wit.com/lib/gui/repolist"
"go.wit.com/log"
)
func doSingleRepo(myRepoName string) {
// the repo from the command line
var myrepo *repolist.RepoRow
// find myself. the guireleaser directory is used as a working scratchpad
// for running go commands that can mess up the go.* files
// for _, repo := range me.repos.View.AllRepos() {
myrepo = me.repos.View.FindRepoByName(myRepoName)
me.mainWindow.Disable()
defer me.mainWindow.Enable()
if myrepo == nil {
log.Info("could not find", myargs.Repo)
}
log.Info("only going to do repo:", myrepo.GoPath())
tmp := myargs.Reason
if tmp == "" {
tmp = os.Getenv("GUIRELEASE_REASON")
}
if tmp == "" {
tmp = "made by guireleaser"
}
// increment all the versions
for _, repo := range me.repos.View.AllRepos() {
if whitelist(repo.GoPath()) {
continue
}
if repo.ReadOnly() {
continue
}
lasttag := repo.Status.LastTag()
if repo.Status.GetCurrentVersion() == lasttag {
log.Info("skipping unchanged repo", repo.Status.GoPath())
repo.Status.SetTargetVersion(lasttag)
continue
}
repo.Status.IncrementRevisionVersion("go-clone")
}
// rescan all the repos
me.repos.View.ScanRepositories()
myrepo.Status.MakeRedomod()
myrepo.Status.IncrementRevisionVersion(tmp)
_, err := me.repos.View.CheckValidGoSum(myrepo)
if err != nil {
log.Info("go mod tidy not ok", err)
return
}
if !checkValidGoSum(myrepo) {
log.Info("go.sum checks failed")
os.Exit(0)
}
setCurrentRepo(myrepo, "should be good to release", "pretty sure")
log.Info("DO THE RELEASE HERE")
log.Info("going to release", myrepo.GoPath(), "as version", myrepo.Status.GetTargetVersion())
if myargs.DryRun {
log.Info("--dry-run == true")
} else {
log.Info("--dry-run == true")
// doRelease()
}
}

124
http.go Normal file
View File

@ -0,0 +1,124 @@
package main
import (
"fmt"
"net/http"
"os"
"strings"
"go.wit.com/lib/gui/gowit"
"go.wit.com/log"
)
// remove '?' part and trailing '/'
func cleanURL(url string) string {
url = "/" + strings.Trim(url, "/")
return url
}
// send stuff to the socket and stdout
func msg(w http.ResponseWriter, s string) {
log.Info(s)
fmt.Fprintln(w, s)
}
func okHandler(w http.ResponseWriter, r *http.Request) {
var route string
route = cleanURL(r.URL.Path)
if route == "/help" {
msg(w, "list/ list modified repos")
msg(w, "list?readonly=true shows every repo")
msg(w, "")
msg(w, "setBranchesToMasterB maybe this sets everything to master?")
msg(w, "doSingleRepo?repo=go.wit.com/gui attempts to release gui")
msg(w, "")
msg(w, "setVersion?repo=go.wit.com/gui?target=0.2 attempts to set the target version to 0.2")
msg(w, "")
return
}
if route == "/release" {
// simpleRelease(w, r)
return
}
if route == "/gitpull" {
return
}
if route == "/list" {
readonly := r.URL.Query().Get("readonly")
onlydirty := r.URL.Query().Get("onlydirty")
perfect := r.URL.Query().Get("perfect")
me.repos.View.PrintReport(w, readonly, onlydirty, perfect)
return
}
if route == "/findNext" {
me.Disable()
defer me.Enable()
if findNext() {
msg(w, "findNext() found a repo")
} else {
msg(w, "findNext() did not find a repo. You might be finished?")
}
msg(w, "repo: " + me.release.repo.String())
msg(w, "name: " + me.release.version.String())
msg(w, "notes: " + me.release.notes.String())
msg(w, "status: " + me.release.status.String())
return
}
if route == "/releaselist" {
readonly := r.URL.Query().Get("readonly")
perfect := r.URL.Query().Get("perfect")
me.repos.View.PrintReleaseReport(w, readonly, perfect)
return
}
if route == "/goweblist" {
gowit.DumpVersions(me.repos.View)
return
}
if route == "/setBranchesToMasterB" {
msg(w, "set all branches to master")
me.Disable()
defer me.Enable()
if setAllBranchesToMaster() {
// if it succeeds, disable this button
me.setBranchesToMasterB.Disable()
}
return
}
if route == "/doSingleRepo" {
reponame := r.URL.Query().Get("repo")
msg(w, "doSingleRepo: "+reponame)
doSingleRepo(reponame)
}
if route == "/quit" {
os.Exit(0)
return
}
log.Warn("BAD URL =", route)
fmt.Fprintln(w, "BAD URL =", route)
}
// starts and sits waiting for HTTP requests
func startHTTP() {
http.HandleFunc("/", okHandler)
p := fmt.Sprintf(":%d", myargs.Port)
log.Println("Running on port", p)
err := http.ListenAndServe(p, nil)
if err != nil {
log.Println("Error starting server:", err)
}
}

12
main.go
View File

@ -7,13 +7,12 @@ import (
"go.wit.com/dev/alexflint/arg"
"go.wit.com/gui"
"go.wit.com/lib/gui/gowit"
"go.wit.com/lib/gui/repolist"
"go.wit.com/lib/gui/shell"
"go.wit.com/log"
)
var VERSION string
var myargs args
var myargs argv
func main() {
me = new(autoType)
@ -41,6 +40,9 @@ func main() {
me.mainWindow = me.myGui.NewWindow("GUI release manager " + VERSION)
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
// up things later
// if you have a go.work file, you must delete it
@ -99,7 +101,7 @@ func main() {
me.repos.View.ScanRepositories()
// the repo from the command line
var myrepo *repolist.RepoRow
// var myrepo *repolist.RepoRow
// find myself. the guireleaser directory is used as a working scratchpad
// for running go commands that can mess up the go.* files
@ -109,11 +111,14 @@ func main() {
me.release.guireleaser = repo
}
}
/*
if repo.GoPath() == myargs.Repo {
myrepo = repo
}
*/
}
/*
if myargs.Repo != "" {
me.mainWindow.Hide()
if myrepo == nil {
@ -169,6 +174,7 @@ func main() {
}
os.Exit(0)
}
*/
if me.release.guireleaser == nil {
log.Info("Can not release if guireleaser was not found")

View File

@ -1,47 +0,0 @@
// This is a simple example
package main
/*
func scanGoSum() {
for _, repo := range me.repos.View.AllRepos() {
if repo.GoPath() == "go.wit.com/apps/guireleaser" {
if me.release.guireleaser == nil {
me.release.guireleaser = repo
}
}
latestversion := repo.Status.GetLastTagVersion()
if repo.GoState() == "BAD" {
continue
}
if repo.GoState() == "DIRTY" {
continue
}
if repo.Status.IsPrimitive() {
log.Info("PRIMITIVE repo:", latestversion, repo.GoPath())
repo.SetGoState("PRIMITIVE")
continue
}
if repo.CheckDirty() {
log.Info("dirty repo:", latestversion, repo.GoPath())
log.Info("dirty repo.getGoSumStatus =", repo.GoState())
repo.SetGoState("DIRTY")
// me.release.repo.SetValue(repo.status.String())
// me.release.status.SetValue("dirty")
// me.release.notes.SetValue("You must commit your changes\nbefore you can continue")
// me.current = repo
// me.release.openrepo.Enable()
continue
}
status := repo.State()
if status == "PERFECT" {
continue
} else {
repo.NewScan()
}
log.Info("repo:", latestversion, status, repo.GoPath())
}
log.Info("scanGoSum() did everything, not sure what to do next")
}
*/