summaryrefslogtreecommitdiff
path: root/doRelease.go
blob: 2ff444f302d057090e9f508283c79ea6308968e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// This is a simple example
package main

import (
	"os"
	"strings"

	"go.wit.com/log"
)

func doRelease() bool {
	if release.releaseVersionB.String() != "release version "+release.version.String() {
		log.Warn("something went wrong with the release.version:", release.version.String())
		return false
	}
	if strings.HasPrefix(release.version.String(), "v") {
		log.Warn("everything is ok. version starts with v.", release.version.String())
	} else {
		log.Warn("version does not start with v.", release.version.String())
		return false
	}
	switch release.status.String() {
	case "PRIMATIVE":
		log.Warn("can do PRIMATIVE", release.version.String())
	case "GOOD":
		log.Warn("GOOD. lots of go.sum checks passed", release.version.String())
	case "manually chosen":
		log.Warn("attempting manual release", release.version.String())
	case "NOT READY":
		log.Warn("attempting to release. TODO: recheck go.sum here", release.version.String())
		log.Warn("Sleep 10")
		log.Sleep(10)
	case "UNRELEASED":
		log.Warn("attempting to release. TODO: dig deep on go.sum here", release.version.String())
		log.Warn("Sleep 10")
		log.Sleep(10)
	default:
		log.Warn("what is this?", release.version.String(), release.status.String())
		return false
	}

	if release.current.status.ReadOnly() {
		log.Info("sorry, it's read-only")
		return true
	}
	if release.current.status.CheckDirty() {
		log.Info("sorry, it's still dirty")
		return false
	}

	curName := release.current.status.GetCurrentBranchName()
	mName := release.current.status.GetMasterBranchName()
	if curName != mName {
		log.Info("\trepo is not working from main branch", curName, "!=", mName)
		return false
	}

	log.Info("\ttag and push", curName, release.version.String(), me.releaseReasonS)

	var all [][]string
	all = append(all, []string{"git", "add", "-f", "go.mod"})
	if release.current.status.CheckPrimativeGoMod() {
		// don't add go.sum here. TODO: check for go.sum file and fail
	} else {
		all = append(all, []string{"git", "add", "-f", "go.sum"})
	}
	all = append(all, []string{"git", "commit", "-m", me.releaseReasonS})
	all = append(all, []string{"git", "push"})
	all = append(all, []string{"git", "tag", "-m", me.releaseReasonS, release.version.String()})
	all = append(all, []string{"git", "push", "origin", release.version.String()})

	if doAll(release.current, all) {
		log.Info("EVERYTHING OK")

		gopath := release.current.String()
		cmd := []string{"go", "get", "-v", gopath + "@" + release.version.String()}
		log.Info("SHOULD RUN cmd HERE:", cmd)

		if release.guireleaser == nil {
			log.Info("CAN NOT SELF UPDATE HERE. cmd =", cmd)
			return false
		} else {
			os.Unsetenv("GO111MODULE")
			log.Info("TRYING TO SELF UPDATE HERE. cmd =", cmd)
			err, out := release.guireleaser.status.RunCmd(cmd)
			if gopath == "go.wit.com/apps/guireleaser" {
				// ignore errors on updating myself
				log.Info("IGNORE SELF UPDATE ERROR. cmd =", cmd)
				err = nil
			}
			if err == nil {
				log.Info("SELF UPDATE OK. out =", out)
				log.Info("SELF UPDATE WORKED")
				release.current.setGoSumStatus("RELEASED")

				release.current.status.UpdateCurrent()
				// repo.newScan()
				cbname := release.current.status.GetCurrentBranchName()
				cbversion := release.current.status.GetCurrentBranchVersion()
				lasttag := release.current.status.GetLastTagVersion()
				release.current.lastTag.SetLabel(lasttag)
				release.current.vLabel.SetLabel(cbname + " " + cbversion)

				// scan for new repo
				if findNextDirty("") {
					log.Info("findNextDirty() found something")
				} else {
					log.Info("findNextDirty() could not find anything")
					return false
				}
				release.current.status.CheckSafeGoSumRemake()
				release.current.status.MakeRedomod()
				if ok, _ := release.current.status.CheckGoSum(); ok {
					log.Info("repo has go.sum requirements that are clean")
					// release.current.setGoSumStatus("CLEAN")
					release.status.SetValue("GOOD")
					release.notes.SetValue("CheckGoSum() does not seem to lie")
					return true
				} else {
					return false
				}
			} else {
				log.Info("SELF UPDATE FAILED err =", err)
				log.Info("SELF UPDATE FAILED out =", out)
				return false
			}
		}
	}
	log.Info("doAll() failed")
	return false
}