Skip to content

Commit 2c18b2c

Browse files
oleksandr-codefreshppapapetrou76
authored andcommitted
chore: sync all codefresh code changes into v3.0.2 without event-reporter related changes
Signed-off-by: oleksandr-codefresh <oleksandr.saulyak@octopus.com>
1 parent b325481 commit 2c18b2c

File tree

18 files changed

+938
-415
lines changed

18 files changed

+938
-415
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/application/client.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type httpApplicationClient struct {
2323
httpClient *http.Client
2424
baseURL string
2525
token string
26+
rootpath string
2627
}
2728

2829
func NewHTTPApplicationClient(token string, address string, rootpath string) ApplicationClient {
@@ -46,13 +47,14 @@ func NewHTTPApplicationClient(token string, address string, rootpath string) App
4647
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
4748
},
4849
},
49-
baseURL: address,
50-
token: token,
50+
baseURL: address,
51+
token: token,
52+
rootpath: rootpath,
5153
}
5254
}
5355

5456
func (c *httpApplicationClient) execute(ctx context.Context, url string, result any) error {
55-
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, http.NoBody)
57+
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
5658
if err != nil {
5759
return err
5860
}

acr_controller/controller/controller.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import (
1313
appclientset "github.com/argoproj/argo-cd/v3/pkg/client/clientset/versioned"
1414

1515
appv1 "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1"
16+
applisters "github.com/argoproj/argo-cd/v3/pkg/client/listers/application/v1alpha1"
17+
servercache "github.com/argoproj/argo-cd/v3/server/cache"
1618
)
1719

1820
var watchAPIBufferSize = 1000
@@ -22,21 +24,27 @@ type ACRController interface {
2224
}
2325

2426
type applicationChangeRevisionController struct {
25-
appBroadcaster Broadcaster
26-
acrService service.ACRService
27-
useAnnotations bool
27+
appBroadcaster Broadcaster
28+
cache *servercache.Cache
29+
appLister applisters.ApplicationLister
30+
applicationServiceClient appclient.ApplicationClient
31+
acrService service.ACRService
32+
applicationClientset appclientset.Interface
2833
}
2934

30-
func NewApplicationChangeRevisionController(appInformer cache.SharedIndexInformer, applicationServiceClient appclient.ApplicationClient, applicationClientset appclientset.Interface, useAnnotations bool) ACRController {
35+
func NewApplicationChangeRevisionController(appInformer cache.SharedIndexInformer, cache *servercache.Cache, applicationServiceClient appclient.ApplicationClient, appLister applisters.ApplicationLister, applicationClientset appclientset.Interface) ACRController {
3136
appBroadcaster := NewBroadcaster()
3237
_, err := appInformer.AddEventHandler(appBroadcaster)
3338
if err != nil {
3439
log.Error(err)
3540
}
3641
return &applicationChangeRevisionController{
37-
appBroadcaster: appBroadcaster,
38-
acrService: service.NewACRService(applicationClientset, applicationServiceClient),
39-
useAnnotations: useAnnotations,
42+
appBroadcaster: appBroadcaster,
43+
cache: cache,
44+
applicationServiceClient: applicationServiceClient,
45+
appLister: appLister,
46+
applicationClientset: applicationClientset,
47+
acrService: service.NewACRService(applicationClientset, applicationServiceClient),
4048
}
4149
}
4250

@@ -48,7 +56,7 @@ func (c *applicationChangeRevisionController) Run(ctx context.Context) {
4856
return nil // ignore this event
4957
}
5058

51-
return c.acrService.ChangeRevision(ctx, &a, c.useAnnotations)
59+
return c.acrService.ChangeRevision(ctx, &a)
5260
}
5361

5462
// TODO: move to abstraction

acr_controller/server.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ package acr_controller
22

33
import (
44
"context"
5+
"crypto/tls"
56
"fmt"
67
"net"
78
"net/http"
89
"time"
910

11+
applisters "github.com/argoproj/argo-cd/v3/pkg/client/listers/application/v1alpha1"
12+
settings_util "github.com/argoproj/argo-cd/v3/util/settings"
1013
"github.com/redis/go-redis/v9"
1114
log "github.com/sirupsen/logrus"
1215
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -33,11 +36,15 @@ var backoff = wait.Backoff{
3336
type ACRServer struct {
3437
ACRServerOpts
3538

39+
settings *settings_util.ArgoCDSettings
40+
log *log.Entry
3641
appInformer cache.SharedIndexInformer
42+
appLister applisters.ApplicationLister
3743
applicationClientset appclientset.Interface
3844

3945
// stopCh is the channel which when closed, will shutdown the Event Reporter server
40-
stopCh chan struct{}
46+
stopCh chan struct{}
47+
serviceSet *ACRServerSet
4148
}
4249

4350
type ACRServerSet struct{}
@@ -97,7 +104,7 @@ func (a *ACRServer) Init(ctx context.Context) {
97104
}
98105

99106
func (a *ACRServer) RunController(ctx context.Context) {
100-
controller := acr_controller.NewApplicationChangeRevisionController(a.appInformer, a.ApplicationServiceClient, a.applicationClientset, !a.DisableAnnotations)
107+
controller := acr_controller.NewApplicationChangeRevisionController(a.appInformer, a.Cache, a.ApplicationServiceClient, a.appLister, a.applicationClientset)
101108
go controller.Run(ctx)
102109
}
103110

@@ -156,6 +163,10 @@ func (a *ACRServer) Listen() (*Listeners, error) {
156163
// golang/protobuf).
157164
func (a *ACRServer) Run(ctx context.Context, lns *Listeners) {
158165
httpS := a.newHTTPServer(ctx, a.ListenPort)
166+
tlsConfig := tls.Config{}
167+
tlsConfig.GetCertificate = func(_ *tls.ClientHelloInfo) (*tls.Certificate, error) {
168+
return a.settings.Certificate, nil
169+
}
159170
go func() { a.checkServeErr("httpS", httpS.Serve(lns.Main)) }()
160171
go a.RunController(ctx)
161172

@@ -176,10 +187,13 @@ func NewApplicationChangeRevisionServer(_ context.Context, opts ACRServerOpts) *
176187
appFactory := appinformer.NewSharedInformerFactoryWithOptions(opts.AppClientset, 0, appinformer.WithNamespace(appInformerNs), appinformer.WithTweakListOptions(func(_ *metav1.ListOptions) {}))
177188

178189
appInformer := appFactory.Argoproj().V1alpha1().Applications().Informer()
190+
appLister := appFactory.Argoproj().V1alpha1().Applications().Lister()
179191

180192
server := &ACRServer{
181193
ACRServerOpts: opts,
194+
log: log.NewEntry(log.StandardLogger()),
182195
appInformer: appInformer,
196+
appLister: appLister,
183197
applicationClientset: opts.AppClientset,
184198
}
185199

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)