Skip to content

Commit a2eb8ea

Browse files
authored
Merge pull request #1018 from fluxcd/origin-revision
Add support for MetaOriginRevisionKey from the Event API
2 parents 5469e2a + e0b98ca commit a2eb8ea

13 files changed

+165
-26
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ require (
1717
github.com/containrrr/shoutrrr v0.8.0
1818
github.com/fluxcd/cli-utils v0.36.0-flux.11
1919
github.com/fluxcd/notification-controller/api v1.4.0
20-
github.com/fluxcd/pkg/apis/event v0.13.0
20+
github.com/fluxcd/pkg/apis/event v0.15.0
2121
github.com/fluxcd/pkg/apis/meta v1.9.0
2222
github.com/fluxcd/pkg/git v0.23.0
2323
github.com/fluxcd/pkg/masktoken v0.6.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,8 @@ github.com/fluxcd/cli-utils v0.36.0-flux.11 h1:W0y2uvCVkcE8bgV9jgoGSjzWbLFiNq1Aj
142142
github.com/fluxcd/cli-utils v0.36.0-flux.11/go.mod h1:WZ7xUpZbK+O6HBxA5UWqzWTLSSltdmj4wS1LstS5Dqs=
143143
github.com/fluxcd/pkg/apis/acl v0.5.0 h1:+ykKezgerKUlZwSYFUy03lPMOIAyWlqvMNNLIWWqOhk=
144144
github.com/fluxcd/pkg/apis/acl v0.5.0/go.mod h1:IVDZx3MAoDWjlLrJHMF9Z27huFuXAEQlnbWw0M6EcTs=
145-
github.com/fluxcd/pkg/apis/event v0.13.0 h1:m5qHAhYIC0+mRFy5OC8FZxBVBGJM3qxJ/sEg2Vgx4T8=
146-
github.com/fluxcd/pkg/apis/event v0.13.0/go.mod h1:aRK2AONnjjSNW61B6Iy3SW4YHozACntnJeGm3fFqDqA=
145+
github.com/fluxcd/pkg/apis/event v0.15.0 h1:k1suqIfVxnhEeKlGkvlHAbOYXjY8wRixT/OZcIuakqA=
146+
github.com/fluxcd/pkg/apis/event v0.15.0/go.mod h1:aRK2AONnjjSNW61B6Iy3SW4YHozACntnJeGm3fFqDqA=
147147
github.com/fluxcd/pkg/apis/meta v1.9.0 h1:wPgm7bWNJZ/ImS5GqikOxt362IgLPFBG73dZ27uWRiQ=
148148
github.com/fluxcd/pkg/apis/meta v1.9.0/go.mod h1:pMea8eEZcsFSI7ngRnTHFtDZk2CEZGgtrueNgI6Iu70=
149149
github.com/fluxcd/pkg/auth v0.2.0 h1:Df3pHGMDJjpr8AcGKgPvudXF3Lb3SuBlkAmhrkp7U1k=

internal/notifier/azure_devops.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func (a AzureDevOps) Post(ctx context.Context, event eventv1.Event) error {
9191
return nil
9292
}
9393

94-
revString, ok := event.Metadata[eventv1.MetaRevisionKey]
94+
revString, ok := event.GetRevision()
9595
if !ok {
9696
return errors.New("missing revision metadata")
9797
}

internal/notifier/azure_devops_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,34 @@ func TestAzureDevOps_Post(t *testing.T) {
100100
},
101101
},
102102
},
103+
{
104+
name: "event with origin revision",
105+
event: eventv1.Event{
106+
Severity: eventv1.EventSeverityInfo,
107+
InvolvedObject: corev1.ObjectReference{
108+
Kind: "Kustomization",
109+
Name: "gitops-system",
110+
},
111+
Metadata: map[string]string{
112+
eventv1.MetaRevisionKey: "main@sha1:69b59063470310ebbd88a9156325322a124e55a3",
113+
eventv1.MetaOriginRevisionKey: "main@sha1:bd88a9156325322a124e55a369b59063470310eb",
114+
},
115+
Reason: "ApplySucceeded",
116+
},
117+
want: git.CreateCommitStatusArgs{
118+
CommitId: strPtr("bd88a9156325322a124e55a369b59063470310eb"),
119+
Project: strPtr("bar"),
120+
RepositoryId: strPtr("baz"),
121+
GitCommitStatusToCreate: &git.GitStatus{
122+
Description: strPtr("apply succeeded"),
123+
State: &git.GitStatusStateValues.Succeeded,
124+
Context: &git.GitStatusContext{
125+
Genre: strPtr("fluxcd"),
126+
Name: strPtr("kustomization/gitops-system/0c9c2e41"),
127+
},
128+
},
129+
},
130+
},
103131
{
104132
name: "event with summary",
105133
event: eventv1.Event{

internal/notifier/bitbucket.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func (b Bitbucket) Post(ctx context.Context, event eventv1.Event) error {
9191
return nil
9292
}
9393

94-
revString, ok := event.Metadata[eventv1.MetaRevisionKey]
94+
revString, ok := event.GetRevision()
9595
if !ok {
9696
return errors.New("missing revision metadata")
9797
}

internal/notifier/bitbucketserver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ func (b BitbucketServer) Post(ctx context.Context, event eventv1.Event) error {
123123
if event.HasReason(meta.ProgressingReason) {
124124
return nil
125125
}
126-
revString, ok := event.Metadata[eventv1.MetaRevisionKey]
126+
revString, ok := event.GetRevision()
127127
if !ok {
128128
return errors.New("missing revision metadata")
129129
}

internal/notifier/bitbucketserver_test.go

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"encoding/base64"
2222
"encoding/json"
23+
"fmt"
2324
"io"
2425
"testing"
2526

@@ -183,6 +184,7 @@ func TestBitBucketServerPostValidateRequest(t *testing.T) {
183184
event eventv1.Event
184185
provideruid string
185186
key string
187+
uriHash string
186188
}{
187189
{
188190
name: "Validate Token Auth ",
@@ -199,6 +201,25 @@ func TestBitBucketServerPostValidateRequest(t *testing.T) {
199201
key: sha1String(generateCommitStatusID("0c9c2e41-d2f9-4f9b-9c41-bebc1984d67a", generateTestEventKustomization("info", map[string]string{
200202
eventv1.MetaRevisionKey: "main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
201203
}))),
204+
uriHash: "5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
205+
},
206+
{
207+
name: "Event with origin revision",
208+
token: "goodtoken",
209+
provideruid: "0c9c2e41-d2f9-4f9b-9c41-bebc1984d67a",
210+
headers: map[string]string{
211+
"Authorization": "Bearer goodtoken",
212+
"x-atlassian-token": "no-check",
213+
"x-requested-with": "XMLHttpRequest",
214+
},
215+
event: generateTestEventKustomization("info", map[string]string{
216+
eventv1.MetaRevisionKey: "main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
217+
eventv1.MetaOriginRevisionKey: "main@sha1:e7c17dd8b8384bbc84b7e7385394cb7f48332b2d",
218+
}),
219+
key: sha1String(generateCommitStatusID("0c9c2e41-d2f9-4f9b-9c41-bebc1984d67a", generateTestEventKustomization("info", map[string]string{
220+
eventv1.MetaRevisionKey: "main@sha1:e7c17dd8b8384bbc84b7e7385394cb7f48332b2d",
221+
}))),
222+
uriHash: "e7c17dd8b8384bbc84b7e7385394cb7f48332b2d",
202223
},
203224
{
204225
name: "Validate Basic Auth and Post State=Successful",
@@ -216,6 +237,7 @@ func TestBitBucketServerPostValidateRequest(t *testing.T) {
216237
key: sha1String(generateCommitStatusID("0c9c2e41-d2f9-4f9b-9c41-bebc1984d67a", generateTestEventKustomization("info", map[string]string{
217238
eventv1.MetaRevisionKey: "main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
218239
}))),
240+
uriHash: "5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
219241
},
220242
{
221243
name: "Validate Post State=Failed",
@@ -233,6 +255,7 @@ func TestBitBucketServerPostValidateRequest(t *testing.T) {
233255
key: sha1String(generateCommitStatusID("0c9c2e41-d2f9-4f9b-9c41-bebc1984d67a", generateTestEventKustomization("error", map[string]string{
234256
eventv1.MetaRevisionKey: "main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
235257
}))),
258+
uriHash: "5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
236259
},
237260
{
238261
name: "Fail if bad json response in existing commit status",
@@ -252,6 +275,7 @@ func TestBitBucketServerPostValidateRequest(t *testing.T) {
252275
key: sha1String(generateCommitStatusID("0c9c2e41-d2f9-4f9b-9c41-bebc1984d67a", generateTestEventKustomization("error", map[string]string{
253276
eventv1.MetaRevisionKey: "main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
254277
}))),
278+
uriHash: "5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
255279
},
256280
{
257281
name: "Fail if status code is non-200 in existing commit status",
@@ -271,6 +295,7 @@ func TestBitBucketServerPostValidateRequest(t *testing.T) {
271295
key: sha1String(generateCommitStatusID("0c9c2e41-d2f9-4f9b-9c41-bebc1984d67a", generateTestEventKustomization("error", map[string]string{
272296
eventv1.MetaRevisionKey: "main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
273297
}))),
298+
uriHash: "5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
274299
},
275300
{
276301
name: "Bad post- Unauthorized",
@@ -290,6 +315,7 @@ func TestBitBucketServerPostValidateRequest(t *testing.T) {
290315
key: sha1String(generateCommitStatusID("0c9c2e41-d2f9-4f9b-9c41-bebc1984d67a", generateTestEventKustomization("error", map[string]string{
291316
eventv1.MetaRevisionKey: "main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
292317
}))),
318+
uriHash: "5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
293319
},
294320
{
295321
name: "Validate duplicate commit status successful match",
@@ -307,6 +333,7 @@ func TestBitBucketServerPostValidateRequest(t *testing.T) {
307333
key: sha1String(generateCommitStatusID("0c9c2e41-d2f9-4f9b-9c41-bebc1984d67a", generateTestEventKustomization("info", map[string]string{
308334
eventv1.MetaRevisionKey: "main@sha1:5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
309335
}))),
336+
uriHash: "5394cb7f48332b2de7c17dd8b8384bbc84b7e738",
310337
},
311338
}
312339

@@ -320,7 +347,8 @@ func TestBitBucketServerPostValidateRequest(t *testing.T) {
320347
}
321348

322349
// Validate URI
323-
require.Equal(t, r.URL.Path, "/rest/api/latest/projects/projectfoo/repos/repobar/commits/5394cb7f48332b2de7c17dd8b8384bbc84b7e738/builds")
350+
path := fmt.Sprintf("/rest/api/latest/projects/projectfoo/repos/repobar/commits/%s/builds", tt.uriHash)
351+
require.Equal(t, r.URL.Path, path)
324352

325353
// Validate Get Build Status call
326354
if r.Method == http.MethodGet {

internal/notifier/gitea.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func NewGitea(providerUID string, addr string, token string, certPool *x509.Cert
9090
}
9191

9292
func (g *Gitea) Post(ctx context.Context, event eventv1.Event) error {
93-
revString, ok := event.Metadata[eventv1.MetaRevisionKey]
93+
revString, ok := event.GetRevision()
9494
if !ok {
9595
return errors.New("missing revision metadata")
9696
}

internal/notifier/gitea_test.go

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ func newTestServer(t *testing.T) *httptest.Server {
4242
fmt.Fprintf(w, "[]")
4343
case "/api/v1/repos/foo/bar/statuses/69b59063470310ebbd88a9156325322a124e55a3":
4444
fmt.Fprintf(w, "{}")
45+
case "/api/v1/repos/foo/bar/commits/8a9156325322a124e55a369b59063470310ebbd8/statuses":
46+
fmt.Fprintf(w, "[]")
47+
case "/api/v1/repos/foo/bar/statuses/8a9156325322a124e55a369b59063470310ebbd8":
48+
fmt.Fprintf(w, "{}")
4549
default:
4650
t.Logf("unknown %s request at %s", r.Method, r.URL.Path)
4751
}
@@ -83,22 +87,53 @@ func TestGitea_Post(t *testing.T) {
8387
g, err := NewGitea("0c9c2e41-d2f9-4f9b-9c41-bebc1984d67a", srv.URL+"/foo/bar", "foobar", nil)
8488
assert.Nil(t, err)
8589

86-
event := eventv1.Event{
87-
InvolvedObject: corev1.ObjectReference{
88-
Kind: "Kustomization",
89-
Namespace: "flux-system",
90-
Name: "podinfo-repo",
90+
for _, tt := range []struct {
91+
name string
92+
event eventv1.Event
93+
}{
94+
{
95+
name: "revision key",
96+
event: eventv1.Event{
97+
InvolvedObject: corev1.ObjectReference{
98+
Kind: "Kustomization",
99+
Namespace: "flux-system",
100+
Name: "podinfo-repo",
101+
},
102+
Severity: "info",
103+
Timestamp: metav1.Time{
104+
Time: time.Now(),
105+
},
106+
Metadata: map[string]string{
107+
eventv1.MetaRevisionKey: "main@sha1:69b59063470310ebbd88a9156325322a124e55a3",
108+
},
109+
Message: "Service/podinfo/podinfo configured",
110+
Reason: "",
111+
},
91112
},
92-
Severity: "info",
93-
Timestamp: metav1.Time{
94-
Time: time.Now(),
113+
{
114+
name: "origin revision key",
115+
event: eventv1.Event{
116+
InvolvedObject: corev1.ObjectReference{
117+
Kind: "Kustomization",
118+
Namespace: "flux-system",
119+
Name: "podinfo-repo",
120+
},
121+
Severity: "info",
122+
Timestamp: metav1.Time{
123+
Time: time.Now(),
124+
},
125+
Metadata: map[string]string{
126+
eventv1.MetaRevisionKey: "main@sha1:69b59063470310ebbd88a9156325322a124e55a3",
127+
eventv1.MetaOriginRevisionKey: "main@sha1:8a9156325322a124e55a369b59063470310ebbd8",
128+
},
129+
Message: "Service/podinfo/podinfo configured",
130+
Reason: "",
131+
},
95132
},
96-
Metadata: map[string]string{
97-
eventv1.MetaRevisionKey: "main@sha1:69b59063470310ebbd88a9156325322a124e55a3",
98-
},
99-
Message: "Service/podinfo/podinfo configured",
100-
Reason: "",
133+
} {
134+
t.Run(tt.name, func(t *testing.T) {
135+
err := g.Post(context.Background(), tt.event)
136+
assert.NoError(t, err)
137+
})
101138
}
102-
err = g.Post(context.Background(), event)
103-
assert.NoError(t, err)
104139
}

internal/notifier/github.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (g *GitHub) Post(ctx context.Context, event eventv1.Event) error {
9696
return nil
9797
}
9898

99-
revString, ok := event.Metadata[eventv1.MetaRevisionKey]
99+
revString, ok := event.GetRevision()
100100
if !ok {
101101
return errors.New("missing revision metadata")
102102
}

internal/notifier/gitlab.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
"fmt"
2525
"net/http"
2626

27-
"gitlab.com/gitlab-org/api/client-go"
27+
gitlab "gitlab.com/gitlab-org/api/client-go"
2828

2929
eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1"
3030
"github.com/fluxcd/pkg/apis/meta"
@@ -77,7 +77,7 @@ func (g *GitLab) Post(ctx context.Context, event eventv1.Event) error {
7777
return nil
7878
}
7979

80-
revString, ok := event.Metadata[eventv1.MetaRevisionKey]
80+
revString, ok := event.GetRevision()
8181
if !ok {
8282
return errors.New("missing revision metadata")
8383
}

internal/server/event_server.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,12 @@ func eventKeyFunc(r *http.Request) (string, error) {
233233

234234
objectGroup := event.InvolvedObject.GetObjectKind().GroupVersionKind().Group
235235

236+
originRevisionKey := fmt.Sprintf("%s/%s", objectGroup, eventv1.MetaOriginRevisionKey)
237+
originRevision, ok := event.Metadata[originRevisionKey]
238+
if ok {
239+
comps = append(comps, "originRevision="+originRevision)
240+
}
241+
236242
revisionKey := fmt.Sprintf("%s/%s", objectGroup, eventv1.MetaRevisionKey)
237243
revision, ok := event.Metadata[revisionKey]
238244
if ok {

internal/server/event_server_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,48 @@ func TestEventKeyFunc(t *testing.T) {
460460
},
461461
rateLimit: false,
462462
},
463+
{
464+
involvedObject: corev1.ObjectReference{
465+
APIVersion: "kustomize.toolkit.fluxcd.io/v1",
466+
Kind: "Kustomization",
467+
Name: "4",
468+
Namespace: "4",
469+
},
470+
severity: eventv1.EventSeverityInfo,
471+
message: "Health check passed",
472+
metadata: map[string]string{
473+
fmt.Sprintf("%s/%s", "kustomize.toolkit.fluxcd.io", eventv1.MetaOriginRevisionKey): "orev1",
474+
},
475+
rateLimit: false,
476+
},
477+
{
478+
involvedObject: corev1.ObjectReference{
479+
APIVersion: "kustomize.toolkit.fluxcd.io/v1",
480+
Kind: "Kustomization",
481+
Name: "4",
482+
Namespace: "4",
483+
},
484+
severity: eventv1.EventSeverityInfo,
485+
message: "Health check passed",
486+
metadata: map[string]string{
487+
fmt.Sprintf("%s/%s", "kustomize.toolkit.fluxcd.io", eventv1.MetaOriginRevisionKey): "orev1",
488+
},
489+
rateLimit: true,
490+
},
491+
{
492+
involvedObject: corev1.ObjectReference{
493+
APIVersion: "kustomize.toolkit.fluxcd.io/v1",
494+
Kind: "Kustomization",
495+
Name: "4",
496+
Namespace: "4",
497+
},
498+
severity: eventv1.EventSeverityInfo,
499+
message: "Health check passed",
500+
metadata: map[string]string{
501+
fmt.Sprintf("%s/%s", "kustomize.toolkit.fluxcd.io", eventv1.MetaOriginRevisionKey): "orev2",
502+
},
503+
rateLimit: false,
504+
},
463505
{
464506
involvedObject: corev1.ObjectReference{
465507
APIVersion: "kustomize.toolkit.fluxcd.io/v1",

0 commit comments

Comments
 (0)