Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(events): add step to emit events to GCP #4901

Merged
merged 35 commits into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
0fe4b32
feat(gcp): add step to send events to GCP (#4896)
CCFenner Apr 18, 2024
2d74210
feat(gcp): Generate and validate the GCP OIDC token (#4899)
jliempt Apr 18, 2024
0846f1d
feat(events): add pipeline start and end event (#4900)
CCFenner Apr 18, 2024
ea8b70f
log successful event publish
Apr 18, 2024
942ff37
remove dummy step
CCFenner Apr 18, 2024
0b6b5f6
prevent step from failing
CCFenner Apr 19, 2024
0f043a0
improve event creation
CCFenner Apr 19, 2024
df44295
improve event creation
CCFenner Apr 19, 2024
9ddfef8
simplify eventing
CCFenner Apr 24, 2024
ad7e466
remove detailed events
CCFenner Apr 24, 2024
4a40d32
update parameter scope
CCFenner Apr 24, 2024
f395434
Merge branch 'master' into events
CCFenner Apr 24, 2024
b6b4132
update go.sum
CCFenner Apr 24, 2024
26d4f43
fix test case
CCFenner Apr 24, 2024
60edf31
add missing method
CCFenner Apr 24, 2024
43dd149
refactor OIDC part
Apr 24, 2024
6909edb
add oidc.go to vault pkg
Apr 24, 2024
65feabd
Merge branch 'master' into events
jliempt Apr 24, 2024
26e8ff6
mock OIDC token retrieval
Apr 25, 2024
65e1fcd
mock GCP functions
Apr 25, 2024
47d5813
update OIDC function name in Vault mocks
Apr 25, 2024
d009df4
get event data from CPE
Apr 25, 2024
f1d0084
don't encode data payload in b64
Apr 26, 2024
ac87b05
remove vault related changes
Apr 26, 2024
177b48e
remove vault changes from step code
Apr 26, 2024
c06ad8a
remove commented out code
Apr 26, 2024
8308849
documentation/steps/gcpPublishEvent.md
Apr 29, 2024
acf0bba
documentation/steps/gcpPublishEvent.md
Apr 29, 2024
8b68525
Merge branch 'events' of https://github.com/SAP/jenkins-library into …
Apr 29, 2024
f292d3c
remove hardcoded eventData
jliempt Apr 29, 2024
97f28db
update roleID
jliempt Apr 29, 2024
34ef952
go generate
Apr 29, 2024
6733c38
add ordering key for pubsub event
CCFenner May 3, 2024
60a39a5
Merge branch 'master' into events
CCFenner May 3, 2024
3299bc9
Merge branch 'master' into events
CCFenner May 6, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions cmd/gcpPublishEvent.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package cmd

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/telemetry"

"github.com/pkg/errors"
)

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
}

type gcpPublishEventUtilsBundle struct {
config *gcpPublishEventOptions
}

func (g gcpPublishEventUtilsBundle) GetConfig() *gcpPublishEventOptions {
return g.config
}

func (g gcpPublishEventUtilsBundle) GetFederatedToken(projectNumber, pool, provider, token string) (string, error) {
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)
}

// to be implemented through another PR!
func (g gcpPublishEventUtilsBundle) GetOIDCTokenByValidation(roleID string) (string, error) {
return "testToken", nil
}

func gcpPublishEvent(config gcpPublishEventOptions, telemetryData *telemetry.CustomData) {
utils := gcpPublishEventUtilsBundle{
config: &config,
}

err := runGcpPublishEvent(utils)
if err != nil {
// do not fail the step
log.Entry().WithError(err).Warnf("step execution failed")
}
}

func runGcpPublishEvent(utils gcpPublishEventUtils) error {
config := utils.GetConfig()

var data []byte
var err error

config.EventData = `{"testData": "testValue"}`

data, err = events.NewEvent(config.EventType, config.EventSource).CreateWithJSONData(config.EventData).ToBytes()
if err != nil {
return errors.Wrap(err, "failed to create event data")
}

// this is currently returning a mock token. function will be implemented through another PR!
// roleID will come from GeneralConfig.HookConfig.OIDCConfig.RoleID
roleID := "hyperspace-pipelines"
oidcToken, err := utils.GetOIDCTokenByValidation(roleID)
if err != nil {
return errors.Wrap(err, "failed to get OIDC token")
}

token, err := utils.GetFederatedToken(config.GcpProjectNumber, config.GcpWorkloadIDentityPool, config.GcpWorkloadIDentityPoolProvider, oidcToken)
if err != nil {
return errors.Wrap(err, "failed to get federated token")
}

err = utils.Publish(config.GcpProjectNumber, config.Topic, token, data)
if err != nil {
return errors.Wrap(err, "failed to publish event")
}

log.Entry().Info("event published successfully!")

return nil
}
254 changes: 254 additions & 0 deletions cmd/gcpPublishEvent_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions cmd/gcpPublishEvent_generated_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//go:build unit
// +build unit

package cmd

import (
"testing"

"github.com/stretchr/testify/assert"
)

func TestGcpPublishEventCommand(t *testing.T) {
t.Parallel()

testCmd := GcpPublishEventCommand()

// only high level testing performed - details are tested in step generation procedure
assert.Equal(t, "gcpPublishEvent", testCmd.Use, "command name incorrect")

}
Loading
Loading