-
Notifications
You must be signed in to change notification settings - Fork 1
/
actionBump.go
154 lines (124 loc) · 3.21 KB
/
actionBump.go
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
149
150
151
152
153
154
package plasmactlbump
import (
"errors"
"fmt"
"path/filepath"
"github.com/launchrctl/launchr"
"github.com/skilld-labs/plasmactl-bump/v2/pkg/repository"
"github.com/skilld-labs/plasmactl-bump/v2/pkg/sync"
)
var unversionedFiles = map[string]struct{}{
"README.md": {},
"README.svg": {},
}
// PromptError prints an error.
func PromptError(err error) {
if err == nil {
return
}
fmt.Printf("\x1b[31;1m%s\x1b[0m\n", fmt.Sprintf("error: %s\n", err))
}
// BumpAction is a launchr.Service providing bumper functionality.
type BumpAction interface {
launchr.Service
Bump(last bool) error
}
type bumpService struct {
cfg launchr.Config
}
func newBumpService(cfg launchr.Config) BumpAction {
return &bumpService{
cfg: cfg,
}
}
// ServiceInfo implements launchr.Service interface.
func (k *bumpService) ServiceInfo() launchr.ServiceInfo {
return launchr.ServiceInfo{}
}
func printMemo() {
launchr.Log().Info("List of non-versioned files:")
for k := range unversionedFiles {
launchr.Log().Info(k)
}
}
func (k *bumpService) Bump(last bool) error {
launchr.Term().Println("Bump updated versions...")
printMemo()
bumper, err := repository.NewBumper()
if err != nil {
return err
}
if bumper.IsOwnCommit() {
return errors.New("skipping bump, as the latest commit is already by the bumper tool")
}
files, err := bumper.GetModifiedFiles(last)
if err != nil {
return err
}
resources := k.collectResources(files)
if len(resources) == 0 {
return errors.New("no resources to update")
}
version, err := bumper.GetLastCommitShortHash()
if err != nil {
launchr.Log().Error("Can't retrieve commit hash")
return err
}
err = k.updateResources(resources, version)
if err != nil {
launchr.Log().Error("There is an error during resources update")
return err
}
return bumper.Commit()
}
func (k *bumpService) collectResources(files []string) map[string]*sync.Resource {
// @TODO re-use inventory.GetChangedResources()
resources := make(map[string]*sync.Resource)
for _, path := range files {
if !isVersionableFile(path) {
continue
}
platform, kind, role, err := sync.ProcessResourcePath(path)
if err != nil {
continue
}
if platform == "" || kind == "" || role == "" {
continue
}
if sync.IsUpdatableKind(kind) {
resource := sync.NewResource(sync.PrepareMachineResourceName(platform, kind, role), "")
if _, ok := resources[resource.GetName()]; !ok {
// Check is meta/plasma.yaml exists for resource
if !resource.IsValidResource() {
continue
}
launchr.Term().Printfln("Processing resource %s", resource.GetName())
resources[resource.GetName()] = resource
}
}
}
return resources
}
func (k *bumpService) updateResources(resources map[string]*sync.Resource, version string) error {
if len(resources) == 0 {
return nil
}
launchr.Term().Printf("Updating versions:\n")
for _, r := range resources {
currentVersion, err := r.GetVersion()
if err != nil {
return err
}
launchr.Term().Printfln("- %s from %s to %s", r.GetName(), currentVersion, version)
err = r.UpdateVersion(version)
if err != nil {
return err
}
}
return nil
}
func isVersionableFile(path string) bool {
name := filepath.Base(path)
_, ok := unversionedFiles[name]
return !ok
}