Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
73 changes: 58 additions & 15 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Release Project
name: Add Installers to Release

on:
push:
Expand All @@ -8,29 +8,72 @@ env:
BUILD_TYPE: Release

jobs:
build:
name: Building Debian Ubuntu Packages
runs-on: ubuntu-latest
build_linux:
name: Building Linux Packages
runs-on: ${{matrix.os}}
defaults:
run:
shell: bash
strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm]
build-variant: [shared, static]
package-type: [debian, rpm]
include:
- package-type: debian
extension: deb
- package-type: rpm
extension: rpm
steps:
- name: Checkout Respond Repository
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3

- name: Build Debian Package
uses: actions/checkout@v6
- name: Run CMake
run: |
echo "Building Linux"
cmake --workflow --preset package-release-debian-${{matrix.build-variant}}-workflow
shell: bash
- name: Create a zip file with specific files/folders
shell: powershell
cmake --preset package-${{matrix.build-variant}} && cmake --build --preset package-${{matrix.build-variant}}
- name: Run CPack
run: |
Compress-Archive -Path "${{ github.workspace }}/build/${{ matrix.build-variant }}/*.deb" -DestinationPath "${{ matrix.build-variant }}.zip"
- name: Upload Debian Package to Release
cpack --preset ${{matrix.package-type}}-${{matrix.build-variant}}

- name: Upload Linux Package to Release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: "${{ matrix.build-variant }}.zip"
file: ${{ github.workspace }}/build/${{ matrix.build-variant }}/*.${{ matrix.extension }}
file_glob: true
tag: ${{ github.ref }}

# Currently incurring errors on the workflow: 1) CPack Error: Problem running NSIS command 2) CPack Error: Problem compressing the directory 3) CPack Error: Error when generating package: respond

# build_windows:
# name: Building Windows Packages
# runs-on: ${{matrix.os}}
# defaults:
# run:
# shell: bash
# strategy:
# matrix:
# os: [windows-latest]
# build-variant: [shared, static]
# package-type: [nsis]
# include:
# - package-type: nsis
# extension: exe
# steps:
# - name: Checkout Respond Repository
# uses: actions/checkout@v6
# - name: Install NSIS
# run: choco install -y nsis
# - name: Run CMake
# run: |
# cmake --preset package-${{matrix.build-variant}} && cmake --build --preset package-${{matrix.build-variant}}
# - name: Run CPack
# run: |
# cpack --preset ${{matrix.package-type}}-${{matrix.build-variant}}

# - name: Upload NSIS Package to Release
# uses: svenstaro/upload-release-action@v2
# with:
# repo_token: ${{ secrets.GITHUB_TOKEN }}
# file: ${{ github.workspace }}/build/${{ matrix.build-variant }}/*.${{ matrix.extension }}
# file_glob: true
# tag: ${{ github.ref }}
71 changes: 41 additions & 30 deletions cmake/InstallRespond.cmake
Original file line number Diff line number Diff line change
@@ -1,49 +1,63 @@
message(STATUS "Installing respond version ${RESPOND_VERSION}...")
message(STATUS "Installing respond version ${RESPOND_VERSION} to ${CMAKE_INSTALL_FULL_LIBDIR} and ${CMAKE_INSTALL_FULL_INCLUDEDIR}...")

set(export_dest_dir "${CMAKE_INSTALL_LIBDIR}/respond")
set(export_cmake_dir "${CMAKE_INSTALL_LIBDIR}/cmake/respond")
set(version_config_file "${CMAKE_CURRENT_BINARY_DIR}/respondConfigVersion.cmake")

#-------------------------------------------------------------------------------
# Include files
#-------------------------------------------------------------------------------
message("Installing respond to ${CMAKE_INSTALL_FULL_LIBDIR} and ${CMAKE_INSTALL_FULL_INCLUDEDIR}...")

install(
TARGETS respond_model
# This defines where things get installed. The default is to install to the
# system level directories (e.g. /usr/lib, /usr/respond/include). We will want
# to change this to allow for user level install too via the
# CMAKE_INSTALL_PREFIX variable.
install(TARGETS respond_model
EXPORT respondTargets
FILE_SET HEADERS
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include
FILE_SET HEADERS DESTINATION include
)

install(
EXPORT respondTargets
DESTINATION ${export_cmake_dir}
NAMESPACE respond::
include(CMakePackageConfigHelpers)

# Setup the Version config file
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/respond/respondConfigVersion.cmake"
VERSION ${RESPOND_VERSION} # Variable set in root CMakeLists.txt
COMPATIBILITY AnyNewerVersion
)

include(CMakePackageConfigHelpers)
# export the targets to a file and add the prefix. This file is used by the
# config file to find the compiled targets during `find_package(respond)` calls.
export(EXPORT respondTargets
FILE "${CMAKE_CURRENT_BINARY_DIR}/respond/respondTargets.cmake"
NAMESPACE respond::
)

# Creates the config file necessary for CMake to use `find_package(respond)` # after being installed.
configure_file(
"${PROJECT_SOURCE_DIR}/cmake/respondConfig.cmake.in"
"${PROJECT_BINARY_DIR}/respondConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/respond/respondConfig.cmake"
@ONLY
)
set(project_config "${PROJECT_BINARY_DIR}/respondConfig.cmake")

write_basic_package_version_file(
${version_config_file}
COMPATIBILITY ExactVersion
# Define where to install the config files and install the targets before the
# config files. This is so that the config files can actually find the targets
set(ConfigPackageLocation lib/cmake/respond)
install(
EXPORT respondTargets
FILE respondTargets.cmake
NAMESPACE respond::
DESTINATION ${ConfigPackageLocation}
)

# Finally, install the config files
install(
FILES
${project_config}
${version_config_file}
DESTINATION ${export_cmake_dir}
"${CMAKE_CURRENT_BINARY_DIR}/respond/respondConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/respond/respondConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/respond"
)

#-------------------------------------------------------------------------------
# CPack Options for RESPOND
# CPack: This helps us create various installers. All options are controlled in
# the `respondCPackOptions.cmake.in` config file. Please do not change CPack
# itself, only the Options file!
#-------------------------------------------------------------------------------
configure_file(
"${PROJECT_SOURCE_DIR}/cmake/respondCPackOptions.cmake.in"
Expand All @@ -52,7 +66,4 @@ configure_file(
)
set(CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/respondCPackOptions.cmake")

#-------------------------------------------------------------------------------
# Support creation of installable packages
#-------------------------------------------------------------------------------
include(CPack)
2 changes: 1 addition & 1 deletion cmake/LoadEigen.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ FetchContent_Declare(
GIT_TAG "3.4.0"
GIT_SHALLOW TRUE
EXCLUDE_FROM_ALL
# FIND_PACKAGE_ARGS NAMES Eigen3
FIND_PACKAGE_ARGS NAMES Eigen3
)

# Turn off Eigen Testing and Docs
Expand Down
28 changes: 9 additions & 19 deletions cmake/respondCPackOptions.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ set(CPACK_PROJECT_URL "https://github.com/SyndemicsLab/respond")
set(CPACK_PACKAGE_NAME @PROJECT_NAME@)
set(CPACK_PACKAGE_VENDOR "Syndemics Lab at Boston Medical Center")
set(CPACK_PACKAGE_CONTACT "Benjamin Linas <Benjamin.Linas@bmc.org>")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A cohort based Markov model studying various cost impacts in treating substance use disorder.")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The RESPOND (Researching Effective Strategies to Prevent Opioid Use Disorder) model library. This library acts as a tool for building decision science Markov models to study the treatment dynamics of substance use disorder.")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")


set(CPACK_PACKAGE_VERSION_MAJOR @PROJECT_VERSION_MAJOR@)
set(CPACK_PACKAGE_VERSION_MINOR @PROJECT_VERSION_MINOR@)
set(CPACK_PACKAGE_VERSION_PATCH @PROJECT_VERSION_PATCH@)
Expand All @@ -21,29 +24,16 @@ set(CPACK_PACKAGE_VERSION @PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJE
set(CPACK_RPM_PACKAGE_LICENSE "AGPLv3")
set(CPACK_RPM_PACKAGE_GROUP "Development/Libraries")
set(CPACK_RPM_PACKAGE_URL ${CPACK_PROJECT_URL})
set(CPACK_RPM_PACKAGE_DESCRIPTION "Syndemics Modeling Library.")
set(CPACK_RPM_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
set(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
set(CPACK_RPM_PACKAGE_NAME "${CPACK_PACKAGE_NAME}")
if(CPACK_RPM_PACKAGE_RELEASE)
set(CPACK_RPM_FILE_NAME "${CPACK_RPM_FILE_NAME}-${CPACK_RPM_PACKAGE_RELEASE}")
endif()
if(CPACK_RPM_PACKAGE_ARCHITECTURE)
set(CPACK_RPM_FILE_NAME "${CPACK_RPM_FILE_NAME}.${CPACK_RPM_PACKAGE_ARCHITECTURE}")
endif()
set(CPACK_RPM_FILE_NAME "${CPACK_RPM_FILE_NAME}.rpm")
set(CPACK_RPM_FILE_NAME RPM-DEFAULT)

#-------------------------------------------------------------------------------
# CPack Debian Variables
#-------------------------------------------------------------------------------
set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${CPACK_PROJECT_URL})
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "Syndemics Modeling Library.")
set(CPACK_DEBIAN_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
set(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}")
if(CPACK_DEBIAN_PACKAGE_RELEASE)
set(CPACK_DEBIAN_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}-${CPACK_DEBIAN_PACKAGE_RELEASE}")
endif()
if(CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
set(CPACK_DEBIAN_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}.${${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}}")
endif()
set(CPACK_DEBIAN_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}.deb")
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
4 changes: 0 additions & 4 deletions cmake/respondConfig.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,4 @@ include(CMakeFindDependencyMacro)
find_dependency(Eigen3 REQUIRED)
find_dependency(spdlog REQUIRED)

if(@RESPOND_BUILD_TESTS@)
find_dependency(GTest REQUIRED) # Only if tests are build
endif()

include("${CMAKE_CURRENT_LIST_DIR}/respondTargets.cmake")
2 changes: 1 addition & 1 deletion tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ target_include_directories(respond_tests
target_link_libraries(respond_tests
PUBLIC
respond_model
Eigen3::Eigen
spdlog::spdlog
GTest::gmock_main
Eigen3::Eigen
)

gtest_discover_tests(respond_tests
Expand Down