From 02a4f8a0efe593e59adf9ae58a8026a93eb5c4e2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Oct 2026 10:32:39 +0000 Subject: [PATCH 1/2] deps: update dependency flagsmith/sdk-spec to v0.6.0 --- .github/workflows/sdk-spec.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sdk-spec.yml b/.github/workflows/sdk-spec.yml index c0e93ba..15f3883 100644 --- a/.github/workflows/sdk-spec.yml +++ b/.github/workflows/sdk-spec.yml @@ -11,7 +11,7 @@ permissions: jobs: sdk-spec: # Keep the ref in `uses:` and `spec-ref` in sync. - uses: Flagsmith/sdk-spec/.github/workflows/run-spec.yml@v0.3.0 + uses: Flagsmith/sdk-spec/.github/workflows/run-spec.yml@v0.6.0 with: - spec-ref: v0.3.0 + spec-ref: v0.6.0 language: go From 55bbf0605498565e49fc39b7e478406afac3687b Mon Sep 17 00:00:00 2001 From: "flagsmithsmith[bot]" <346993984+flagsmithsmith[bot]@users.noreply.github.com> Date: Thu, 29 Oct 2026 11:54:48 +0000 Subject: [PATCH 2/2] feat(sdk-spec): Implement the SDK spec v0.6.0 events steps Wire the experiment flag, event tracking and exposure tracking steps, and the events-enabled client, to the SDK's existing experimentation API. Co-Authored-By: Claude Opus 5.5 --- sdk-spec/steps.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/sdk-spec/steps.go b/sdk-spec/steps.go index 4359b13..0f60efb 100644 --- a/sdk-spec/steps.go +++ b/sdk-spec/steps.go @@ -28,6 +28,15 @@ func CreateClient(environmentKey, apiURL string) *flagsmith.Client { return flagsmith.NewClient(environmentKey, flagsmith.WithBaseURL(apiURL)) } +// Create the SDK client with events enabled +func CreateClientWithEvents(environmentKey, apiURL, eventsURL string) *flagsmith.Client { + return flagsmith.NewClient(environmentKey, + flagsmith.WithBaseURL(apiURL), + flagsmith.WithEvents(context.Background()), + flagsmith.WithEventsBaseURL(eventsURL), + ) +} + // When the application gets the environment flags func GetEnvironmentFlags(client *flagsmith.Client) ([]Flag, error) { flags, err := client.GetEnvironmentFlags(context.Background()) @@ -43,3 +52,19 @@ func GetIdentityFlags(client *flagsmith.Client, identifier string, traits map[st flags, err := client.GetIdentityFlags(context.Background(), identifier, sdkTraits) return asSpecFlags(flags), err } + +// When the application gets the experiment flag "{feature}" for identity "{identifier}" with traits: +func GetExperimentFlag(client *flagsmith.Client, feature, identifier string, traits map[string]any) ([]Flag, error) { + flag, err := client.GetExperimentFlag(context.Background(), feature, flagsmith.NewEvaluationContext(identifier, traits)) + return []Flag{{Feature: flag.FeatureName, Enabled: flag.Enabled, Value: flag.Value}}, err +} + +// When the application tracks event "{event}" for identity "{identifier}" with value {value} and metadata: +func TrackEvent(client *flagsmith.Client, event, identifier string, value any, metadata map[string]any) error { + return client.TrackEvent(event, &flagsmith.EventOptions{Identifier: identifier, Value: value, Metadata: metadata}) +} + +// When the application tracks an exposure of feature "{feature}" for identity "{identifier}" with value {value} and metadata: +func TrackExposureEvent(client *flagsmith.Client, feature, identifier string, value any, metadata map[string]any) error { + return client.TrackExposureEvent(feature, identifier, value, &flagsmith.EventOptions{Metadata: metadata}) +}