Skip to content

Commit 23cc548

Browse files
authored
CI (#67)
* Updating build_release.yml for saving a static library * Updating Unit Testing CI * removing install.sh script * Adding public headers to deployment * Adding mkdir command * Adding dockerfile * Changes to CMake build and conversion to header only library * removing src directory * adding glaze * Moving around some naming and tests * Overhaul for csv parsing * Fixing DBSource and CSVSource files and tests * Updating Config Tests * fixing DBSource move constructor and ModelData tests * Updating build script * removing install from workflow * Adjusting eigen location * Updating the README * Addressing PR comments * Adding image and updating doxygen
1 parent 4b294c4 commit 23cc548

40 files changed

Lines changed: 10061 additions & 1088 deletions
Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
name: Build and Upload Release
1+
name: Build and Upload Static Release
22

33
on:
4-
workflow_dispatch:
5-
branches:
6-
- main
74
release:
85
types: [published]
96

@@ -18,7 +15,7 @@ jobs:
1815
build:
1916
strategy:
2017
matrix:
21-
os: [ubuntu-latest, macos-latest]
18+
os: [ubuntu-latest]
2219
name: Build Release
2320
runs-on: ${{ matrix.os }}
2421
steps:
@@ -30,41 +27,27 @@ jobs:
3027
uses: MarkusJx/install-boost@v2.4.5
3128
id: install-boost
3229
with:
33-
boost_version: 1.82.0
30+
boost_version: 1.84.0
3431
platform_version: 22.04
3532

36-
- name: MacOS Install Boost
37-
if: ${{ matrix.os == 'macos-latest' }}
38-
uses: MarkusJx/install-boost@v2.4.5
39-
id: install-boost
40-
with:
41-
boost_version: 1.82.0
42-
platform_version: 13
43-
4433
- name: Configure CMake
4534
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
4635
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
4736
run: |
48-
cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBoost_INCLUDE_DIR=${{steps.install-boost.outputs.BOOST_ROOT}}/include -DBoost_LIBRARY_DIRS=${{steps.install-boost.outputs.BOOST_ROOT}}/lib
37+
cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_SHARED_LIBS=OFF
4938
env:
5039
BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }}
5140

5241
- name: Build
5342
# Build your program with the given configuration
5443
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
5544

56-
- name: Install DataManagement
57-
run: cmake --install ${{github.workspace}}/build/ --prefix "dminstall"
58-
59-
- name: Zip DataManagement
60-
run: zip -r dminstall-${{ matrix.os }}.zip "dminstall"
61-
6245
- name: Get Latest Release Tag
6346
id: get-latest-release
6447
uses: ddbaptiste/get-latest-release@v1.0.0
6548

6649
- name: Release and Upload
67-
run: gh release upload ${{ steps.get-latest-release.outputs.latest-release }} dminstall-${{ matrix.os }}.zip
50+
run: gh release upload ${{ steps.get-latest-release.outputs.latest-release }} libDataManagement.a include/DataManagerBase.hpp include/DataManager.hpp
6851
env:
6952
GITHUB_TOKEN: ${{ github.TOKEN }}
7053
shell: bash

.github/workflows/unit_testing.yml

Lines changed: 14 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# This starter workflow is for a CMake project running on a single platform. There is a different starter workflow if you need cross-platform coverage.
2-
# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-multi-platform.yml
31
name: Cross Platform Testing
42

53
on:
@@ -9,7 +7,6 @@ on:
97
branches: [ "main" ]
108

119
env:
12-
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
1310
BUILD_TYPE: Debug
1411

1512
jobs:
@@ -25,52 +22,26 @@ jobs:
2522
uses: MarkusJx/install-boost@v2.4.5
2623
id: install-boost
2724
with:
28-
boost_version: 1.82.0
25+
boost_version: 1.84.0
2926
platform_version: 22.04
3027
toolset: 'gcc'
3128

3229
- name: Install GTest Ubuntu
3330
run: sudo apt-get install libgtest-dev
3431

35-
- name: Build and Test
36-
working-directory: ${{github.workspace}}
37-
shell: bash {0}
38-
run: BOOST_ROOT="${{ steps.install-boost.outputs.BOOST_ROOT }}" ./scripts/build.sh -p
32+
- name: Create Build Directory
33+
run: mkdir build
3934

40-
# windows-build:
41-
# # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
42-
# # You can convert this to a matrix build if you need cross-platform coverage.
43-
# # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
44-
# runs-on: windows-latest
45-
# steps:
46-
# - uses: actions/checkout@v3
35+
- name: Configure CMake
36+
working-directory: ${{github.workspace}}/build
37+
run: cmake .. -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_TESTS=ON -DBUILD_SHARED_LIBS=OFF -DDATAMANAGEMENT_INSTALL=OFF
38+
env:
39+
BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }}
4740

48-
# - name: Install Boost
49-
# uses: MarkusJx/install-boost@v2.4.4
50-
# id: install-boost
51-
# with:
52-
# boost_version: 1.82.0
53-
# platform_version: 2022
54-
# toolset: 'mingw'
41+
- name: Build Project
42+
working-directory: ${{github.workspace}}/build
43+
run: cmake --build .
5544

56-
# - name: Install MSYS2
57-
# uses: msys2/setup-msys2@v2
58-
59-
# - name: Install GTest Windows
60-
# run: msys2 -c 'yes | pacman -S mingw-w64-x86_64-gtest'
61-
62-
# - name: Configure CMake
63-
# # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
64-
# # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
65-
# run: |
66-
# cmake -B ${{github.workspace}}/build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_DATA_TESTS=ON -DBoost_INCLUDE_DIR=${{steps.install-boost.outputs.BOOST_ROOT}}/include -DBoost_LIBRARY_DIRS=${{steps.install-boost.outputs.BOOST_ROOT}}/lib
67-
# env:
68-
# BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }}
69-
70-
# - name: Build
71-
# # Build your program with the given configuration
72-
# run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
73-
74-
# - name: Test
75-
# working-directory: ${{github.workspace}}/build
76-
# run: 'test/dataTests.exe'
45+
- name: Run Tests
46+
working-directory: ${{github.workspace}}/build
47+
run: tests/dataTests

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@ compile_commands.json
1010
CTestTestfile.cmake
1111
_deps
1212

13-
docs/
13+
docs/doxygen/
1414
.vscode/
1515
build/*
1616
!build/.gitkeep
1717
_install/
1818

1919
!.gitkeep
2020
lib/*
21-
bin/*

CMakeLists.txt

Lines changed: 84 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,123 +1,108 @@
1-
cmake_minimum_required(VERSION 3.19)
2-
set(CMAKE_CXX_STANDARD 17)
1+
cmake_minimum_required(VERSION 3.20)
2+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
3+
4+
include(utils)
5+
datamanagement_extract_version()
36

47
project(
5-
DataManagement
6-
VERSION 1.0.0
8+
datamanagement
9+
VERSION ${DATAMANAGEMENT_VERSION}
710
DESCRIPTION "A Data Management Library Used By Syndemics Lab Simulation Models"
11+
LANGUAGES CXX
812
)
913

10-
set(CMAKE_INCLUDE_CURRENT_DIR ON)
11-
set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
12-
13-
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
14+
message(STATUS "Build data management: ${DATAMANAGEMENT_VERSION}")
1415

15-
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib)
16-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib)
17-
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)
18-
19-
find_package(SQLite3 REQUIRED)
20-
find_package(Boost REQUIRED)
16+
include(GNUInstallDirs)
2117

22-
option(BUILD_TESTS "enable DataManagement unit tests" OFF)
23-
if (NOT BUILD_TESTS STREQUAL OFF)
24-
add_subdirectory(tests)
18+
# ---------------------------------------------------------------------------------------
19+
# Set default build to release
20+
# ---------------------------------------------------------------------------------------
21+
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
22+
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose Release or Debug" FORCE)
2523
endif()
2624

27-
option(BUILD_SHARED_LIBS "Build Using Shared Libraries" ON)
25+
# ---------------------------------------------------------------------------------------
26+
# Compiler config
27+
# ---------------------------------------------------------------------------------------
28+
set(CMAKE_CXX_STANDARD 20)
29+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
30+
31+
# ---------------------------------------------------------------------------------------
32+
# Windows CXX Extensions
33+
# ---------------------------------------------------------------------------------------
34+
set(CMAKE_CXX_EXTENSIONS OFF)
35+
if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN" OR CMAKE_SYSTEM_NAME MATCHES "MSYS" OR CMAKE_SYSTEM_NAME MATCHES "MINGW")
36+
set(CMAKE_CXX_EXTENSIONS ON)
37+
endif()
2838

29-
if(BUILD_SHARED_LIBS)
30-
add_library(${PROJECT_NAME} SHARED)
31-
else()
32-
add_library(${PROJECT_NAME} STATIC)
39+
# ---------------------------------------------------------------------------------------
40+
# Set DATAMANAGEMENT_MASTER_PROJECT to ON if we are building synmodels directly
41+
# ---------------------------------------------------------------------------------------
42+
if(NOT DEFINED DATAMANAGEMENT_MASTER_PROJECT)
43+
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
44+
set( DATAMANAGEMENT_MASTER_PROJECT ON)
45+
else()
46+
set( DATAMANAGEMENT_MASTER_PROJECT OFF)
47+
endif()
3348
endif()
3449

35-
target_sources(${PROJECT_NAME}
36-
PRIVATE
37-
${PROJECT_SOURCE_DIR}/src/DataManager.cpp
38-
)
50+
# ---------------------------------------------------------------------------------------
51+
# Set all default options
52+
# ---------------------------------------------------------------------------------------
53+
include(options)
3954

40-
target_include_directories(${PROJECT_NAME}
41-
PUBLIC
42-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
43-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
44-
PRIVATE
45-
${Boost_INCLUDE_DIRS}
46-
)
55+
# ---------------------------------------------------------------------------------------
56+
# Set position independent code
57+
# ---------------------------------------------------------------------------------------
58+
if(DATAMANAGEMENT_BUILD_PIC)
59+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
60+
endif()
4761

48-
target_link_libraries(${PROJECT_NAME}
49-
PRIVATE
50-
${SQLite3_LIBRARIES}
51-
${Boost_LIBRARY_DIRS}
52-
${Boost_LIBRARIES}
53-
)
62+
# ---------------------------------------------------------------------------------------
63+
# Build the library
64+
# ---------------------------------------------------------------------------------------
65+
add_library(datamanagement INTERFACE)
66+
add_library(datamanagement::datamanagement ALIAS datamanagement)
5467

55-
# note that it is not CMAKE_INSTALL_PREFIX we are checking here
56-
if(DEFINED CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
57-
message(
58-
STATUS
59-
"CMAKE_INSTALL_PREFIX is not set\n"
60-
"Default value: ${CMAKE_INSTALL_PREFIX}\n"
61-
"Will set it to ${CMAKE_SOURCE_DIR}/install"
62-
)
63-
set(CMAKE_INSTALL_PREFIX
64-
"${CMAKE_SOURCE_DIR}/install"
65-
CACHE PATH "Where the library will be installed to" FORCE
66-
)
67-
else()
68-
message(
69-
STATUS
70-
"CMAKE_INSTALL_PREFIX was already set\n"
71-
"Current value: ${CMAKE_INSTALL_PREFIX}"
72-
)
68+
option(BUILD_TESTS "enable datamanagement unit tests" OFF)
69+
if (NOT BUILD_TESTS STREQUAL OFF)
70+
add_subdirectory(tests)
7371
endif()
7472

75-
SET(public_headers
76-
include/DataManager.hpp
77-
include/DataManagerBase.hpp
73+
target_include_directories(${PROJECT_NAME}
74+
INTERFACE
75+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
76+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/include>
7877
)
7978

80-
set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${public_headers}")
81-
82-
set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "d")
79+
# ---------------------------------------------------------------------------------------
80+
# Link Dependencies
81+
# ---------------------------------------------------------------------------------------
82+
include(MakeDependenciesAvailable)
8383

84-
include(GNUInstallDirs)
85-
86-
# install the target and create export-set
87-
install(TARGETS ${PROJECT_NAME}
88-
EXPORT "${PROJECT_NAME}Targets"
89-
# these get default values from GNUInstallDirs, no need to set them
90-
#RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # bin
91-
#LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # lib
92-
#ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # lib
93-
# except for public headers, as we want them to be inside a library folder
94-
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} # include/SomeLibrary
95-
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} # include
84+
target_link_libraries(${PROJECT_NAME}
85+
INTERFACE
86+
SQLiteCpp
87+
Boost::boost
88+
spdlog::spdlog
89+
Eigen3::Eigen
9690
)
9791

98-
# generate and install export file
99-
install(EXPORT "${PROJECT_NAME}Targets"
100-
FILE "${PROJECT_NAME}Targets.cmake"
101-
NAMESPACE DataManagement::
102-
DESTINATION cmake
103-
)
92+
set_target_properties(datamanagement PROPERTIES VERSION ${DATAMANAGEMENT_VERSION} SOVERSION ${DATAMANAGEMENT_VERSION_MAJOR}.${DATAMANAGEMENT_VERSION_MINOR})
10493

105-
include(CMakePackageConfigHelpers)
94+
# ---------------------------------------------------------------------------------------
95+
# Build Tests
96+
# ---------------------------------------------------------------------------------------
97+
if(DATAMANAGEMENT_BUILD_TESTS)
98+
message(STATUS "Generating tests")
99+
enable_testing()
100+
add_subdirectory(tests)
101+
endif()
106102

107-
# generate the version file for the config file
108-
write_basic_package_version_file(
109-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
110-
VERSION "${version}"
111-
COMPATIBILITY AnyNewerVersion
112-
)
113-
# create config file
114-
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
115-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
116-
INSTALL_DESTINATION cmake
117-
)
118-
# install config files
119-
install(FILES
120-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
121-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
122-
DESTINATION cmake
123-
)
103+
# ---------------------------------------------------------------------------------------
104+
# Install
105+
# ---------------------------------------------------------------------------------------
106+
if(DATAMANAGEMENT_INSTALL)
107+
include(InstallDatamanagement)
108+
endif()

Config.cmake.in

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)