Skip to content

Commit 4c2a4dd

Browse files
committed
1
1 parent 8dc1676 commit 4c2a4dd

File tree

8 files changed

+430
-140
lines changed

8 files changed

+430
-140
lines changed

.github/workflows/build-cpack-packages.yml

Lines changed: 84 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
- name: Build packages
4848
run: make build-package
4949

50-
- name: Install driver package (DEB)
50+
- name: Install driver packages (DEB)
5151
run: |
5252
set -euo pipefail
5353
shopt -s nullglob
@@ -56,9 +56,29 @@ jobs:
5656
echo "No driver DEB packages produced"
5757
exit 1
5858
fi
59+
echo "Installing ${#DRIVER_PACKAGES[@]} DEB package(s):"
60+
for pkg in "${DRIVER_PACKAGES[@]}"; do
61+
echo " - $(basename "$pkg")"
62+
done
63+
# Install both runtime and dev packages
5964
sudo dpkg -i "${DRIVER_PACKAGES[@]}"
6065
sudo apt-get install -f -y
6166
67+
- name: Verify dev package installation
68+
run: |
69+
set -euo pipefail
70+
# Verify headers are installed
71+
if [ ! -f /usr/include/cassandra.h ]; then
72+
echo "ERROR: cassandra.h header not found - dev package may not be installed"
73+
exit 1
74+
fi
75+
# Verify pkg-config file is installed
76+
if ! pkg-config --exists scylla-cpp-driver; then
77+
echo "ERROR: scylla-cpp-driver.pc not found - dev package may not be installed"
78+
exit 1
79+
fi
80+
echo "Dev package verification successful"
81+
6282
- name: Build smoke-test application package
6383
run: |
6484
set -euo pipefail
@@ -103,14 +123,17 @@ jobs:
103123

104124
macos:
105125
name: macOS packages
106-
runs-on: macos-13
126+
runs-on: macos-15-intel
107127
steps:
108128
- uses: actions/checkout@v4
109129

110130
- name: Build packages
111131
run: make build-package
112132

113-
- name: Install driver package (pkg)
133+
- name: Build smoke-test application package
134+
run: make -C packaging/smoke-test-app package BUILD_TYPE=${{ inputs.build-type }}
135+
136+
- name: Install driver packages (pkg)
114137
run: |
115138
set -euo pipefail
116139
shopt -s nullglob
@@ -119,30 +142,35 @@ jobs:
119142
echo "No driver pkg packages produced"
120143
exit 1
121144
fi
145+
echo "Installing ${#packages[@]} pkg package(s):"
146+
for pkg in "${packages[@]}"; do
147+
echo " - $(basename "$pkg")"
148+
done
149+
# Install all packages (macOS productbuild creates a single package with components)
122150
for pkg in "${packages[@]}"; do
123151
sudo installer -pkg "$pkg" -target /
124152
done
125153
126-
- name: Build smoke-test application package
154+
- name: Verify dev package installation
127155
run: |
128156
set -euo pipefail
129-
make -C packaging/smoke-test-app package \
130-
BUILD_TYPE=${{ inputs.build-type }}
157+
# Verify headers are installed
158+
if [ ! -f /usr/local/include/cassandra.h ]; then
159+
echo "ERROR: cassandra.h header not found - dev package may not be installed"
160+
exit 1
161+
fi
162+
# Verify pkg-config file is installed
163+
if ! PKG_CONFIG_PATH=/usr/local/lib/pkgconfig pkg-config --exists scylla-cpp-driver; then
164+
echo "ERROR: scylla-cpp-driver.pc not found - dev package may not be installed"
165+
exit 1
166+
fi
167+
echo "Dev package verification successful"
131168
132169
- name: Install smoke-test application package (pkg)
133-
run: |
134-
set -euo pipefail
135-
make -C packaging/smoke-test-app install-pkg
170+
run: make -C packaging/smoke-test-app install-pkg
136171

137172
- name: Run smoke-test application against local Scylla
138-
run: |
139-
set -euo pipefail
140-
cleanup() {
141-
docker compose -f tests/examples_cluster/docker-compose.yml down --remove-orphans
142-
}
143-
trap cleanup EXIT
144-
docker compose -f tests/examples_cluster/docker-compose.yml up -d --wait
145-
/usr/local/bin/scylla-cpp-driver-smoke-test 172.43.0.2
173+
run: make -C packaging/smoke-test-app test-package
146174

147175
- name: Collect artifacts
148176
run: |
@@ -168,6 +196,22 @@ jobs:
168196
steps:
169197
- uses: actions/checkout@v4
170198

199+
- name: Install Docker
200+
shell: pwsh
201+
run: |
202+
$ErrorActionPreference = 'Stop'
203+
$dockerService = Get-Service -Name docker -ErrorAction SilentlyContinue
204+
if (-not $dockerService) {
205+
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
206+
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
207+
Install-Package -Name docker -ProviderName DockerMsftProvider -Force
208+
}
209+
try {
210+
Start-Service docker -ErrorAction Stop
211+
} catch {
212+
Write-Warning "Docker service failed to start: $($_.Exception.Message)"
213+
}
214+
171215
- name: Add WiX to PATH
172216
shell: pwsh
173217
run: |
@@ -177,21 +221,43 @@ jobs:
177221
- name: Build packages
178222
run: make build-package
179223

180-
- name: Install driver package (MSI)
224+
- name: Install driver packages (MSI)
181225
shell: pwsh
182226
run: |
183227
$ErrorActionPreference = 'Stop'
184228
$packages = Get-ChildItem build -Filter *.msi
185229
if (-not $packages) {
186230
throw "No driver MSI packages produced"
187231
}
232+
Write-Host "Installing $($packages.Count) MSI package(s):"
233+
foreach ($pkg in $packages) {
234+
Write-Host " - $($pkg.Name)"
235+
}
236+
# Install all packages (Windows WIX creates a single MSI with components)
188237
foreach ($pkg in $packages) {
189238
$process = Start-Process msiexec.exe -ArgumentList "/i `"$($pkg.FullName)`" /qn /norestart" -Wait -PassThru
190239
if ($process.ExitCode -ne 0) {
191240
throw "Failed to install driver package $($pkg.Name): exit code $($process.ExitCode)"
192241
}
193242
}
194243
244+
- name: Verify dev package installation
245+
shell: pwsh
246+
run: |
247+
$ErrorActionPreference = 'Stop'
248+
$installPath = "C:\Program Files\ScyllaDB\Scylla CPP Driver"
249+
# Verify headers are installed
250+
$headerPath = Join-Path $installPath "include\cassandra.h"
251+
if (-not (Test-Path $headerPath)) {
252+
throw "ERROR: cassandra.h header not found at $headerPath - dev package may not be installed"
253+
}
254+
# Verify pkg-config file is installed
255+
$pkgConfigPath = Join-Path $installPath "lib\pkgconfig\scylla-cpp-driver.pc"
256+
if (-not (Test-Path $pkgConfigPath)) {
257+
throw "ERROR: scylla-cpp-driver.pc not found at $pkgConfigPath - dev package may not be installed"
258+
}
259+
Write-Host "Dev package verification successful"
260+
195261
- name: Build smoke-test application package
196262
shell: pwsh
197263
run: |

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
.vscode/
22
.zed
33
build/
4+
build-macos/
5+
**/build/
6+
**/build-macos/
47
scylla-rust-wrapper/target/
58
.idea/
69
cmake-build-debug/

CMakeLists.txt

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,16 @@ option(CASS_USE_LIBUV "Use libuv" OFF)
5151

5252
set(CASS_CPP_STANDARD "11" CACHE STRING "C++ standard (11, 14, 17, etc.)")
5353

54+
# Component metadata used for macOS productbuild packages. Other platforms
55+
# ignore these values, so keep the defaults empty by default.
56+
set(SCYLLA_DRIVER_COMPONENT_NAME "scylla_cpp_driver")
57+
set(SCYLLA_DRIVER_COMPONENT_ARGS COMPONENT ${SCYLLA_DRIVER_COMPONENT_NAME})
58+
59+
# Define component names for runtime and dev packages
60+
# These must be set before add_subdirectory() calls so install commands can use them
61+
set(SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME "${SCYLLA_DRIVER_COMPONENT_NAME}")
62+
set(SCYLLA_DRIVER_DEV_COMPONENT_NAME "${SCYLLA_DRIVER_COMPONENT_NAME}-dev")
63+
5464
if(CASS_BUILD_SHARED)
5565
set(BUILD_SHARED_LIBS ON)
5666
endif()
@@ -269,6 +279,25 @@ endif()
269279
set(CPACK_MONOLITHIC_INSTALL ON)
270280
set(CPACK_VERBATIM_VARIABLES ON)
271281

282+
set(CPACK_MONOLITHIC_INSTALL OFF)
283+
284+
# Set the list of components for CPack
285+
set(CPACK_COMPONENTS_ALL ${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME} ${SCYLLA_DRIVER_DEV_COMPONENT_NAME})
286+
287+
include(CPackComponent)
288+
289+
# Runtime component: shared libraries only
290+
cpack_add_component(${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}
291+
DISPLAY_NAME "Scylla C++ Driver Runtime"
292+
DESCRIPTION "Shared libraries for the Scylla C++ Driver"
293+
REQUIRED)
294+
295+
# Dev component: headers, static libraries, pkg-config files, and development symlinks
296+
cpack_add_component(${SCYLLA_DRIVER_DEV_COMPONENT_NAME}
297+
DISPLAY_NAME "Scylla C++ Driver Development"
298+
DESCRIPTION "Headers, static libraries, and development files for the Scylla C++ Driver"
299+
DEPENDS ${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME})
300+
272301
if(WIN32)
273302
set(CPACK_GENERATOR "WIX")
274303
set(CPACK_PACKAGE_INSTALL_DIRECTORY "ScyllaDB\\Scylla CPP Driver")
@@ -285,20 +314,46 @@ elseif(APPLE)
285314
"${_CPACK_PACKAGE_NAME}-${PROJECT_VERSION_STRING}-macos")
286315
set(CPACK_PRODUCTBUILD_IDENTIFIER "com.scylladb.cpp-rust-driver")
287316
set(CPACK_PRODUCTBUILD_SIGNING_IDENTITY "")
317+
set(CPACK_PRODUCTBUILD_COMPONENT_INSTALL ON)
318+
288319
else()
289320
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
290321
set(CPACK_GENERATOR "DEB;RPM")
291322
set(CPACK_PACKAGE_FILE_NAME
292323
"${_CPACK_PACKAGE_NAME}-${PROJECT_VERSION_STRING}-${CMAKE_SYSTEM_NAME}")
324+
325+
# DEB package configuration
326+
set(CPACK_DEB_COMPONENT_INSTALL ON)
293327
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
294328
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "ScyllaDB")
295329
set(CPACK_DEBIAN_PACKAGE_SECTION "database")
296330
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${CPACK_PACKAGE_HOMEPAGE_URL})
297331
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
332+
333+
# DEB runtime package
334+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}")
335+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_PACKAGE_SECTION "libs")
336+
337+
# DEB dev package
338+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}-dev")
339+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_SECTION "libdevel")
340+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_DEPENDS "${_CPACK_PACKAGE_NAME} (= \${CPACK_DEBIAN_PACKAGE_VERSION})")
341+
342+
# RPM package configuration
343+
set(CPACK_RPM_COMPONENT_INSTALL ON)
298344
set(CPACK_RPM_PACKAGE_LICENSE "Apache-2.0")
299345
set(CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_HOMEPAGE_URL})
300346
set(CPACK_RPM_PACKAGE_RELEASE 1)
301347
set(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
348+
349+
# RPM runtime package
350+
set(CPACK_RPM_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}")
351+
set(CPACK_RPM_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_PACKAGE_GROUP "System Environment/Libraries")
352+
353+
# RPM dev package (devel suffix is standard for RPM)
354+
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}-devel")
355+
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_GROUP "Development/Libraries")
356+
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_REQUIRES "${_CPACK_PACKAGE_NAME} = ${PROJECT_VERSION_STRING}-${CPACK_RPM_PACKAGE_RELEASE}")
302357
endif()
303358

304359
include(CPack)

Makefile

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ SHELL = bash
66
ifeq ($(OS),Windows_NT)
77
SHELL := pwsh.exe
88
.SHELLFLAGS := -NoProfile -Command
9+
.ONESHELL:
910
endif
1011

1112
UNAME_S := $(shell uname -s)
@@ -199,7 +200,12 @@ BUILD_DIR := "${CURRENT_DIR}build"
199200
INTEGRATION_TEST_BIN := ${BUILD_DIR}/cassandra-integration-tests
200201
CMAKE_FLAGS ?=
201202
CMAKE_BUILD_TYPE ?= Release
202-
CMAKE_INSTALL_PREFIX ?= /usr
203+
204+
ifeq ($(OS_TYPE),macos)
205+
CMAKE_INSTALL_PREFIX ?= /usr/local
206+
else
207+
CMAKE_INSTALL_PREFIX ?= /usr
208+
endif
203209

204210
ifeq ($(OS_TYPE),macos)
205211
CPACK_GENERATORS ?= DragNDrop productbuild
@@ -301,23 +307,31 @@ build-examples:
301307
$(MAKE) .ubuntu-package-install-dependencies; \
302308
fi
303309

304-
.package-build-prepare-windows:
305-
if (-not (choco list --local-only --exact openssl.light | Select-String '^openssl.light$')) { choco install openssl.light --no-progress -y }
306-
if (-not (choco list --local-only --exact pkgconfiglite | Select-String '^pkgconfiglite$')) { choco install pkgconfiglite --no-progress -y }
310+
.package-build-prepare-windows-openssl:
311+
if (-not (choco list --local-only --exact openssl.light | Select-String '^openssl.light$$')) {
312+
choco install openssl.light --no-progress -y
313+
}
314+
315+
.package-build-prepare-windows-pkgconfiglite:
316+
if (-not (choco list --local-only --exact pkgconfiglite | Select-String '^pkgconfiglite$$')) {
317+
choco install pkgconfiglite --no-progress -y
318+
}
319+
320+
.package-build-prepare-windows: .package-build-prepare-windows-openssl .package-build-prepare-windows-pkgconfiglite
307321

308322
ifeq ($(OS_TYPE),macos)
309323
.package-build-prepare:
310-
ifeq ($(OS_TYPE),windows)
324+
else ifeq ($(OS_TYPE),windows)
311325
.package-build-prepare: .package-build-prepare-windows
312326
else
313327
.package-build-prepare: .package-build-prepare-ubuntu
314328
endif
315329

316330
.package-configure: .package-build-prepare
317331
ifeq ($(OS_TYPE),windows)
318-
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DCMAKE_INSTALL_PREFIX=$(CMAKE_INSTALL_PREFIX) $(CMAKE_FLAGS)
319-
else
320332
cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) $(CMAKE_FLAGS)
333+
else
334+
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DCMAKE_INSTALL_PREFIX=$(CMAKE_INSTALL_PREFIX) $(CMAKE_FLAGS)
321335
endif
322336

323337
build-driver: .package-configure

0 commit comments

Comments
 (0)