Golang SDK to emit CDEvents.
The SDK can be used to create CDEvents and send them as CloudEvents, as well as parse a received CloudEvent into a CDEvent.
This SDK is work in work in progress, it will be maintained in sync with the specification and it now covers all events from the specification. The old SDK/CLI is still available, with the caveat that it's not aligned with the new version of the specification.
Add the module as dependency using go mod:
go get github.com/cdevents/sdk-go
And import the module in your code
import cdevents "github.com/cdevents/sdk-go/pkg/api"
To create a CDEvent, for instance a pipelineRun queued one:
func main() {
// Create the base event
event, err := cdevents.NewPipelineRunQueuedEvent()
if err != nil {
log.Fatalf("could not create a cdevent, %v", err)
}
// Set the required context fields
event.SetSubjectId("myPipelineRun1")
event.SetSource("my/first/cdevent/program")
// Set the required subject fields
event.SetSubjectPipelineName("myPipeline")
event.SetSubjectUrl("https://example.com/myPipeline")
}
To send a CDEvent as CloudEvent:
func main() {
// (...) set the event first
ce := cdevents.AsCloudEvent(event)
// Set send options
ctx := cloudevents.ContextWithTarget(context.Background(), "http://localhost:8080/")
ctx = cloudevents.WithEncodingBinary(ctx)
// Sent the CloudEvent
// c is a CloudEvent client
if result := c.Send(ctx, ce); cloudevents.IsUndelivered(result) {
log.Fatalf("failed to send, %v", result)
}
}
See the CloudEvents docs as well.
If you would like to contribute, see our development guide.