Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
a223d4b
Merge branch 'hotfix/2.10.12' into feature/new-amqp
nsoblath May 13, 2026
1fb8b82
Added build of rmqcpp (along with all dependencies) and removed libra…
nsoblath May 21, 2026
7191584
Removing SimpleAmqpClient and starting to use rmqcpp instead
nsoblath-pnnl May 27, 2026
64fa2be
Adding the dependencies for rmqcpp and rmqcpp itself to the Dockerfile
nsoblath-pnnl May 27, 2026
27f7a66
Added missing boost modules
nsoblath-pnnl May 28, 2026
da9267a
Switched dl-cpp type aliases and conversion functions from SimpleAmqp…
nsoblath-pnnl May 28, 2026
2f4e0a9
Finished most updates to core
nsoblath-pnnl May 28, 2026
a5b3bc8
Completed most updates to concurrent_receiver
nsoblath-pnnl May 28, 2026
50b822c
Moved endpoint_listener_receiver to endpoint files. Removed listener.…
nsoblath-pnnl May 28, 2026
ec98791
Modifications to service are complete
nsoblath-pnnl May 28, 2026
56ddfb3
Updated monitor
nsoblath-pnnl May 28, 2026
9d67226
Updated agent and relayer, and cleaned up a few other outdated things.
nsoblath-pnnl May 28, 2026
b39f5cf
Updated message.hh/cc to translate messages to and from rmqcpp
nsoblath-pnnl May 29, 2026
8fb87a1
Completed the next phase of updates, removing execution in threads an…
nsoblath-pnnl May 29, 2026
5078216
Adding move constructor to receiver
nsoblath-pnnl May 29, 2026
66a6a50
Setup mesh topology in service and monitor
nsoblath-pnnl May 29, 2026
d8b052b
Added unit tests for multi-chunk message assembly
nsoblath-pnnl May 29, 2026
8afa5e6
Added new unit tests as suggested by claude sonnet 4.6
nsoblath-pnnl May 29, 2026
1397939
Added new testing files to the CMakeLists.txt file.
nsoblath-pnnl May 29, 2026
9e89579
Debugging based on new unit tests
nsoblath-pnnl May 29, 2026
b863001
Fixing old comment
nsoblath-pnnl May 29, 2026
bfbbcdf
Fixing leftover reference to the external directory
nsoblath-pnnl May 30, 2026
f2c11bf
Copied vcpkg-based dependency install to test_builds job; made a coup…
nsoblath-pnnl May 30, 2026
f90ad8c
Switch to using build-in vcpkg on the github actions runners; Add tma…
nsoblath-pnnl May 30, 2026
43faa8d
Fixing durability and updating newman tests
nsoblath-pnnl Jun 3, 2026
dcfeee5
Add the multi-chunk integration test
nsoblath-pnnl Jun 3, 2026
4870532
Renamed dl-tests.sh to run-dl-tests.sh and use --exit-code-from optio…
nsoblath-pnnl Jun 3, 2026
0f2548a
Added broker-restart test
nsoblath-pnnl Jun 3, 2026
18b5136
Updated integration test documentation
nsoblath-pnnl Jun 3, 2026
b429bfd
Renamed concurrent_receiver to message_dispatcher and updated source …
nsoblath-pnnl Jun 3, 2026
20248a1
Updated documentation for recent code changes and fixing a few bugs/h…
nsoblath-pnnl Jun 3, 2026
da8a395
Fixed integration test execution for GitHub Actions
nsoblath-pnnl Jun 3, 2026
e2ed1b8
Moved unit testing to a directory parallel to integration testing
nsoblath-pnnl Jun 3, 2026
5cee17c
[no ci] Merge branch 'develop' into feature/new-amqp
nsoblath-pnnl Jun 5, 2026
6f09755
Another round of adjustments and bug fixes: brought back mesh setup t…
nsoblath-pnnl Jun 11, 2026
7ff2839
Refining the interactions between classes
nsoblath-pnnl Jun 11, 2026
37f143f
Refining the changes and fixing a couple bugs
nsoblath-pnnl Jun 15, 2026
0d588a7
Update docker action versions and temporarily disable test_builds
nsoblath-pnnl Jun 15, 2026
340534f
Make API functions public
nsoblath-pnnl Jun 16, 2026
657a9dc
Fix setting of service pointers
nsoblath-pnnl Jun 19, 2026
ae53a85
Removing durable/ephermeral queue distinction in the API in exchange …
nsoblath-pnnl Jun 26, 2026
58073c7
Switch to durable exchanges and test for durable queues
nsoblath-pnnl Jun 26, 2026
a4bb9c6
Undoing a stupid
nsoblath-pnnl Jun 30, 2026
a43e473
Remove duplicate exchange name variables; make exchange declaration f…
nsoblath-pnnl Jul 1, 2026
27b3e7c
Use separate topologies for alerts and requests
nsoblath-pnnl Jul 15, 2026
8551e98
Add ability to specify vcpkg toolchain file
nsoblath-pnnl Jul 15, 2026
c2b4ba4
Throw exception for queue not created
nsoblath-pnnl Jul 15, 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
80 changes: 62 additions & 18 deletions .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ env:
REGISTRY_OLD: docker.io
BASE_IMAGE_REPO: python
BASE_IMAGE_TAG: '3.12.1-slim-bookworm'
RMQCPP_CHECKOUT: cc6885319ccb97b8a6d13e09e83a52c43aab16c7

# narg/NARG (number-of-CPU argument to pass to the builds) are based on OS-specific CPU counts in the GitHub-hosted GHA runners.
# checked 1/4/2024: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources
Expand Down Expand Up @@ -55,22 +56,22 @@ jobs:

- name: Set up Docker Buildx
id: setup_buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
with:
driver: docker

- name: Login to GHCR
# This condition should match the `push` condition in the `Build` step just below
if: ${{ github.event.inputs.keep-test-image == 'true' }}
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build
id: build
uses: docker/build-push-action@v5
uses: docker/build-push-action@v7
with:
context: .
push: ${{ github.event.inputs.keep-test-image == 'true' }}
Expand All @@ -83,12 +84,13 @@ jobs:
build_examples=TRUE
enable_testing=TRUE
narg=${{ env.NARG }}
rmqcpp_checkout=${{ env.RMQCPP_CHECKOUT }}
platforms: linux/amd64
tags: ${{ env.DL_CPP_TAG }}

- name: Build Integration Tests
id: build_int_tests
uses: docker/build-push-action@v5
uses: docker/build-push-action@v7
with:
context: ./testing/integration
push: false
Expand All @@ -109,7 +111,8 @@ jobs:
- name: Integration Tests
run: |
cd testing/integration
./do-testing.sh ${{ env.INT_TAG }}
./run-dl-tests.sh ${{ env.INT_TAG }}
./run-broker-restart-test.sh ${{ env.INT_TAG }}

# For debugging
# - name: Setup tmate session
Expand All @@ -119,6 +122,9 @@ jobs:

test_builds:

# temporarily disable
if: false

runs-on: ${{ matrix.os }}

# This job runs for all events that trigger this workflow
Expand All @@ -130,8 +136,10 @@ jobs:
include:
- os: ubuntu-22.04
narg: 2
triplet: x64-linux-release
- os: macos-latest
narg: 3
triplet: arm64-osx-release


steps:
Expand All @@ -154,7 +162,6 @@ jobs:
if: startsWith(matrix.os, 'macos')
run: |
brew install \
boost \
rabbitmq-c \
rapidjson \
yaml-cpp
Expand All @@ -164,10 +171,46 @@ jobs:
run: |
sudo apt-get update
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y \
libboost-all-dev \
librabbitmq-dev \
rapidjson-dev \
libyaml-cpp-dev

- name: Install dependencies -- common
run: |
${VCPKG_INSTALLATION_ROOT}/vcpkg install --triplet ${{ matrix.triplet }} \
boost-filesystem \
boost-system \
boost-chrono \
boost-variant \
boost-uuid
git clone https://github.com/bloomberg/rmqcpp.git
cd rmqcpp
git checkout ${{ env.RMQCPP_CHECKOUT }}
${VCPKG_INSTALLATION_ROOT}/vcpkg install --triplet ${{ matrix.triplet }}
mkdir -p build
cd build
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=${VCPKG_INSTALLATION_ROOT}/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_TESTING=OFF \
..
make -j${narg} install


# mkdir -p /usr/local/share/libpcre2-8
# printf '%s\n' \
# 'include("/usr/local/share/pcre2/pcre2-config.cmake")' \
# 'if(NOT TARGET libpcre2-8::pcre2-8 AND TARGET pcre2::pcre2-8-static)' \
# ' add_library(libpcre2-8::pcre2-8 ALIAS pcre2::pcre2-8-static)' \
# 'endif()' \
# 'set(libpcre2-8_FOUND TRUE)' \
# > /usr/local/share/libpcre2-8/libpcre2-8Config.cmake
# RMQCPP_CONFIG=$(find /usr/local -name rmqcppConfig.cmake 2>/dev/null | head -1)
# test -n "${RMQCPP_CONFIG}"
# if ! grep -q 'find_dependency(zstd' "${RMQCPP_CONFIG}"; then \
# sed -i '/include.*rmqcppTargets/i find_dependency(zstd CONFIG)' "${RMQCPP_CONFIG}"; \
# fi

- name: Configure
run: |
Expand All @@ -186,9 +229,9 @@ jobs:
./run_dl_tests

# For debugging
# - name: Setup tmate session
# if: ${{ ! success() }}
# uses: mxschmitt/action-tmate@v3
- name: Setup tmate session
if: ${{ ! success() }}
uses: mxschmitt/action-tmate@v3


build_and_push:
Expand Down Expand Up @@ -238,7 +281,7 @@ jobs:

- name: Docker meta
id: docker_meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@v6
with:
images: |
${{ env.REGISTRY_OLD }}/${{ github.repository }}
Expand All @@ -255,7 +298,7 @@ jobs:
- name: Docker meta - integration
id: docker_meta_integration
if: ${{ matrix.do-integration }}
uses: docker/metadata-action@v5
uses: docker/metadata-action@v6
with:
images: |
${{ env.REGISTRY }}/${{ github.repository }}
Expand All @@ -273,27 +316,27 @@ jobs:

- name: Set up Docker Buildx
id: setup_buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
with:
buildkitd-flags: --debug

- name: Login to Docker Hub
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY_OLD }}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Login to GHCR
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push
id: build_push
uses: docker/build-push-action@v5
uses: docker/build-push-action@v7
with:
context: .
push: ${{ github.event_name == 'push' }} # limited to develop, main, and tags; don't push on PR
Expand All @@ -303,14 +346,15 @@ jobs:
build_type=${{ matrix.build-type }}
build_examples=${{ matrix.build-examples }}
enable_testing=${{ matrix.enable-testing }}
narg=${{env.NARG }}
narg=${{ env.NARG }}
rmqcpp_checkout=${{ env.RMQCPP_CHECKOUT }}
tags: ${{ steps.docker_meta.outputs.tags }}
platforms: linux/amd64,linux/arm64,linux/arm/v7

- name: Build and push - integration
id: build_push_integration
if: ${{ matrix.do-integration }}
uses: docker/build-push-action@v5
uses: docker/build-push-action@v7
with:
context: ./testing/integration
push: ${{ github.event_name == 'push' }} # limited to develop, main, and tags; don't push on PR
Expand Down
3 changes: 0 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
[submodule "scarab"]
path = scarab
url = https://github.com/project8/scarab
[submodule "external/SimpleAmqpClient"]
path = external/SimpleAmqpClient
url = https://github.com/project8/SimpleAmqpClient
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ The goal is to make safe, minimal, style-consistent changes to dripline-cpp.

- `core` owns AMQP connectivity and send/listen primitives.
- `message` and derived types (`msg_request`, `msg_reply`, `msg_alert`) implement protocol objects and chunking.
- `receiver` and `listener` manage chunk assembly and concurrent processing.
- `receiver` manages chunk assembly; `message_dispatcher` (formerly `concurrent_receiver`) holds the rmqcpp Consumer and dispatches assembled messages.
- `endpoint` implements request dispatch and lockout semantics.
- `service` composes endpoint + listener/receiver + heartbeater + scheduler.
- `service` composes endpoint + message_dispatcher + heartbeater + scheduler.
- `hub` maps message specifiers to user-registered handlers.
- `agent` and `monitor` provide CLI-oriented message send/observe tooling.

Expand Down
64 changes: 11 additions & 53 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ cmake_minimum_required (VERSION 3.12)
# setup #
#########

if( DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set( CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" )
message( STATUS "Setting vcpkg toolchain file: ${CMAKE_TOOLCHAIN_FILE}" )
endif()

cmake_policy( SET CMP0048 NEW ) # version in project()
project( Dripline VERSION 2.10.12 )

Expand Down Expand Up @@ -75,57 +80,14 @@ if( Dripline_ENABLE_TESTING )
endif()


####################
# SimpleAmqpClient #
####################
##########
# rmqcpp #
##########

# SimpleAmqpClient needs to be built independently from, but as a submodule and dependency of, dripline-cpp.
# In other words, the configuration and build environments need to be kept separate.

# First we run the configure stage of SimpleAmqpClient during the configure (cmake) process of dripline-cpp.
# This build takes place in its own build directory, but it installs in the same place as dripline-cpp.
# We do this here instead of below in the ExternalProject so that dripline-cpp can learn about the SimpleAmqpClient targets at the configure stage.

if( NOT EXISTS ${PROJECT_BINARY_DIR}/external )
execute_process(
COMMAND mkdir external
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
endif()

execute_process(
COMMAND cmake -D CMAKE_INSTALL_PREFIX:STRING=${CMAKE_INSTALL_PREFIX}
-D PACKAGE_CONFIG_PREFIX:STRING=${PACKAGE_CONFIG_PREFIX}
-D TOP_PROJECT_CMAKE_CONFIG_DIR:STRING=${TOP_PROJECT_CMAKE_CONFIG_DIR}
-D LIB_INSTALL_DIR:STRING=${LIB_INSTALL_DIR}
-D BIN_INSTALL_DIR:STRING=${BIN_INSTALL_DIR}
-D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
${PROJECT_SOURCE_DIR}/external
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/external
)

# Second we use the ExternalProject module to build and install SimpleAmqpClient.
# This takes place during the build phase of dripline-cpp.
# Note that we disable the configure stage of the ExternalProject because we already took care of the configure stage above.
include(ExternalProject)

ExternalProject_Add( DriplineExternal
PREFIX ${CMAKE_INSTALL_PREFIX}
SOURCE_DIR ${PROJECT_SOURCE_DIR}/external
BINARY_DIR ${PROJECT_BINARY_DIR}/external
CONFIGURE_COMMAND ""
BUILD_ALWAYS 1
BUILD_COMMAND $(MAKE)
INSTALL_DIR ${CMAKE_INSTALL_PREFIX}
INSTALL_COMMAND $(MAKE) install
)

# Finally we use find_package() to learn about the Kassiopeia build targets.
find_package( SimpleAmqpClient REQUIRED CONFIG HINTS ${PROJECT_BINARY_DIR}/external )
find_package( rmqcpp REQUIRED )

# Added to the public libraries so that downstream code can successfully get the necessary include directories
list( APPEND PUBLIC_EXT_LIBS SimpleAmqpClient::SimpleAmqpClient )
list( APPEND PUBLIC_EXT_LIBS rmqcpp::rmq )


##################
Expand All @@ -143,10 +105,6 @@ else( Dripline_BUILD_PYTHON )
set_option( Scarab_BUILD_PYTHON FALSE )
endif( Dripline_BUILD_PYTHON )

# SimpleAmqpClient needs system and chrono
list( APPEND Scarab_BOOST_COMPONENTS chrono )


#####################
# Prepare for Build #
#####################
Expand Down Expand Up @@ -195,7 +153,7 @@ endif()
#########

if( Dripline_ENABLE_TESTING )
add_subdirectory( testing )
add_subdirectory( testing/unit )
endif()

##################
Expand Down
Loading
Loading