Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
f22d157
chore: Cmake updates for FindBoost policies.
kinyoklion Oct 7, 2025
8ef277b
feat: Add networking abstraction non-streaming requests.
kinyoklion Oct 7, 2025
8204d2a
Update certify to version including FindBoost updates.
kinyoklion Oct 8, 2025
6351b59
Update windows boost version.
kinyoklion Oct 8, 2025
f5d3b31
Try boost 1.85.
kinyoklion Oct 8, 2025
7c2ca08
No boost root
kinyoklion Oct 8, 2025
069edf1
Try boost 1.85 with link
kinyoklion Oct 8, 2025
9152599
Update certify to remove boost::system dependency
kinyoklion Oct 8, 2025
ac66ddc
Remove Boost::system from foxy.
kinyoklion Oct 8, 2025
22b258d
Use prefix to find boost cmake configuration.
kinyoklion Oct 8, 2025
94b520c
Use Boost_DIR instead of prefix.
kinyoklion Oct 8, 2025
e8e6b91
Merge branch 'rlamb/cmake-updates' into rlamb/basic-network-request-a…
kinyoklion Oct 8, 2025
531c805
Use correct step.
kinyoklion Oct 8, 2025
bdf1c4b
Merge branch 'rlamb/cmake-updates' into rlamb/basic-network-request-a…
kinyoklion Oct 8, 2025
df91388
fix: Ensure that serialization of a variation or rollout uses the cor…
kinyoklion Oct 8, 2025
24b2629
Add conditional compilation.
kinyoklion Oct 8, 2025
fd3bd44
Conditional boost code in tests.
kinyoklion Oct 8, 2025
9fa7cce
Merge branch 'rlamb/disambiguate-sequence-boost-json' into rlamb/basi…
kinyoklion Oct 8, 2025
1ee9e1d
WIP
kinyoklion Oct 8, 2025
04a8cf8
WIP
kinyoklion Oct 8, 2025
543e450
Basics working
kinyoklion Oct 8, 2025
5a5b8b9
Streaming working.
kinyoklion Oct 9, 2025
7f03df2
Comments and cleanup.
kinyoklion Oct 9, 2025
1b295c5
String constants.
kinyoklion Oct 9, 2025
5573c5f
Updates
kinyoklion Oct 9, 2025
71fa311
SSE tests working.
kinyoklion Oct 9, 2025
c60a03b
Contract test passing.
kinyoklion Oct 9, 2025
0235834
Refactoring for more deterministic destruction.
kinyoklion Oct 10, 2025
a870f03
Passing contract tests.
kinyoklion Oct 10, 2025
832183e
Join curl thread on shutdown.
kinyoklion Oct 10, 2025
1c64987
Testing round 1.
kinyoklion Oct 10, 2025
3da9112
Test robustness.
kinyoklion Oct 13, 2025
bb5cba3
Merge branch 'main' into rlamb/basic-network-request-abstraction
kinyoklion Oct 13, 2025
b860b2b
Conditional CURL compilation.
kinyoklion Oct 13, 2025
428af22
Add proxy validation test.
kinyoklion Oct 13, 2025
b8b7f53
Add programmatic interface for setting proxy.
kinyoklion Oct 13, 2025
7f8f1ce
Start CI work
kinyoklion Oct 13, 2025
c8ed14e
Revert example changes
kinyoklion Oct 13, 2025
3363838
Revert SSE contract test changes.
kinyoklion Oct 13, 2025
9e625df
Correct CURL download URLs for windows.
kinyoklion Oct 13, 2025
ef61eeb
Use powershell instead of bash to install curl.
kinyoklion Oct 13, 2025
0e57e52
Forward CMAKE_EXTRA_ARGS.
kinyoklion Oct 14, 2025
5ab043e
Extra actions in workflow
kinyoklion Oct 14, 2025
eaca3a0
More CMAKE args plumbing.
kinyoklion Oct 14, 2025
9fffe56
Update the launchdarkly cmake config to handle optional curl dependency.
kinyoklion Oct 14, 2025
a42b4a3
Add configuration output to the cmake tests.
kinyoklion Oct 14, 2025
1a76752
Optionally find CURL in cmake config.
kinyoklion Oct 14, 2025
e42aa31
Update cmake-test readme for CURL tests.
kinyoklion Oct 14, 2025
d1cfb47
Capture num_events explicitly for MSVC
kinyoklion Oct 14, 2025
816064e
Build curl from source.
kinyoklion Oct 14, 2025
ae52c2c
Refactor windows CURL building and document.
kinyoklion Oct 14, 2025
f7a2490
Extend error handling.
kinyoklion Oct 14, 2025
185d668
Build tests and contract tests with and without CURL.
kinyoklion Oct 14, 2025
b3cb350
Simplify redirect handling.
kinyoklion Oct 14, 2025
602f48f
Refactor SSE curl threading.
kinyoklion Oct 15, 2025
273fce4
Use posts
kinyoklion Oct 15, 2025
6253672
Cleanup the RequestContext.
kinyoklion Oct 15, 2025
3597de5
Add support for client-side proxy contract tests.
kinyoklion Oct 15, 2025
2a49349
Add experimental notice for CURL server-side. Tag server-side artifac…
kinyoklion Oct 15, 2025
f378303
Contract test conditionally supports proxies.
kinyoklion Oct 15, 2025
e7622d0
Target lib name.
kinyoklion Oct 15, 2025
6b8d925
Start refactoring backoff.
kinyoklion Oct 16, 2025
27a498f
Initial
kinyoklion Oct 16, 2025
09ba09d
Contract tests passing with multi support.
kinyoklion Oct 16, 2025
6223137
Refactor to have a shared networking library.
kinyoklion Oct 16, 2025
fce4996
Cmake updates.
kinyoklion Oct 16, 2025
9892c7b
Ensure descriptors and handlers are not leaking.
kinyoklion Oct 17, 2025
87c0fbc
Start simplifying memory management.
kinyoklion Oct 17, 2025
67a782d
Networking build must always use curl.
kinyoklion Oct 17, 2025
f330e97
Disable tests for networking component.
kinyoklion Oct 17, 2025
ff3a07b
Consolidate parsing.
kinyoklion Oct 17, 2025
2ca2763
Use correct descriptor on windows.
kinyoklion Oct 17, 2025
d54c973
Socket abstraction.
kinyoklion Oct 17, 2025
0dfe280
ASIO header only
kinyoklion Oct 17, 2025
e7f6564
Incremental memory management improvements.
kinyoklion Oct 17, 2025
e708abd
CMake build updates.
kinyoklion Oct 17, 2025
ca6f43e
Public link boost headers.
kinyoklion Oct 17, 2025
d3b18cd
Refine curl handle lifetime.
kinyoklion Oct 17, 2025
0c2cbfe
Add debug logging
kinyoklion Oct 18, 2025
583341e
Remove debug log.
kinyoklion Oct 18, 2025
fd469e0
Alternate timeout method.
kinyoklion Oct 18, 2025
e3965f9
Don't link boost to networking library
kinyoklion Oct 18, 2025
8fdc421
Iterate
kinyoklion Oct 18, 2025
23ebda3
Enable asio separate compilation.
kinyoklion Oct 18, 2025
7502d88
Latest redis-plus-plus.
kinyoklion Oct 18, 2025
417b1de
Comments and fix bad cast.
kinyoklion Oct 18, 2025
3782ee9
Remove debug logging.
kinyoklion Oct 18, 2025
12a7783
Additional code cleanup.
kinyoklion Oct 18, 2025
a80d0a5
Keep socket close logic.
kinyoklion Oct 18, 2025
93c498a
Explicit capture for num_events for MSVC.
kinyoklion Oct 18, 2025
8ee6a0d
Remove handlers that CURL no longer needs.
kinyoklion Oct 19, 2025
b3e35ba
Undo hello app changes.
kinyoklion Oct 19, 2025
718f7be
Remove debug logs.
kinyoklion Oct 19, 2025
75c79b8
Update examples/proxy-validation-test/README.md
kinyoklion Oct 22, 2025
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
34 changes: 30 additions & 4 deletions .github/actions/ci/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ inputs:
description: 'Whether to run ./build-release-windows.sh for the CMake target'
required: false
default: 'false'
use_curl:
description: 'Whether to enable CURL networking (LD_CURL_NETWORKING=ON)'
required: false
default: 'false'

runs:
using: composite
Expand All @@ -44,22 +48,30 @@ runs:
- name: Install OpenSSL
uses: ./.github/actions/install-openssl
id: install-openssl
- name: Install CURL
if: inputs.use_curl == 'true'
uses: ./.github/actions/install-curl
id: install-curl
- name: Build Library
shell: bash
run: ./scripts/build.sh ${{ inputs.cmake_target }} ON
run: ./scripts/build.sh ${{ inputs.cmake_target }} ON ${{ inputs.use_curl }}
env:
BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }}
Boost_DIR: ${{ steps.install-boost.outputs.Boost_DIR }}
OPENSSL_ROOT_DIR: ${{ steps.install-openssl.outputs.OPENSSL_ROOT_DIR }}
CURL_ROOT: ${{ steps.install-curl.outputs.CURL_ROOT }}
Copy link
Member

Choose a reason for hiding this comment

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

Is it safe to reference a step that might be skipped?

Copy link
Member Author

Choose a reason for hiding this comment

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

It should be. It should just end up with no value.

CMAKE_PREFIX_PATH: ${{ steps.install-curl.outputs.CURL_ROOT }}
Copy link

Choose a reason for hiding this comment

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

Bug: Conditional CURL Installation Causes Environment Variable Issues

The CURL_ROOT and CMAKE_PREFIX_PATH environment variables are unconditionally set using outputs from the Install CURL step. Since this step is conditional on inputs.use_curl == 'true', these variables become empty when CURL is not used. This can cause build failures or unexpected behavior in subsequent build steps.

Fix in Cursor Fix in Web

- name: Build Tests
id: build-tests
if: inputs.run_tests == 'true'
shell: bash
run: ./scripts/build.sh gtest_${{ inputs.cmake_target }} ON
run: ./scripts/build.sh gtest_${{ inputs.cmake_target }} ON ${{ inputs.use_curl }}
env:
BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }}
Boost_DIR: ${{ steps.install-boost.outputs.Boost_DIR }}
OPENSSL_ROOT_DIR: ${{ steps.install-openssl.outputs.OPENSSL_ROOT_DIR }}
CURL_ROOT: ${{ steps.install-curl.outputs.CURL_ROOT }}
CMAKE_PREFIX_PATH: ${{ steps.install-curl.outputs.CURL_ROOT }}
- name: Run Tests
if: steps.build-tests.outcome == 'success'
shell: bash
Expand All @@ -70,16 +82,30 @@ runs:
- name: Simulate Release (Linux/MacOS)
if: inputs.simulate_release == 'true'
shell: bash
run: ./scripts/build-release.sh ${{ inputs.cmake_target }}
run: |
if [ "${{ inputs.use_curl }}" == "true" ]; then
./scripts/build-release.sh ${{ inputs.cmake_target }} --with-curl
else
./scripts/build-release.sh ${{ inputs.cmake_target }}
fi
env:
BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }}
OPENSSL_ROOT_DIR: ${{ steps.install-openssl.outputs.OPENSSL_ROOT_DIR }}
CURL_ROOT: ${{ steps.install-curl.outputs.CURL_ROOT }}
CMAKE_PREFIX_PATH: ${{ steps.install-curl.outputs.CURL_ROOT }}

- name: Simulate Release (Windows)
if: inputs.simulate_windows_release == 'true'
shell: bash
run: ./scripts/build-release-windows.sh ${{ inputs.cmake_target }}
run: |
if [ "${{ inputs.use_curl }}" == "true" ]; then
./scripts/build-release-windows.sh ${{ inputs.cmake_target }} --with-curl
else
./scripts/build-release-windows.sh ${{ inputs.cmake_target }}
fi
env:
BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }}
OPENSSL_ROOT_DIR: ${{ steps.install-openssl.outputs.OPENSSL_ROOT_DIR }}
Boost_DIR: 'C:\local\boost_1_87_0\lib64-msvc-14.3\cmake\Boost-1.87.0'
CURL_ROOT: ${{ steps.install-curl.outputs.CURL_ROOT }}
CMAKE_PREFIX_PATH: ${{ steps.install-curl.outputs.CURL_ROOT }}
5 changes: 5 additions & 0 deletions .github/actions/cmake-test/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ inputs:
toolset:
description: 'Boost toolset'
required: false
cmake_extra_args:
description: 'Extra arguments to pass to CMake'
required: false
default: ''

runs:
using: composite
Expand All @@ -36,6 +40,7 @@ runs:
BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }}
OPENSSL_ROOT_DIR: ${{ steps.install-openssl.outputs.OPENSSL_ROOT_DIR }}
CMAKE_INSTALL_PREFIX: ../LAUNCHDARKLY_INSTALL
CMAKE_EXTRA_ARGS: ${{ inputs.cmake_extra_args }}
- name: Build the SDK
shell: bash
run: |
Expand Down
64 changes: 64 additions & 0 deletions .github/actions/install-curl/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Install CURL
description: 'Install CURL development libraries for all platforms.'

outputs:
CURL_ROOT:
description: The location of the installed CURL.
value: ${{ steps.determine-root.outputs.CURL_ROOT }}

runs:
using: composite
steps:
# Linux: Install via apt-get
- name: Install CURL for Ubuntu
if: runner.os == 'Linux'
id: apt-action
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y libcurl4-openssl-dev
echo "CURL_ROOT=/usr" >> $GITHUB_OUTPUT

# macOS: Install via homebrew
- name: Install CURL for macOS
if: runner.os == 'macOS'
id: brew-action
shell: bash
run: |
brew install curl
echo "CURL_ROOT=$(brew --prefix curl)" >> $GITHUB_OUTPUT

# Windows: Build CURL from source with MSVC using helper script
- name: Install CURL for Windows
if: runner.os == 'Windows'
id: windows-action
shell: pwsh
run: |
# Use the build script from the repository
& "${{ github.workspace }}\scripts\build-curl-windows.ps1" -Version "8.11.1" -InstallPrefix "C:\curl-install"

if ($LASTEXITCODE -ne 0) {
Write-Error "CURL build failed"
exit 1
}

echo "CURL_ROOT=C:\curl-install" >> $env:GITHUB_OUTPUT

- name: Determine root
id: determine-root
shell: bash
run: |
if [ ! -z "$ROOT_APT" ]; then
echo "CURL_ROOT=$ROOT_APT" >> $GITHUB_OUTPUT
echo Setting CURL_ROOT to "$ROOT_APT"
elif [ ! -z "$ROOT_BREW" ]; then
echo "CURL_ROOT=$ROOT_BREW" >> $GITHUB_OUTPUT
echo Setting CURL_ROOT to "$ROOT_BREW"
elif [ ! -z "$ROOT_WINDOWS" ]; then
echo "CURL_ROOT=$ROOT_WINDOWS" >> $GITHUB_OUTPUT
echo Setting CURL_ROOT to "$ROOT_WINDOWS"
fi
env:
ROOT_APT: ${{ steps.apt-action.outputs.CURL_ROOT }}
ROOT_BREW: ${{ steps.brew-action.outputs.CURL_ROOT }}
ROOT_WINDOWS: ${{ steps.windows-action.outputs.CURL_ROOT }}
Loading
Loading