Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
2edfc8d
chore: Add support for persistent store contract tests.
kinyoklion Nov 3, 2025
baeb833
Merge main into rlamb/persistence-contract-tests
devin-ai-integration[bot] Mar 9, 2026
eb918dd
fix: add use_redis flag to server-redis.yml workflow steps
devin-ai-integration[bot] Mar 9, 2026
d960e6f
fix: update OpenSSL chocolatey version from 3.5.4 to 3.6.1 for Window…
devin-ai-integration[bot] Mar 9, 2026
14b2e22
Revert "fix: update OpenSSL chocolatey version from 3.5.4 to 3.6.1 fo…
devin-ai-integration[bot] Mar 9, 2026
d09ca12
Merge remote-tracking branch 'origin/main' into rlamb/persistence-con…
devin-ai-integration[bot] Mar 10, 2026
b9a13e4
fix: move enable_persistence_tests to Redis contract test jobs
devin-ai-integration[bot] Mar 12, 2026
9a95f3e
fix: change use_redis default to empty string to preserve auto-detection
devin-ai-integration[bot] Mar 12, 2026
bdcb385
fix: update contract-tests action to v1.3.0 for enable_persistence_te…
devin-ai-integration[bot] Mar 12, 2026
8d4e39c
fix: correct TTL field name mismatch in persistent cache config
devin-ai-integration[bot] Mar 12, 2026
e5bf095
fix: allow lazy load evaluations when $inited key is not set
devin-ai-integration[bot] Mar 12, 2026
cc44864
fix: move warn-and-proceed logic to evaluation path for lazy load
devin-ai-integration[bot] Mar 13, 2026
6cf1a3c
Merge branch 'devin/1773359647-lazy-load-initialized-warning' into rl…
devin-ai-integration[bot] Mar 13, 2026
3fe6eb3
chore: add suppressions for read-write persistent store tests
devin-ai-integration[bot] Mar 13, 2026
fc75921
Merge origin/main into rlamb/persistence-contract-tests
devin-ai-integration[bot] Aug 14, 2026
d308c56
chore: add DynamoDB persistent store contract test support
devin-ai-integration[bot] Aug 14, 2026
620d32b
ci: rename dynamodb contract test job
devin-ai-integration[bot] Aug 14, 2026
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
12 changes: 10 additions & 2 deletions .github/actions/ci/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ inputs:
description: 'Whether to install CURL development libraries. Required for OpenTelemetry builds (server-sdk-otel), but does not enable CURL networking for the SDK itself.'
required: false
default: 'false'
use_redis:
description: 'Whether to enable Redis support (LD_BUILD_REDIS_SUPPORT=ON). Leave unset to preserve automatic detection for Redis targets.'
required: false
default: ''
use_dynamodb:
description: 'Whether to enable DynamoDB support (LD_BUILD_DYNAMODB_SUPPORT=ON). Leave unset to preserve automatic detection for DynamoDB targets.'
required: false
default: ''

runs:
using: composite
Expand All @@ -58,7 +66,7 @@ runs:
id: install-curl
- name: Build Library
shell: bash
run: ./scripts/build.sh ${{ inputs.cmake_target }} ON ${{ inputs.use_curl }}
run: ./scripts/build.sh ${{ inputs.cmake_target }} ON "${{ inputs.use_curl }}" "${{ inputs.use_redis }}" "${{ inputs.use_dynamodb }}"
env:
BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }}
Boost_DIR: ${{ steps.install-boost.outputs.Boost_DIR }}
Expand All @@ -69,7 +77,7 @@ runs:
id: build-tests
if: inputs.run_tests == 'true'
shell: bash
run: ./scripts/build.sh gtest_${{ inputs.cmake_target }} ON ${{ inputs.use_curl }}
run: ./scripts/build.sh gtest_${{ inputs.cmake_target }} ON "${{ inputs.use_curl }}" "${{ inputs.use_redis }}" "${{ inputs.use_dynamodb }}"
env:
BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }}
Boost_DIR: ${{ steps.install-boost.outputs.Boost_DIR }}
Expand Down
30 changes: 30 additions & 0 deletions .github/workflows/server-dynamodb.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,36 @@ on:
- cron: '0 8 * * *'

jobs:
contract-tests-dynamodb:
runs-on: ubuntu-22.04
services:
dynamodb:
image: amazon/dynamodb-local
ports:
- 8000:8000
env:
TEST_SERVICE_PORT: 8123
TEST_SERVICE_BINARY: ./build/contract-tests/server-contract-tests/server-tests
steps:
# https://github.com/actions/checkout/releases/tag/v4.3.0
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
- uses: ./.github/actions/ci
with:
cmake_target: server-tests
run_tests: false
# AWS C++ SDK requires libcurl at link time on Linux/macOS.
install_curl: true
use_dynamodb: true
- name: 'Launch test service as background task'
run: $TEST_SERVICE_BINARY $TEST_SERVICE_PORT 2>&1 &
# https://github.com/launchdarkly/gh-actions/releases/tag/contract-tests-v1.3.0
- uses: launchdarkly/gh-actions/actions/contract-tests@5adb11fd6953e1bc35d9cf1fc1b4374c464e3a8b
with:
test_service_port: ${{ env.TEST_SERVICE_PORT }}
token: ${{ secrets.GITHUB_TOKEN }}
enable_persistence_tests: true
extra_params: '--skip-from ./contract-tests/server-contract-tests/suppressions.txt'

build-test-dynamodb:
runs-on: ubuntu-22.04
services:
Expand Down
60 changes: 60 additions & 0 deletions .github/workflows/server-redis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,63 @@ on:
- cron: '0 8 * * *'

jobs:
contract-tests:
runs-on: ubuntu-22.04
services:
redis:
image: redis
ports:
- 6379:6379
env:
TEST_SERVICE_PORT: 8123
TEST_SERVICE_BINARY: ./build/contract-tests/server-contract-tests/server-tests
steps:
# https://github.com/actions/checkout/releases/tag/v4.3.0
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955
- uses: ./.github/actions/ci
with:
cmake_target: server-tests
run_tests: false
use_redis: true
- name: 'Launch test service as background task'
run: $TEST_SERVICE_BINARY $TEST_SERVICE_PORT 2>&1 &
# https://github.com/launchdarkly/gh-actions/releases/tag/contract-tests-v1.3.0
- uses: launchdarkly/gh-actions/actions/contract-tests@5adb11fd6953e1bc35d9cf1fc1b4374c464e3a8b
with:
test_service_port: ${{ env.TEST_SERVICE_PORT }}
token: ${{ secrets.GITHUB_TOKEN }}
enable_persistence_tests: true
extra_params: '--skip-from ./contract-tests/server-contract-tests/suppressions.txt'

contract-tests-curl:
runs-on: ubuntu-22.04
services:
redis:
image: redis
ports:
- 6379:6379
env:
TEST_SERVICE_PORT: 8123
TEST_SERVICE_BINARY: ./build/contract-tests/server-contract-tests/server-tests
steps:
# https://github.com/actions/checkout/releases/tag/v4.3.0
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955
- uses: ./.github/actions/ci
with:
cmake_target: server-tests
run_tests: false
use_curl: true
use_redis: true
- name: 'Launch test service as background task'
run: $TEST_SERVICE_BINARY $TEST_SERVICE_PORT 2>&1 &
# https://github.com/launchdarkly/gh-actions/releases/tag/contract-tests-v1.3.0
- uses: launchdarkly/gh-actions/actions/contract-tests@5adb11fd6953e1bc35d9cf1fc1b4374c464e3a8b
with:
test_service_port: ${{ env.TEST_SERVICE_PORT }}
token: ${{ secrets.GITHUB_TOKEN }}
enable_persistence_tests: true
extra_params: '--skip-from ./contract-tests/server-contract-tests/suppressions.txt'

build-test-redis:
runs-on: ubuntu-22.04
services:
Expand All @@ -28,6 +85,7 @@ jobs:
with:
cmake_target: launchdarkly-cpp-server-redis-source
simulate_release: true
use_redis: true
build-redis-mac:
runs-on: macos-15
steps:
Expand All @@ -39,6 +97,7 @@ jobs:
platform_version: 12
run_tests: false # TODO: figure out how to run Redis service on Mac
simulate_release: true
use_redis: true
build-test-redis-windows:
runs-on: windows-2022
steps:
Expand All @@ -57,3 +116,4 @@ jobs:
toolset: msvc
run_tests: false # TODO: figure out how to run Redis service on Windows
simulate_windows_release: true
use_redis: true
31 changes: 31 additions & 0 deletions contract-tests/data-model/include/data_model/data_model.hpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#pragma once

#include <optional>
#include <string>
#include <unordered_map>
#include "nlohmann/json.hpp"

Check failure on line 6 in contract-tests/data-model/include/data_model/data_model.hpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/data-model/include/data_model/data_model.hpp:6:10 [clang-diagnostic-error]

'nlohmann/json.hpp' file not found

namespace nlohmann {
template <typename T>
Expand Down Expand Up @@ -65,7 +65,7 @@
pollIntervalMs,
filter);

struct ConfigEventParams {

Check warning on line 68 in contract-tests/data-model/include/data_model/data_model.hpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/data-model/include/data_model/data_model.hpp:68:8 [cppcoreguidelines-pro-type-member-init]

constructor does not initialize these fields: globalPrivateAttributes
std::optional<std::string> baseUri;
std::optional<uint32_t> capacity;
std::optional<bool> enableDiagnostics;
Expand Down Expand Up @@ -93,7 +93,7 @@
polling,
events);

struct ConfigClientSideParams {

Check warning on line 96 in contract-tests/data-model/include/data_model/data_model.hpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/data-model/include/data_model/data_model.hpp:96:8 [cppcoreguidelines-pro-type-member-init]

constructor does not initialize these fields: initialContext
nlohmann::json initialContext;
std::optional<bool> evaluationReasons;
std::optional<bool> useReport;
Expand Down Expand Up @@ -136,7 +136,7 @@
data,
errors);

struct ConfigHooksParams {

Check warning on line 139 in contract-tests/data-model/include/data_model/data_model.hpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/data-model/include/data_model/data_model.hpp:139:8 [cppcoreguidelines-pro-type-member-init]

constructor does not initialize these fields: hooks
std::vector<ConfigHookInstance> hooks;
};

Expand All @@ -149,6 +149,35 @@

NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(ConfigWrapper, name, version);

struct ConfigPersistentCache {
std::string mode; // "off", "ttl", "infinite"
std::optional<int> ttl; // TTL in seconds (sent by test harness as "ttl")
};

NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(ConfigPersistentCache,
mode,
ttl);

struct ConfigPersistentStore {
std::string type; // "redis", "consul", "dynamodb"
std::string dsn;
std::optional<std::string> prefix;
};

NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(ConfigPersistentStore,
type,
dsn,
prefix);

struct ConfigPersistentDataStore {
ConfigPersistentStore store;
ConfigPersistentCache cache;
};

NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(ConfigPersistentDataStore,
store,
cache);

struct ConfigDataSynchronizerParams {
std::optional<ConfigStreamingParams> streaming;
std::optional<ConfigPollingParams> polling;
Expand Down Expand Up @@ -208,6 +237,7 @@
std::optional<ConfigProxyParams> proxy;
std::optional<ConfigHooksParams> hooks;
std::optional<ConfigWrapper> wrapper;
std::optional<ConfigPersistentDataStore> persistentDataStore;
std::optional<ConfigBigSegmentsParams> bigSegments;
};

Expand All @@ -226,9 +256,10 @@
proxy,
hooks,
wrapper,
persistentDataStore,
bigSegments);

struct ContextSingleParams {

Check warning on line 262 in contract-tests/data-model/include/data_model/data_model.hpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/data-model/include/data_model/data_model.hpp:262:8 [cppcoreguidelines-pro-type-member-init]

constructor does not initialize these fields: custom
std::optional<std::string> kind;
std::string key;
std::optional<std::string> name;
Expand Down Expand Up @@ -323,7 +354,7 @@
defaultValue,
detail);

struct EvaluateFlagResponse {

Check warning on line 357 in contract-tests/data-model/include/data_model/data_model.hpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/data-model/include/data_model/data_model.hpp:357:8 [cppcoreguidelines-pro-type-member-init]

constructor does not initialize these fields: value, reason
nlohmann::json value;
std::optional<uint32_t> variationIndex;
std::optional<nlohmann::json> reason;
Expand All @@ -334,7 +365,7 @@
variationIndex,
reason);

struct EvaluateAllFlagParams {

Check warning on line 368 in contract-tests/data-model/include/data_model/data_model.hpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/data-model/include/data_model/data_model.hpp:368:8 [cppcoreguidelines-pro-type-member-init]

constructor does not initialize these fields: context
std::optional<nlohmann::json> context;
std::optional<bool> withReasons;
std::optional<bool> clientSideOnly;
Expand All @@ -347,7 +378,7 @@
clientSideOnly,
detailsOnlyForTrackedFlags);

struct EvaluateAllFlagsResponse {

Check warning on line 381 in contract-tests/data-model/include/data_model/data_model.hpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/data-model/include/data_model/data_model.hpp:381:8 [cppcoreguidelines-pro-type-member-init]

constructor does not initialize these fields: state
nlohmann::json state;
};

Expand All @@ -369,7 +400,7 @@
omitNullData,
metricValue);

struct IdentifyEventParams {

Check warning on line 403 in contract-tests/data-model/include/data_model/data_model.hpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/data-model/include/data_model/data_model.hpp:403:8 [cppcoreguidelines-pro-type-member-init]

constructor does not initialize these fields: context
nlohmann::json context;
};

Expand Down
10 changes: 10 additions & 0 deletions contract-tests/server-contract-tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,14 @@ target_link_libraries(server-tests PRIVATE
contract-test-data-model
)

if (LD_BUILD_REDIS_SUPPORT)
target_link_libraries(server-tests PRIVATE launchdarkly::server_redis_source)
target_compile_definitions(server-tests PRIVATE LD_REDIS_SUPPORT_ENABLED)
endif ()

if (LD_BUILD_DYNAMODB_SUPPORT)
target_link_libraries(server-tests PRIVATE launchdarkly::server_dynamodb_source)
target_compile_definitions(server-tests PRIVATE LD_DYNAMODB_SUPPORT_ENABLED)
endif ()

target_include_directories(server-tests PUBLIC include)
84 changes: 84 additions & 0 deletions contract-tests/server-contract-tests/src/entity_manager.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "entity_manager.hpp"

Check failure on line 1 in contract-tests/server-contract-tests/src/entity_manager.cpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/server-contract-tests/src/entity_manager.cpp:1:10 [clang-diagnostic-error]

'entity_manager.hpp' file not found
#include "contract_test_big_segment_store.hpp"
#include "contract_test_hook.hpp"

Expand All @@ -9,12 +9,76 @@

#include <boost/json.hpp>

#ifdef LD_REDIS_SUPPORT_ENABLED
#include <launchdarkly/server_side/integrations/redis/redis_source.hpp>
#endif

#ifdef LD_DYNAMODB_SUPPORT_ENABLED
#include <launchdarkly/server_side/integrations/dynamodb/dynamodb_source.hpp>
#endif

using launchdarkly::LogLevel;
using namespace launchdarkly::server_side;

#if defined(LD_REDIS_SUPPORT_ENABLED) || defined(LD_DYNAMODB_SUPPORT_ENABLED)
#define LD_PERSISTENT_STORE_ENABLED
#endif

namespace {

#ifdef LD_PERSISTENT_STORE_ENABLED
tl::expected<config::builders::LazyLoadBuilder::SourcePtr, std::string>
MakePersistentStoreSource(ConfigPersistentStore const& store) {
#ifdef LD_REDIS_SUPPORT_ENABLED
if (store.type == "redis") {
auto source = integrations::RedisDataSource::Create(
store.dsn, store.prefix.value_or("launchdarkly"));
if (!source) {
return tl::make_unexpected(source.error());
}
return std::move(*source);
}
#endif
#ifdef LD_DYNAMODB_SUPPORT_ENABLED
if (store.type == "dynamodb") {
// The test harness creates this table and provides its endpoint as the
// DSN. Credentials are required by the AWS SDK, but ignored by
// DynamoDB Local.
integrations::DynamoDBClientOptions options;
options.region = "us-east-1";
options.endpoint = store.dsn;
options.aws_access_key_id = "dummy";
options.aws_secret_access_key = "dummy";
options.aws_session_token = "dummy";

auto source = integrations::DynamoDBDataSource::Create(
"sdk-contract-tests", store.prefix.value_or(""),
std::move(options));
if (!source) {
return tl::make_unexpected(source.error());
}
return std::move(*source);
}
#endif
return tl::make_unexpected("unsupported persistent store type: " +
store.type);
}

void ApplyCacheConfig(config::builders::LazyLoadBuilder& lazy_load,
ConfigPersistentCache const& cache) {
if (cache.mode == "off") {
lazy_load.CacheRefresh(std::chrono::seconds(0));
} else if (cache.mode == "ttl") {
if (cache.ttl) {
lazy_load.CacheRefresh(std::chrono::seconds(*cache.ttl));
}
} else if (cache.mode == "infinite") {
lazy_load.CacheRefresh(std::chrono::hours(24 * 365));
}
}
#endif

config::builders::DataSystemBuilder::FDv2 BuildFDv2(

Check warning on line 81 in contract-tests/server-contract-tests/src/entity_manager.cpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/server-contract-tests/src/entity_manager.cpp:81:43 [readability-function-cognitive-complexity]

function 'BuildFDv2' has cognitive complexity of 32 (threshold 25)
ConfigDataSystemParams const& cfg,
config::builders::EndpointsBuilder* endpoints) {
auto fdv2 = config::builders::DataSystemBuilder::FDv2::Custom();
Expand Down Expand Up @@ -72,7 +136,7 @@
} else if (cfg.synchronizers && !cfg.synchronizers->empty()) {
// No explicit baseUri: derive from the synchronizers list, matching
// the no-fdv1Fallback branch below.
ConfigDataSynchronizerParams const* selected = nullptr;

Check warning on line 139 in contract-tests/server-contract-tests/src/entity_manager.cpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/server-contract-tests/src/entity_manager.cpp:139:49 [cppcoreguidelines-init-variables]

variable 'selected' is not initialized
for (auto const& sync : *cfg.synchronizers) {
if (sync.polling) {
selected = &sync;
Expand Down Expand Up @@ -288,6 +352,26 @@
}
}

#ifdef LD_PERSISTENT_STORE_ENABLED
if (in.persistentDataStore) {
auto source = MakePersistentStoreSource(in.persistentDataStore->store);
if (!source) {
LD_LOG(logger_, LogLevel::kWarn)
<< "entity_manager: couldn't create persistent store source: "
<< source.error();
return std::nullopt;
}

auto lazy_load = config::builders::LazyLoadBuilder();
lazy_load.Source(std::move(*source));
ApplyCacheConfig(lazy_load, in.persistentDataStore->cache);

config_builder.DataSystem().Method(
config::builders::DataSystemBuilder::LazyLoad(
std::move(lazy_load)));
}
#endif

if (in.bigSegments) {
auto store = std::make_shared<ContractTestBigSegmentStore>(
in.bigSegments->callbackUri);
Expand Down
6 changes: 6 additions & 0 deletions contract-tests/server-contract-tests/src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "server.hpp"

Check failure on line 1 in contract-tests/server-contract-tests/src/main.cpp

View workflow job for this annotation

GitHub Actions / cpp-linter

contract-tests/server-contract-tests/src/main.cpp:1:10 [clang-diagnostic-error]

'server.hpp' file not found

#include <launchdarkly/logging/console_backend.hpp>

Expand Down Expand Up @@ -54,6 +54,12 @@
srv.add_capability("instance-id");
srv.add_capability("fdv1-fallback");
srv.add_capability("big-segments");
#ifdef LD_REDIS_SUPPORT_ENABLED
srv.add_capability("persistent-data-store-redis");
#endif
#ifdef LD_DYNAMODB_SUPPORT_ENABLED
srv.add_capability("persistent-data-store-dynamodb");
#endif

net::signal_set signals{ioc, SIGINT, SIGTERM};

Expand Down
24 changes: 24 additions & 0 deletions contract-tests/server-contract-tests/suppressions.txt

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Currently this SDK doesn't support read-write mode. It supports a purely lazy system for use with daemon mode.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With FDv2 support we will want to standardize this with the FDv2 behavior.

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
persistent data store/redis/read-write/initializes store when data received
persistent data store/redis/read-write/applies updates to store
persistent data store/redis/read-write/data source updates respect versioning
persistent data store/redis/read-write/data source deletions respect versioning
persistent data store/redis/read-write/cache mode infinite/does not cache flag miss
persistent data store/redis/read-write/cache mode infinite/sdk reflects data source updates even with cache
persistent data store/redis/read-write/cache mode infinite/ignores direct database modifications
persistent data store/redis/read-write/cache mode infinite/ignores dropped flags
persistent data store/redis/read-write/cache mode ttl/does not cache flag miss
persistent data store/redis/read-write/cache mode ttl/sdk reflects data source updates even with cache
persistent data store/redis/read-write/cache mode ttl/ignores direct database modifications
persistent data store/redis/read-write/cache mode ttl/ignores dropped flags
persistent data store/dynamodb/read-write/initializes store when data received
persistent data store/dynamodb/read-write/applies updates to store
persistent data store/dynamodb/read-write/data source updates respect versioning
persistent data store/dynamodb/read-write/data source deletions respect versioning
persistent data store/dynamodb/read-write/cache mode infinite/does not cache flag miss
persistent data store/dynamodb/read-write/cache mode infinite/sdk reflects data source updates even with cache
persistent data store/dynamodb/read-write/cache mode infinite/ignores direct database modifications
persistent data store/dynamodb/read-write/cache mode infinite/ignores dropped flags
persistent data store/dynamodb/read-write/cache mode ttl/does not cache flag miss
persistent data store/dynamodb/read-write/cache mode ttl/sdk reflects data source updates even with cache
persistent data store/dynamodb/read-write/cache mode ttl/ignores direct database modifications
persistent data store/dynamodb/read-write/cache mode ttl/ignores dropped flags
16 changes: 16 additions & 0 deletions scripts/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
# $1 the name of the target. For example "launchdarkly-cpp-common".
# $2 ON/OFF which enables/disables building in a test configuration (unit tests + contract tests.)
# $3 (optional) true/false to enable/disable CURL networking (LD_CURL_NETWORKING)
# $4 (optional) true/false to enable/disable Redis support (LD_BUILD_REDIS_SUPPORT)
# $5 (optional) true/false to enable/disable DynamoDB support (LD_BUILD_DYNAMODB_SUPPORT)

function cleanup {
cd ..
Expand Down Expand Up @@ -37,6 +39,20 @@ if [ "$3" == "true" ]; then
build_curl="ON"
fi

# Check for Redis support option (override the automatic detection if explicitly passed)
if [ "$4" == "true" ]; then
build_redis="ON"
elif [ "$4" == "false" ]; then
build_redis="OFF"
fi

# Check for DynamoDB support option (override the automatic detection if explicitly passed)
if [ "$5" == "true" ]; then
build_dynamodb="ON"
elif [ "$5" == "false" ]; then
build_dynamodb="OFF"
fi

# Set build type to Debug when testing is enabled
build_type="Release"
if [ "$2" == "ON" ]; then
Expand Down
Loading