From 6733c38584fb5975e967cf1b8f20f612fd05cc49 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Fri, 3 May 2024 10:19:57 +0200 Subject: [PATCH] add ordering key for pubsub event --- cmd/gcpPublishEvent.go | 14 ++++++++++---- cmd/gcpPublishEvent_test.go | 2 +- pkg/gcp/pubsub.go | 8 +++++--- pkg/gcp/pubsub_test.go | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/cmd/gcpPublishEvent.go b/cmd/gcpPublishEvent.go index fbe6a47e98..1f8a52e78c 100644 --- a/cmd/gcpPublishEvent.go +++ b/cmd/gcpPublishEvent.go @@ -4,6 +4,7 @@ import ( "github.com/SAP/jenkins-library/pkg/events" "github.com/SAP/jenkins-library/pkg/gcp" "github.com/SAP/jenkins-library/pkg/log" + "github.com/SAP/jenkins-library/pkg/orchestrator" "github.com/SAP/jenkins-library/pkg/telemetry" "github.com/pkg/errors" @@ -13,7 +14,7 @@ type gcpPublishEventUtils interface { GetConfig() *gcpPublishEventOptions GetOIDCTokenByValidation(roleID string) (string, error) GetFederatedToken(projectNumber, pool, provider, token string) (string, error) - Publish(projectNumber string, topic string, token string, data []byte) error + Publish(projectNumber string, topic string, token string, key string, data []byte) error } type gcpPublishEventUtilsBundle struct { @@ -28,8 +29,8 @@ func (g gcpPublishEventUtilsBundle) GetFederatedToken(projectNumber, pool, provi return gcp.GetFederatedToken(projectNumber, pool, provider, token) } -func (g gcpPublishEventUtilsBundle) Publish(projectNumber string, topic string, token string, data []byte) error { - return gcp.Publish(projectNumber, topic, token, data) +func (g gcpPublishEventUtilsBundle) Publish(projectNumber string, topic string, token string, key string, data []byte) error { + return gcp.Publish(projectNumber, topic, token, key, data) } // to be implemented through another PR! @@ -55,6 +56,11 @@ func runGcpPublishEvent(utils gcpPublishEventUtils) error { var data []byte var err error + provider, err := orchestrator.GetOrchestratorConfigProvider(nil) + if err != nil { + log.Entry().WithError(err).Warning("Cannot infer config from CI environment") + } + data, err = events.NewEvent(config.EventType, config.EventSource).CreateWithJSONData(config.EventData).ToBytes() if err != nil { return errors.Wrap(err, "failed to create event data") @@ -73,7 +79,7 @@ func runGcpPublishEvent(utils gcpPublishEventUtils) error { return errors.Wrap(err, "failed to get federated token") } - err = utils.Publish(config.GcpProjectNumber, config.Topic, token, data) + err = utils.Publish(config.GcpProjectNumber, config.Topic, token, provider.BuildURL(), data) if err != nil { return errors.Wrap(err, "failed to publish event") } diff --git a/cmd/gcpPublishEvent_test.go b/cmd/gcpPublishEvent_test.go index 4e6249fc30..9dc5933172 100644 --- a/cmd/gcpPublishEvent_test.go +++ b/cmd/gcpPublishEvent_test.go @@ -23,7 +23,7 @@ func (g *mockGcpPublishEventUtilsBundle) GetFederatedToken(projectNumber, pool, return "testFederatedToken123", nil } -func (g *mockGcpPublishEventUtilsBundle) Publish(projectNumber string, topic string, token string, data []byte) error { +func (g *mockGcpPublishEventUtilsBundle) Publish(projectNumber string, topic string, token string, key string, data []byte) error { if topic == "goodTestCase" { return nil } else if topic == "badTestCase" { diff --git a/pkg/gcp/pubsub.go b/pkg/gcp/pubsub.go index 6d394a6569..3dd604ade3 100644 --- a/pkg/gcp/pubsub.go +++ b/pkg/gcp/pubsub.go @@ -14,20 +14,22 @@ const api_url = "https://pubsub.googleapis.com/v1/projects/%s/topics/%s:publish" // https://pkg.go.dev/cloud.google.com/go/pubsub#Message type EventMessage struct { - Data []byte `json:"data"` + Data []byte `json:"data"` + OrderingKey string `json:"orderingKey"` } type Event struct { Messages []EventMessage `json:"messages"` } -func Publish(projectNumber string, topic string, token string, data []byte) error { +func Publish(projectNumber string, topic string, token string, key string, data []byte) error { ctx := context.Background() // build event event := Event{ Messages: []EventMessage{{ - Data: data, + Data: data, + OrderingKey: key, }}, } diff --git a/pkg/gcp/pubsub_test.go b/pkg/gcp/pubsub_test.go index 7e5f35d1f0..a25e0a3b38 100644 --- a/pkg/gcp/pubsub_test.go +++ b/pkg/gcp/pubsub_test.go @@ -38,7 +38,7 @@ func TestPublish(t *testing.T) { ) // test - err := Publish(projectNumber, topic, token, data) + err := Publish(projectNumber, topic, token, mock.Anything, data) // asserts assert.NoError(t, err) })