summaryrefslogtreecommitdiff
path: root/unreleaseWindow.go
blob: e5727f742c5a98a53c04b0cb16931b29db5294c7 (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// This is a simple example
package main

import (
	"strings"

	"go.wit.com/gui"
	"go.wit.com/log"
)

func findUnreleased() bool {
	for _, repo := range me.allrepos {
		if whitelist(repo.String()) {
			log.Info("skipping whitelist", repo.String())
			continue
		}
		setCurrentRepo(repo, "rewind this?", "not sure")

		if repo.lookToUnwind() {
			log.Info("found something to unwind:", repo.String())
			if setCurrentRepo(repo, "rewind this", "very sure") {
				return true
			}
			return false
		}
	}
	return false
}

func unwindWhitelist() {
	for _, repo := range me.allrepos {
		if strings.HasPrefix(repo.String(), "go.wit.com/dev") {
			release.whitelist[repo.String()] = repo
			repo.setGoSumStatus("WHITELIST")
		}
	}
}

func createUnreleaseBox(box *gui.Node) {
	group := release.box.NewGroup("undo and redo things")

	group.NewButton("whitelist go.wit.com/dev", func() {
		me.Disable()
		defer me.Enable()
		unwindWhitelist()
	})
	group.NewButton("find the unreleased", func() {
		me.Disable()
		defer me.Enable()
		unwindWhitelist()
		findUnreleased()
	})
	release.unreleaseB = group.NewButton("re-release", func() {
		// var count int = 0
		me.Disable()
		unwindWhitelist()
		if rerelease() {
			log.Info("good to re-release another one")
		} else {
			log.Info("loop(3) failed")
			return
		}
		me.Enable()
	})
	group.NewButton("loop(10)", func() {
		me.Disable()
		unwindWhitelist()
		for n := 0; n <= 10; n++ {
			if rerelease() {
				log.Info("good to re-release another one")
			} else {
				log.Info("loop() failed", n)
				return
			}
		}
		log.Info("loop(10) worked")
		me.Enable()
	})
}

func doAll(r *repo, all [][]string) bool {
	for _, cmd := range all {
		log.Info("doAll() RUNNING: cmd =", cmd)
		err, out := r.status.RunCmd(cmd)
		log.Info("doAll() err =", err)
		log.Info("doAll() out =", out)
		if err != nil {
			return false
		}
	}
	return true
}
func rerelease() bool {
	if release.unreleaseB.String() != "un-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
	}

	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("\treset to devel", curName, release.version.String(), me.releaseReasonS)

	// git checkout devel
	// git branch -D master
	// git branch master
	// git checkout master
	// git push --set-upstream --force origin master

	var all [][]string
	all = append(all, []string{"git", "checkout", "devel"})
	all = append(all, []string{"git", "branch", "-D", mName})
	all = append(all, []string{"git", "branch", mName})
	all = append(all, []string{"git", "checkout", mName})
	all = append(all, []string{"git", "push", "--set-upstream", "--force", "origin", mName})

	all = append(all, []string{"git", "tag", "--delete", release.version.String()})
	all = append(all, []string{"git", "push", "--delete", "origin", release.version.String()})
	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. RERELEASED", release.current.String())
		if findUnreleased() {
			log.Info("GOOD TO RUN ANOTHER DAY ON:", release.current.String())
		}
	} else {
		log.Info("SOMETHING FAILED")
		return false
	}
	return true
}