compliles and does stuff
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
d0e1372a6e
commit
9f7d034339
25
Makefile
25
Makefile
|
@ -40,3 +40,28 @@ redomod:
|
||||||
rm -f go.*
|
rm -f go.*
|
||||||
GO111MODULE= go mod init
|
GO111MODULE= go mod init
|
||||||
GO111MODULE= go mod tidy
|
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
|
||||||
|
|
13
argv.go
13
argv.go
|
@ -6,16 +6,17 @@ package main
|
||||||
this enables command line options from other packages like 'gui' and 'log'
|
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"`
|
Repo string `arg:"positional" help:"go import path"`
|
||||||
Increment bool `arg:"--increment" help:"auto increment"`
|
// Increment bool `arg:"--increment" help:"auto increment"`
|
||||||
Release bool `arg:"--release" help:"do a release an exit"`
|
// Release bool `arg:"--release" help:"do a release an exit"`
|
||||||
DryRun bool `arg:"--dry-run,env:DRYRUN" help:"don't actually do the release"`
|
DryRun bool `arg:"--dry-run,env:DRYRUN" help:"don't actually do the release"`
|
||||||
Reason string `arg:"--reason" help:"tag message"`
|
Reason string `arg:"--reason" help:"tag message"`
|
||||||
DumpVersions bool `arg:"--dump-versions" help:"dump the versions file for go.wit.com"`
|
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 `
|
return `
|
||||||
Example usage:
|
Example usage:
|
||||||
guireleaser go.wit.com/apps/go-clone --increment --release --dry-run --reason "blerg"
|
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`
|
the repositories in the go.sum file using git clone`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (args) Version() string {
|
func (argv) Version() string {
|
||||||
return "guireleaser " + VERSION
|
return "guireleaser " + VERSION
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
}
|
||||||
|
}
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
124
main.go
124
main.go
|
@ -7,13 +7,12 @@ import (
|
||||||
"go.wit.com/dev/alexflint/arg"
|
"go.wit.com/dev/alexflint/arg"
|
||||||
"go.wit.com/gui"
|
"go.wit.com/gui"
|
||||||
"go.wit.com/lib/gui/gowit"
|
"go.wit.com/lib/gui/gowit"
|
||||||
"go.wit.com/lib/gui/repolist"
|
|
||||||
"go.wit.com/lib/gui/shell"
|
"go.wit.com/lib/gui/shell"
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
var VERSION string
|
var VERSION string
|
||||||
var myargs args
|
var myargs argv
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
me = new(autoType)
|
me = new(autoType)
|
||||||
|
@ -41,6 +40,9 @@ func main() {
|
||||||
me.mainWindow = me.myGui.NewWindow("GUI release manager " + VERSION)
|
me.mainWindow = me.myGui.NewWindow("GUI release manager " + VERSION)
|
||||||
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
|
||||||
|
@ -99,7 +101,7 @@ func main() {
|
||||||
me.repos.View.ScanRepositories()
|
me.repos.View.ScanRepositories()
|
||||||
|
|
||||||
// the repo from the command line
|
// 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
|
// find myself. the guireleaser directory is used as a working scratchpad
|
||||||
// for running go commands that can mess up the go.* files
|
// for running go commands that can mess up the go.* files
|
||||||
|
@ -109,66 +111,70 @@ func main() {
|
||||||
me.release.guireleaser = repo
|
me.release.guireleaser = repo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if repo.GoPath() == myargs.Repo {
|
/*
|
||||||
myrepo = repo
|
if repo.GoPath() == myargs.Repo {
|
||||||
}
|
myrepo = repo
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if myargs.Repo != "" {
|
/*
|
||||||
me.mainWindow.Hide()
|
if myargs.Repo != "" {
|
||||||
if myrepo == nil {
|
me.mainWindow.Hide()
|
||||||
log.Info("could not find", myargs.Repo)
|
if myrepo == nil {
|
||||||
|
log.Info("could not find", myargs.Repo)
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
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 {
|
||||||
|
doRelease()
|
||||||
|
}
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
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 {
|
|
||||||
doRelease()
|
|
||||||
}
|
|
||||||
os.Exit(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
if me.release.guireleaser == nil {
|
if me.release.guireleaser == nil {
|
||||||
log.Info("Can not release if guireleaser was not found")
|
log.Info("Can not release if guireleaser was not found")
|
||||||
|
|
47
scanGoSum.go
47
scanGoSum.go
|
@ -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")
|
|
||||||
}
|
|
||||||
*/
|
|
Loading…
Reference in New Issue