From 714492abad2063a98190e7e55e5bf31c210e5a3d Mon Sep 17 00:00:00 2001 From: Mike Chu Date: Fri, 28 Apr 2023 15:31:54 -0400 Subject: [PATCH 1/6] Bump assembly versions --- OptimizelySDK.DemoApp/OptimizelySDK.DemoApp.csproj | 3 --- OptimizelySDK.DemoApp/Properties/AssemblyInfo.cs | 8 ++++---- OptimizelySDK.Net35/Properties/AssemblyInfo.cs | 7 +++---- OptimizelySDK.Net40/Properties/AssemblyInfo.cs | 7 +++---- OptimizelySDK.NetStandard16/Properties/AssemblyInfo.cs | 7 +++---- OptimizelySDK.NetStandard20/Properties/AssemblyInfo.cs | 7 +++---- OptimizelySDK.Tests/Properties/AssemblyInfo.cs | 6 +++--- OptimizelySDK/Properties/AssemblyInfo.cs | 7 +++---- 8 files changed, 22 insertions(+), 30 deletions(-) diff --git a/OptimizelySDK.DemoApp/OptimizelySDK.DemoApp.csproj b/OptimizelySDK.DemoApp/OptimizelySDK.DemoApp.csproj index 1eb335f8..f0bf1dcf 100644 --- a/OptimizelySDK.DemoApp/OptimizelySDK.DemoApp.csproj +++ b/OptimizelySDK.DemoApp/OptimizelySDK.DemoApp.csproj @@ -126,9 +126,6 @@ ..\packages\NJsonSchema.10.8.0\lib\net45\NJsonSchema.dll - - ..\packages\Optimizely.SDK.2.1.0\lib\net45\OptimizelySDK.dll - diff --git a/OptimizelySDK.DemoApp/Properties/AssemblyInfo.cs b/OptimizelySDK.DemoApp/Properties/AssemblyInfo.cs index d9323337..ef42316d 100644 --- a/OptimizelySDK.DemoApp/Properties/AssemblyInfo.cs +++ b/OptimizelySDK.DemoApp/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("OptimizelySDK.DemoApp")] -[assembly: AssemblyCopyright("Copyright © 2017-2020")] +[assembly: AssemblyCopyright("Copyright © 2017-2023")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -37,6 +37,6 @@ // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("3.11.2.0")] -[assembly: AssemblyFileVersion("3.11.2.0")] -[assembly: AssemblyInformationalVersion("3.11.2")] // Used by Nuget. +[assembly: AssemblyVersion("4.0.0.0")] +[assembly: AssemblyFileVersion("4.0.0.0")] +[assembly: AssemblyInformationalVersion("4.0.0-beta")] // Used by Nuget. diff --git a/OptimizelySDK.Net35/Properties/AssemblyInfo.cs b/OptimizelySDK.Net35/Properties/AssemblyInfo.cs index 70562fb0..f0ac46a0 100644 --- a/OptimizelySDK.Net35/Properties/AssemblyInfo.cs +++ b/OptimizelySDK.Net35/Properties/AssemblyInfo.cs @@ -37,7 +37,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.11.2.0")] -[assembly: AssemblyFileVersion("3.11.2.0")] -[assembly: AssemblyInformationalVersion("3.11.2")] // Used by Nuget. +[assembly: AssemblyVersion("4.0.0.0")] +[assembly: AssemblyFileVersion("4.0.0.0-beta")] +[assembly: AssemblyInformationalVersion("4.0.0-beta")] // Used by Nuget. diff --git a/OptimizelySDK.Net40/Properties/AssemblyInfo.cs b/OptimizelySDK.Net40/Properties/AssemblyInfo.cs index 8e8650f9..2196ace4 100644 --- a/OptimizelySDK.Net40/Properties/AssemblyInfo.cs +++ b/OptimizelySDK.Net40/Properties/AssemblyInfo.cs @@ -37,7 +37,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.11.2.0")] -[assembly: AssemblyFileVersion("3.11.2.0")] -[assembly: AssemblyInformationalVersion("3.11.2")] // Used by Nuget. +[assembly: AssemblyVersion("4.0.0.0")] +[assembly: AssemblyFileVersion("4.0.0.0-beta")] +[assembly: AssemblyInformationalVersion("4.0.0-beta")] // Used by Nuget. diff --git a/OptimizelySDK.NetStandard16/Properties/AssemblyInfo.cs b/OptimizelySDK.NetStandard16/Properties/AssemblyInfo.cs index ce770f39..ca8aa9ac 100644 --- a/OptimizelySDK.NetStandard16/Properties/AssemblyInfo.cs +++ b/OptimizelySDK.NetStandard16/Properties/AssemblyInfo.cs @@ -37,7 +37,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.11.2.0")] -[assembly: AssemblyFileVersion("3.11.2.0")] -[assembly: AssemblyInformationalVersion("3.11.2")] // Used by Nuget. +[assembly: AssemblyVersion("4.0.0")] +[assembly: AssemblyFileVersion("4.0.0.0-beta")] +[assembly: AssemblyInformationalVersion("4.0.0-beta")] // Used by Nuget. diff --git a/OptimizelySDK.NetStandard20/Properties/AssemblyInfo.cs b/OptimizelySDK.NetStandard20/Properties/AssemblyInfo.cs index e1fb8759..9d6a5166 100644 --- a/OptimizelySDK.NetStandard20/Properties/AssemblyInfo.cs +++ b/OptimizelySDK.NetStandard20/Properties/AssemblyInfo.cs @@ -37,7 +37,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.11.2.0")] -[assembly: AssemblyFileVersion("3.11.2.0")] -[assembly: AssemblyInformationalVersion("3.11.2")] // Used by Nuget. +[assembly: AssemblyVersion("4.0.0.0")] +[assembly: AssemblyFileVersion("4.0.0.0-beta")] +[assembly: AssemblyInformationalVersion("4.0.0-beta")] // Used by Nuget. diff --git a/OptimizelySDK.Tests/Properties/AssemblyInfo.cs b/OptimizelySDK.Tests/Properties/AssemblyInfo.cs index d1eea767..4396ff81 100644 --- a/OptimizelySDK.Tests/Properties/AssemblyInfo.cs +++ b/OptimizelySDK.Tests/Properties/AssemblyInfo.cs @@ -30,6 +30,6 @@ // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("3.11.2.0")] -[assembly: AssemblyFileVersion("3.11.2.0")] -[assembly: AssemblyInformationalVersion("3.11.2")] // Used by Nuget. +[assembly: AssemblyVersion("4.0.0.0")] +[assembly: AssemblyFileVersion("4.0.0.0-beta")] +[assembly: AssemblyInformationalVersion("4.0.0-beta")] // Used by Nuget. diff --git a/OptimizelySDK/Properties/AssemblyInfo.cs b/OptimizelySDK/Properties/AssemblyInfo.cs index 17f7422a..44e9e2ce 100644 --- a/OptimizelySDK/Properties/AssemblyInfo.cs +++ b/OptimizelySDK/Properties/AssemblyInfo.cs @@ -41,7 +41,6 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.11.2.0")] -[assembly: AssemblyFileVersion("3.11.2.0")] -[assembly: AssemblyInformationalVersion("3.11.2")] // Used by Nuget. +[assembly: AssemblyVersion("4.0.0.0")] +[assembly: AssemblyFileVersion("4.0.0.0-beta")] +[assembly: AssemblyInformationalVersion("4.0.0-beta")] // Used by Nuget. From 3b5183451158b3979dfdaa50603ed72c6b2ed30b Mon Sep 17 00:00:00 2001 From: Mike Chu Date: Fri, 28 Apr 2023 15:39:48 -0400 Subject: [PATCH 2/6] Update CHANGELOG --- CHANGELOG.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94f5f03c..b8604b1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,47 @@ # Optimizely C# SDK Changelog +## 4.0.0-beta +April 28th, 2023 + +### New Features +The 4.0.0-beta release introduces a new primary feature, [Advanced Audience Targeting]( https://docs.developers.optimizely.com/feature-experimentation/docs/optimizely-data-platform-advanced-audience-targeting) +enabled through integration with [Optimizely Data Platform (ODP)](https://docs.developers.optimizely.com/optimizely-data-platform/docs) ( +[#305](https://github.com/optimizely/csharp-sdk/pull/305), +[#310](https://github.com/optimizely/csharp-sdk/pull/310), +[#311](https://github.com/optimizely/csharp-sdk/pull/311), +[#315](https://github.com/optimizely/csharp-sdk/pull/315), +[#321](https://github.com/optimizely/csharp-sdk/pull/321), +[#322](https://github.com/optimizely/csharp-sdk/pull/322), +[#323](https://github.com/optimizely/csharp-sdk/pull/323), +[#324](https://github.com/optimizely/csharp-sdk/pull/324) +). + +You can use ODP, a high-performance [Customer Data Platform (CDP)]( https://www.optimizely.com/optimization-glossary/customer-data-platform/), to easily create complex +real-time segments (RTS) using first-party and 50+ third-party data sources out of the box. You can create custom schemas that support the user attributes important +for your business, and stitch together user behavior done on different devices to better understand and target your customers for personalized user experiences. ODP can +be used as a single source of truth for these segments in any Optimizely or 3rd party tool. + +With ODP accounts integrated into Optimizely projects, you can build audiences using segments pre-defined in ODP. The SDK will fetch the segments for given users and +make decisions using the segments. For access to ODP audience targeting in your Feature Experimentation account, please contact your Optimizely Customer Success Manager. + +This version includes the following changes: +- New API added to `OptimizelyUserContext`: + - `FetchQualifiedSegments()`: this API will retrieve user segments from the ODP server. The fetched segments will be used for audience evaluation. The fetched data will be stored in the local cache to avoid repeated network delays. + - When an `OptimizelyUserContext` is created, the SDK will automatically send an identify request to the ODP server to facilitate observing user activities. +- New APIs added to `OptimizelyClient`: + - `SendOdpEvent()`: customers can build/send arbitrary ODP events that will bind user identifiers and data to user profiles in ODP. + +For details, refer to our documentation pages: +- [Advanced Audience Targeting](https://docs.developers.optimizely.com/feature-experimentation/docs/optimizely-data-platform-advanced-audience-targeting) +- [Server SDK Support](https://docs.developers.optimizely.com/feature-experimentation/v1.0/docs/advanced-audience-targeting-for-server-side-sdks) +- [Initialize C# SDK](https://docs.developers.optimizely.com/feature-experimentation/docs/initialize-sdk-csharp) +- [OptimizelyUserContext C# SDK](https://docs.developers.optimizely.com/feature-experimentation/docs/optimizelyusercontext-csharp) +- [Advanced Audience Targeting segment qualification methods](https://docs.developers.optimizely.com/feature-experimentation/docs/advanced-audience-targeting-segment-qualification-methods-csharp) +- [Send Optimizely Data Platform data using Advanced Audience Targeting](https://docs.developers.optimizely.com/feature-experimentation/docs/send-odp-data-using-advanced-audience-targeting-csharp) + +### Breaking Changes +- `OdpManager` in the SDK is enabled by default. Unless an ODP account is integrated into the Optimizely projects, most `OdpManager` functions will be ignored. If needed, `OdpManager` can be disabled when `OptimizelyClient` is instantiated. + ## 3.11.2 March 15th, 2023 From 1dc8f5b110888403806e9803c51919b973121b17 Mon Sep 17 00:00:00 2001 From: Mike Chu Date: Fri, 28 Apr 2023 15:45:17 -0400 Subject: [PATCH 3/6] Update Copyright years --- OptimizelySDK.Net35/Properties/AssemblyInfo.cs | 2 +- OptimizelySDK.Net40/Properties/AssemblyInfo.cs | 2 +- OptimizelySDK.NetStandard16/Properties/AssemblyInfo.cs | 2 +- OptimizelySDK.NetStandard20/Properties/AssemblyInfo.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/OptimizelySDK.Net35/Properties/AssemblyInfo.cs b/OptimizelySDK.Net35/Properties/AssemblyInfo.cs index f0ac46a0..c30032e8 100644 --- a/OptimizelySDK.Net35/Properties/AssemblyInfo.cs +++ b/OptimizelySDK.Net35/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("OptimizelySDK.Net35")] -[assembly: AssemblyCopyright("Copyright © 2017-2020")] +[assembly: AssemblyCopyright("Copyright © 2017-2023")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/OptimizelySDK.Net40/Properties/AssemblyInfo.cs b/OptimizelySDK.Net40/Properties/AssemblyInfo.cs index 2196ace4..2cd7b68a 100644 --- a/OptimizelySDK.Net40/Properties/AssemblyInfo.cs +++ b/OptimizelySDK.Net40/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("OptimizelySDK.Net40")] -[assembly: AssemblyCopyright("Copyright © 2017-2020")] +[assembly: AssemblyCopyright("Copyright © 2017-2023")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/OptimizelySDK.NetStandard16/Properties/AssemblyInfo.cs b/OptimizelySDK.NetStandard16/Properties/AssemblyInfo.cs index ca8aa9ac..9c98ed60 100644 --- a/OptimizelySDK.NetStandard16/Properties/AssemblyInfo.cs +++ b/OptimizelySDK.NetStandard16/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("OptimizelySDK.NetStandard16")] -[assembly: AssemblyCopyright("Copyright © 2017-2020")] +[assembly: AssemblyCopyright("Copyright © 2017-2023")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/OptimizelySDK.NetStandard20/Properties/AssemblyInfo.cs b/OptimizelySDK.NetStandard20/Properties/AssemblyInfo.cs index 9d6a5166..3b263f57 100644 --- a/OptimizelySDK.NetStandard20/Properties/AssemblyInfo.cs +++ b/OptimizelySDK.NetStandard20/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("OptimizelySDK.NetStandard20")] -[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyCopyright("Copyright © 2019-2023")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] From 71e02c6aecdab4bfc15b3b41e11af0fbc75ddc6f Mon Sep 17 00:00:00 2001 From: Mike Chu Date: Mon, 1 May 2023 08:14:14 -0400 Subject: [PATCH 4/6] Add to list of Breaking Changes --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b8604b1b..7b9620be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,8 @@ For details, refer to our documentation pages: ### Breaking Changes - `OdpManager` in the SDK is enabled by default. Unless an ODP account is integrated into the Optimizely projects, most `OdpManager` functions will be ignored. If needed, `OdpManager` can be disabled when `OptimizelyClient` is instantiated. +- `ProjectConfigManager` interface additions + implementing class updates +- `Evaluate()` updates in `BaseCondition` ## 3.11.2 March 15th, 2023 From 20a980d4560e510fe50eefa870ddb91a09032c24 Mon Sep 17 00:00:00 2001 From: Mike Chu Date: Mon, 1 May 2023 09:20:10 -0400 Subject: [PATCH 5/6] Fix AWS upload naming --- .github/workflows/csharp.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/csharp.yml b/.github/workflows/csharp.yml index 12c1c29c..ffa39e20 100644 --- a/.github/workflows/csharp.yml +++ b/.github/workflows/csharp.yml @@ -78,7 +78,7 @@ jobs: Where-Object { $_.DirectoryName -match '\\bin\\Release' } | Foreach-Object { & $env:WINDOWS_2019_SN_PATH -R $_.FullName ./keypair.snk } - name: Install AWS CLI, deploy to S3 on successful tests & for release - if: steps.unit_tests.outcome == 'success' && env.CURRENT_BRANCH == env.RELEASE_BRANCH && env.EVENT_TYPE == 'push' + #if: steps.unit_tests.outcome == 'success' && env.CURRENT_BRANCH == env.RELEASE_BRANCH && env.EVENT_TYPE == 'push' env: AWS_ACCESS_KEY_ID: ${{ secrets.OFTA_KEY }} AWS_SECRET_ACCESS_KEY: ${{ secrets.OFTA_SECRET }} @@ -86,7 +86,7 @@ jobs: run: | Install-Module -Name AWS.Tools.Installer -Force; Install-AWSToolsModule AWS.Tools.S3 -Force -CleanUp; - Get-ChildItem -Recurse -Exclude '.*Tests.*' -include 'OptimizelySDK*.dll' | Where-Object { $_.DirectoryName -match '\\bin\\Release' } | Foreach-Object { aws s3 cp $_.FullName s3://optly-fs-travisci-artifacts/${{ env.REPO_SLUG }}/${{ env.BUILD_NUMBER }}/${{ env.RUN_NUMBER }}/${{ env.ATTEMPT_NUM }}/$(basename $file)-unsigned } + Get-ChildItem -Recurse -Exclude '.*Tests.*' -include 'OptimizelySDK*.dll' | Where-Object { $_.DirectoryName -match '\\bin\\Release' } | Foreach-Object { aws s3 cp $_.FullName s3://optly-fs-travisci-artifacts/${{ env.REPO_SLUG }}/${{ env.BUILD_NUMBER }}/${{ env.RUN_NUMBER }}/${{ env.ATTEMPT_NUM }}/$($_.Name)-unsigned } netStandard16: name: Build For .NET Standard 1.6 From d29d34612059a24add1380947d65483a36ffec4b Mon Sep 17 00:00:00 2001 From: Mike Chu Date: Mon, 1 May 2023 09:29:04 -0400 Subject: [PATCH 6/6] Return conditional for AWS step --- .github/workflows/csharp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/csharp.yml b/.github/workflows/csharp.yml index ffa39e20..e5907fcd 100644 --- a/.github/workflows/csharp.yml +++ b/.github/workflows/csharp.yml @@ -78,7 +78,7 @@ jobs: Where-Object { $_.DirectoryName -match '\\bin\\Release' } | Foreach-Object { & $env:WINDOWS_2019_SN_PATH -R $_.FullName ./keypair.snk } - name: Install AWS CLI, deploy to S3 on successful tests & for release - #if: steps.unit_tests.outcome == 'success' && env.CURRENT_BRANCH == env.RELEASE_BRANCH && env.EVENT_TYPE == 'push' + if: steps.unit_tests.outcome == 'success' && env.CURRENT_BRANCH == env.RELEASE_BRANCH && env.EVENT_TYPE == 'push' env: AWS_ACCESS_KEY_ID: ${{ secrets.OFTA_KEY }} AWS_SECRET_ACCESS_KEY: ${{ secrets.OFTA_SECRET }}