Skip to content

Commit df23d4d

Browse files
chore: sync all codefresh code changes into v3.1.5 (#439)
* chore: sync all codefresh code changes into v3.0.2 without event-reporter related changes Signed-off-by: oleksandr-codefresh <oleksandr.saulyak@octopus.com> * address linter issues reported --------- Signed-off-by: oleksandr-codefresh <oleksandr.saulyak@octopus.com> Co-authored-by: oleksandr-codefresh <oleksandr.saulyak@octopus.com>
1 parent b325481 commit df23d4d

File tree

13 files changed

+874
-382
lines changed

13 files changed

+874
-382
lines changed

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,9 @@ start-local: mod-vendor-local dep-ui-local cli-local
542542
run:
543543
bash ./hack/goreman-start.sh
544544

545+
.PHONY: cf-release
546+
cf-release:
547+
go run ./hack/release
545548

546549
# Runs pre-commit validation with the virtualized toolchain
547550
.PHONY: pre-commit

acr_controller/controller/controller.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,9 @@ type ACRController interface {
2424
type applicationChangeRevisionController struct {
2525
appBroadcaster Broadcaster
2626
acrService service.ACRService
27-
useAnnotations bool
2827
}
2928

30-
func NewApplicationChangeRevisionController(appInformer cache.SharedIndexInformer, applicationServiceClient appclient.ApplicationClient, applicationClientset appclientset.Interface, useAnnotations bool) ACRController {
29+
func NewApplicationChangeRevisionController(appInformer cache.SharedIndexInformer, applicationServiceClient appclient.ApplicationClient, applicationClientset appclientset.Interface) ACRController {
3130
appBroadcaster := NewBroadcaster()
3231
_, err := appInformer.AddEventHandler(appBroadcaster)
3332
if err != nil {
@@ -36,7 +35,6 @@ func NewApplicationChangeRevisionController(appInformer cache.SharedIndexInforme
3635
return &applicationChangeRevisionController{
3736
appBroadcaster: appBroadcaster,
3837
acrService: service.NewACRService(applicationClientset, applicationServiceClient),
39-
useAnnotations: useAnnotations,
4038
}
4139
}
4240

@@ -48,7 +46,7 @@ func (c *applicationChangeRevisionController) Run(ctx context.Context) {
4846
return nil // ignore this event
4947
}
5048

51-
return c.acrService.ChangeRevision(ctx, &a, c.useAnnotations)
49+
return c.acrService.ChangeRevision(ctx, &a)
5250
}
5351

5452
// TODO: move to abstraction

acr_controller/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func (a *ACRServer) Init(ctx context.Context) {
9797
}
9898

9999
func (a *ACRServer) RunController(ctx context.Context) {
100-
controller := acr_controller.NewApplicationChangeRevisionController(a.appInformer, a.ApplicationServiceClient, a.applicationClientset, !a.DisableAnnotations)
100+
controller := acr_controller.NewApplicationChangeRevisionController(a.appInformer, a.ApplicationServiceClient, a.applicationClientset)
101101
go controller.Run(ctx)
102102
}
103103

acr_controller/service/acr_service.go

Lines changed: 34 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package service
33
import (
44
"context"
55
"encoding/json"
6-
"fmt"
76
"sync"
87

98
log "github.com/sirupsen/logrus"
@@ -25,7 +24,7 @@ const (
2524
)
2625

2726
type ACRService interface {
28-
ChangeRevision(ctx context.Context, application *application.Application, useAnnotations bool) error
27+
ChangeRevision(ctx context.Context, application *application.Application) error
2928
}
3029

3130
type acrService struct {
@@ -63,7 +62,7 @@ func getChangeRevision(app *application.Application) string {
6362
return ""
6463
}
6564

66-
func (c *acrService) ChangeRevision(ctx context.Context, a *application.Application, useAnnotations bool) error {
65+
func (c *acrService) ChangeRevision(ctx context.Context, a *application.Application) error {
6766
c.lock.Lock()
6867
defer c.lock.Unlock()
6968

@@ -81,108 +80,36 @@ func (c *acrService) ChangeRevision(ctx context.Context, a *application.Applicat
8180
return nil
8281
}
8382

84-
currentRevision, previousRevision := c.getRevisions(ctx, a)
85-
if currentRevision == "" {
86-
c.logger.Infof("Got empty current revision for application %s, is it an unsupported multisource or helm repo based application?", app.Name)
87-
return nil
88-
}
89-
revision, err := c.calculateRevision(ctx, app, currentRevision, previousRevision)
83+
revision, err := c.calculateRevision(ctx, app)
9084
if err != nil {
9185
return err
9286
}
9387

94-
var revisions []string
9588
if revision == nil || *revision == "" {
9689
c.logger.Infof("Revision for application %s is empty", app.Name)
97-
} else {
98-
c.logger.Infof("Change revision for application %s is %s", app.Name, *revision)
99-
revisions = []string{*revision}
90+
return nil
10091
}
10192

93+
c.logger.Infof("Change revision for application %s is %s", app.Name, *revision)
94+
10295
app, err = c.applicationClientset.ArgoprojV1alpha1().Applications(app.Namespace).Get(ctx, app.Name, metav1.GetOptions{})
10396
if err != nil {
10497
return err
10598
}
10699

107-
patchMap := make(map[string]any, 2)
108-
109-
if len(revisions) > 0 {
110-
if app.Status.OperationState != nil && app.Status.OperationState.Operation.Sync != nil {
111-
c.logger.Infof("Patch operation status for application %s", app.Name)
112-
patchMap = c.patchOperationSyncResultWithChangeRevision(revisions)
113-
} else {
114-
c.logger.Infof("Patch operation for application %s", app.Name)
115-
patchMap = c.patchOperationWithChangeRevision(revisions)
116-
}
117-
}
118-
if useAnnotations {
119-
err = c.addAnnotationPatch(patchMap, app, *revision, revisions, currentRevision, []string{currentRevision})
120-
if err != nil {
121-
return err
122-
}
123-
}
124-
if len(patchMap) > 0 {
125-
c.logger.Infof("Patching resource: %v", patchMap)
126-
patch, err := json.Marshal(patchMap)
127-
if err != nil {
128-
return err
129-
}
130-
_, err = c.applicationClientset.ArgoprojV1alpha1().Applications(a.Namespace).Patch(ctx, a.Name, types.MergePatchType, patch, metav1.PatchOptions{})
131-
return err
132-
}
133-
c.logger.Infof("No patch needed")
134-
return nil
135-
}
136-
137-
func addPatchIfNeeded(annotations map[string]string, currentAnnotations map[string]string, key string, val string) {
138-
currentVal, ok := currentAnnotations[key]
139-
if !ok || currentVal != val {
140-
annotations[key] = val
141-
}
142-
}
143-
144-
func (c *acrService) addAnnotationPatch(m map[string]any,
145-
a *application.Application,
146-
changeRevision string,
147-
changeRevisions []string,
148-
gitRevision string,
149-
gitRevisions []string,
150-
) error {
151-
c.logger.Infof("annotating application '%s', changeRevision=%s, changeRevisions=%v, gitRevision=%s, gitRevisions=%v", a.Name, changeRevision, changeRevisions, gitRevision, gitRevisions)
152-
annotations := map[string]string{}
153-
currentAnnotations := a.Annotations
100+
revisions := []string{*revision}
154101

155-
if changeRevision != "" {
156-
addPatchIfNeeded(annotations, currentAnnotations, CHANGE_REVISION_ANN, changeRevision)
157-
}
158-
if len(changeRevisions) > 0 {
159-
changeRevisionsJSON, err := json.Marshal(changeRevisions)
160-
if err != nil {
161-
return fmt.Errorf("failed to marshall changeRevisions %v: %w", changeRevisions, err)
162-
}
163-
addPatchIfNeeded(annotations, currentAnnotations, CHANGE_REVISIONS_ANN, string(changeRevisionsJSON))
164-
}
165-
if gitRevision != "" {
166-
addPatchIfNeeded(annotations, currentAnnotations, GIT_REVISION_ANN, gitRevision)
167-
}
168-
if len(gitRevisions) > 0 {
169-
gitRevisionsJSON, err := json.Marshal(gitRevisions)
170-
if err != nil {
171-
return fmt.Errorf("failed to marshall gitRevisions %v: %w", gitRevisions, err)
172-
}
173-
addPatchIfNeeded(annotations, currentAnnotations, GIT_REVISIONS_ANN, string(gitRevisionsJSON))
102+
if app.Status.OperationState != nil && app.Status.OperationState.Operation.Sync != nil {
103+
c.logger.Infof("Patch operation status for application %s", app.Name)
104+
return c.patchOperationSyncResultWithChangeRevision(ctx, app, revisions)
174105
}
175106

176-
if len(annotations) == 0 {
177-
c.logger.Info("no need to add annotations")
178-
} else {
179-
c.logger.Infof("added annotations to application %s patch: %v", a.Name, annotations)
180-
m["metadata"] = map[string]any{"annotations": annotations}
181-
}
182-
return nil
107+
c.logger.Infof("Patch operation for application %s", app.Name)
108+
return c.patchOperationWithChangeRevision(ctx, app, revisions)
183109
}
184110

185-
func (c *acrService) calculateRevision(ctx context.Context, a *application.Application, currentRevision string, previousRevision string) (*string, error) {
111+
func (c *acrService) calculateRevision(ctx context.Context, a *application.Application) (*string, error) {
112+
currentRevision, previousRevision := c.getRevisions(ctx, a)
186113
c.logger.Infof("Calculate revision for application '%s', current revision '%s', previous revision '%s'", a.Name, currentRevision, previousRevision)
187114
changeRevisionResult, err := c.applicationServiceClient.GetChangeRevision(ctx, &appclient.ChangeRevisionRequest{
188115
AppName: ptr.To(a.GetName()),
@@ -196,28 +123,33 @@ func (c *acrService) calculateRevision(ctx context.Context, a *application.Appli
196123
return changeRevisionResult.Revision, nil
197124
}
198125

199-
func (c *acrService) patchOperationWithChangeRevision(revisions []string) map[string]any {
126+
func (c *acrService) patchOperationWithChangeRevision(ctx context.Context, a *application.Application, revisions []string) error {
200127
if len(revisions) == 1 {
201-
return map[string]any{
128+
patch, _ := json.Marshal(map[string]any{
202129
"operation": map[string]any{
203130
"sync": map[string]any{
204131
"changeRevision": revisions[0],
205132
},
206133
},
207-
}
134+
})
135+
_, err := c.applicationClientset.ArgoprojV1alpha1().Applications(a.Namespace).Patch(ctx, a.Name, types.MergePatchType, patch, metav1.PatchOptions{})
136+
return err
208137
}
209-
return map[string]any{
138+
139+
patch, _ := json.Marshal(map[string]any{
210140
"operation": map[string]any{
211141
"sync": map[string]any{
212142
"changeRevisions": revisions,
213143
},
214144
},
215-
}
145+
})
146+
_, err := c.applicationClientset.ArgoprojV1alpha1().Applications(a.Namespace).Patch(ctx, a.Name, types.MergePatchType, patch, metav1.PatchOptions{})
147+
return err
216148
}
217149

218-
func (c *acrService) patchOperationSyncResultWithChangeRevision(revisions []string) map[string]any {
150+
func (c *acrService) patchOperationSyncResultWithChangeRevision(ctx context.Context, a *application.Application, revisions []string) error {
219151
if len(revisions) == 1 {
220-
return map[string]any{
152+
patch, _ := json.Marshal(map[string]any{
221153
"status": map[string]any{
222154
"operationState": map[string]any{
223155
"operation": map[string]any{
@@ -227,9 +159,12 @@ func (c *acrService) patchOperationSyncResultWithChangeRevision(revisions []stri
227159
},
228160
},
229161
},
230-
}
162+
})
163+
_, err := c.applicationClientset.ArgoprojV1alpha1().Applications(a.Namespace).Patch(ctx, a.Name, types.MergePatchType, patch, metav1.PatchOptions{})
164+
return err
231165
}
232-
return map[string]any{
166+
167+
patch, _ := json.Marshal(map[string]any{
233168
"status": map[string]any{
234169
"operationState": map[string]any{
235170
"operation": map[string]any{
@@ -239,7 +174,9 @@ func (c *acrService) patchOperationSyncResultWithChangeRevision(revisions []stri
239174
},
240175
},
241176
},
242-
}
177+
})
178+
_, err := c.applicationClientset.ArgoprojV1alpha1().Applications(a.Namespace).Patch(ctx, a.Name, types.MergePatchType, patch, metav1.PatchOptions{})
179+
return err
243180
}
244181

245182
func getCurrentRevisionFromOperation(a *application.Application) string {

0 commit comments

Comments
 (0)