guireleaser/doRelease.go

204 lines
6.1 KiB
Go
Raw Normal View History

// This is a simple example
package main
import (
"os"
"path/filepath"
"strings"
2024-11-08 06:45:12 -06:00
"github.com/go-cmd/cmd"
2024-02-20 06:53:07 -06:00
"go.wit.com/lib/gui/repolist"
"go.wit.com/lib/gui/shell"
"go.wit.com/log"
)
2024-11-07 05:15:54 -06:00
func doRelease() bool {
log.Info("doRelease() on", me.current.Name())
// double check release version logic
if me.release.releaseVersionB.String() != "release version "+me.release.version.String() {
log.Warn("something went wrong with the release.version:", me.release.version.String())
return false
}
if strings.HasPrefix(me.release.version.String(), "v") {
log.Warn("everything is ok. version starts with v.", me.release.version.String())
} else {
log.Warn("version does not start with v.", me.release.version.String())
return false
}
curName := me.current.Status.GetCurrentBranchName()
mName := me.current.Status.GetMasterBranchName()
if curName != mName {
log.Info("\trepo is not working from main branch", curName, "!=", mName)
return false
}
if !checkValidGoSum(me.current) {
2024-02-20 06:53:07 -06:00
return false
}
log.Info("\ttag and push", curName, me.release.version.String(), me.releaseReasonS)
var all [][]string
all = append(all, []string{"git", "add", "-f", "go.mod"})
if me.current.Status.IsPrimitive() {
// don't add go.sum here. TODO: check for go.sum file and fail
} else {
all = append(all, []string{"git", "add", "-f", "go.sum"})
}
if ok, compiled, err := me.current.Status.IsProtobuf(); ok {
log.Info("\tIsProtobuf() == true")
if err != nil {
log.Info("\tERROR: There are protobuf files, but they are not compiled")
log.Info("\tERROR: can not continue")
os.Exit(-1)
}
log.Info("\tshould add the protobuf files here")
log.Info("\tcompiled files found:", compiled)
for _, s := range compiled {
log.Info("\tcompiled file found:", s)
all = append(all, []string{"git", "add", "-f", s})
}
} else {
log.Info("\tIsProtobuf() == false")
}
all = append(all, []string{"git", "commit", "-m", me.releaseReasonS})
all = append(all, []string{"git", "push"})
all = append(all, []string{"git", "tag", "-m", me.releaseReasonS, me.release.version.String()})
all = append(all, []string{"git", "push", "origin", me.release.version.String()})
if !me.current.Status.DoAll(all) {
log.Info("failed to make new release", me.release.version.String())
return false
}
log.Info("RELEASE OK")
// 'publish' the version to the golang package versioning system
if !doPublishVersion() {
log.Info("PUBLISH FAILED")
return false
}
log.Info("PUBLISH OK")
2024-02-29 21:57:13 -06:00
// me.current.SetGoState("RELEASED")
// unwind and re-tag. Now that the go.mod and go.sum are published, revert
// to the development branch
if !me.current.Status.RevertMasterToDevel() {
log.Info("Revert Failed")
return false
}
// update tag
var retag [][]string
retag = append(retag, []string{"git", "tag", "--delete", me.release.version.String()})
retag = append(retag, []string{"git", "push", "--delete", "origin", me.release.version.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.Status.DoAll(retag) {
log.Info("retag failed")
return false
}
log.Info("EVERYTHING OK. RERELEASED", me.current.Name())
// update the values in the GUI
me.current.NewScan()
// attempt to find another repo to release
if !doReleaseFindNext() {
log.Info("doReleaseFindNext() could not find a new")
return false
}
log.Info("GOOD TO RUN ANOTHER DAY ON:", me.current.Name())
return true
}
2024-02-23 09:01:58 -06:00
func checkValidGoSum(repo *repolist.RepoRow) bool {
2024-02-20 06:53:07 -06:00
ok, err := me.repos.View.CheckValidGoSum(repo)
if err != nil {
log.Info("go mod tidy not ok", err)
2024-02-20 06:53:07 -06:00
return false
}
if ok {
log.Info("repo has go.sum requirements that are clean")
// me.current.setGoSumStatus("CLEAN")
me.release.status.SetValue("GOOD")
me.release.notes.SetValue("CheckValidGoSum() does not seem to lie")
2024-02-20 06:53:07 -06:00
return true
}
me.release.notes.SetValue("CheckValidGoSum() failed")
2024-02-20 06:53:07 -06:00
return false
}
// try to figure out if there is another package to update
func doReleaseFindNext() bool {
// scan for new repo
2024-02-20 20:42:54 -06:00
if findNext() {
log.Info("findNext() found something")
} else {
2024-02-20 20:42:54 -06:00
log.Info("findNext() could not find anything")
return false
}
if checkValidGoSum(me.current) {
return true
}
return false
}
// this pulls the new tag from the golang package repository
// to insert the new version
func doPublishVersion() bool {
gopath := me.current.GoPath()
2024-11-08 06:45:12 -06:00
docmd := []string{"go", "get", "-v", gopath + "@" + me.release.version.String()}
log.Info("SHOULD RUN cmd HERE:", docmd)
// right now, you can't publish this because the go.* files in this project are screwed up
if me.release.guireleaser == nil {
2024-11-08 06:45:12 -06:00
log.Info("CAN NOT SELF UPDATE HERE. cmd =", docmd)
return false
}
homeDir, _ := os.UserHomeDir()
gosum := filepath.Join(homeDir, "go/src/go.wit.com/apps/guireleaser/go.sum")
if !shell.Exists(gosum) {
log.Info("go.sum must exist here")
me.release.guireleaser.Status.MakeRedomod()
}
2024-02-23 11:31:07 -06:00
if me.current.Status.IsPrivate() {
// do not self update private repos
2024-11-08 06:45:12 -06:00
log.Info("This is a private repo and can not be self checked")
return true
}
// try to pull from google
var result cmd.Status
if gopath == "go.wit.com/apps/guireleaser" {
log.Info("CAN NOT SELF UPDATE. cmd =", docmd)
log.Info("go get must be run from somewhere else other than guireleaser")
result = shell.PathRun("/home/jcarr/go/src/go.wit.com/apps/autotypist", docmd)
2024-02-23 11:31:07 -06:00
} else {
2024-11-08 06:45:12 -06:00
// publish go.mod & go.sum for use with go
os.Unsetenv("GO111MODULE")
log.Info("TRYING TO SELF UPDATE HERE. cmd =", docmd)
result = me.release.guireleaser.Status.Run(docmd)
}
if result.Error != nil {
log.Info("SELF UPDATE FAILED. error =", result.Error)
log.Info("SELF UPDATE FAILED. exit =", result.Exit)
log.Info("SELF UPDATE FAILED. out =", result.Stdout)
log.Info("SELF UPDATE FAILED")
return false
}
2024-11-08 06:45:12 -06:00
if result.Exit != 0 {
log.Info("SELF UPDATE FAILED. error =", result.Error)
log.Info("SELF UPDATE FAILED. exit =", result.Exit)
log.Info("SELF UPDATE FAILED. out =", result.Stdout)
log.Info("SELF UPDATE FAILED")
return false
}
2024-11-08 06:45:12 -06:00
log.Info("SELF UPDATE OK. out =", result.Stdout)
log.Info("SELF UPDATE WORKED")
return true
}