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
39 changes: 24 additions & 15 deletions .github/workflows/server_workflows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,36 @@ on:
jobs:
build-and-test:
runs-on: ubuntu-22.04
permissions: write-all
steps:
- uses: actions/checkout@v4
- name: Checkout code
uses: actions/checkout@v4

- name: Apt update
- name: Install required apt packages
run: |
sudo apt update
sudo apt install -y cmake
sudo apt install -y cmake lcov make

- name: Install Conan
run: pip3 install conan
- name: Setup Conan Client
uses: conan-io/setup-conan@v1
with:
conan_audit_token: ${{ secrets.CONAN_AUDIT_TOKEN }}

- name: Configure Conan Packages
run: |
conan profile detect --force
conan install . --build=missing
- name: Install Conan dependencies
run: conan build . --build=missing

- name: CMake Configure
run: cmake -S . -B build/Release -DCMAKE_TOOLCHAIN_FILE=build/Release/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
- name: Run GTest
run: ctest --test-dir build/Release

- name: CMake Build
run: cmake --build build/Release
- name: Coverage
shell: bash
run: |
cd build/Release
make coverage

- name: Run tests
run: ./build/Release/server_tests_bin
- name: Report Code Coverage
uses: zgosalvez/github-actions-report-lcov@v4
with:
coverage-files: build/Release/CMakeFiles/server_library.dir/src/coverage.info
artifact-name: code-coverage-report
github-token: ${{ secrets.GITHUB_TOKEN }}
25 changes: 19 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ find_package(Threads REQUIRED)

# server library
add_library(${LIBRARY}
src/HttpServer.cpp
include/HttpServer.h
include/AtomicQueue.h
include/constants.h
src/HttpServer.cpp
include/HttpServer.h
include/AtomicQueue.h
include/constants.h
)
target_include_directories(${LIBRARY} PUBLIC include)
target_compile_features(${LIBRARY} PRIVATE cxx_std_17)
Expand All @@ -27,7 +27,7 @@ target_link_libraries(${LIBRARY} PRIVATE Threads::Threads)
enable_testing()
add_executable(${TEST_TARGET} test/HttpServerTest.cpp)
target_link_libraries(${TEST_TARGET}
PRIVATE ${LIBRARY} GTest::gtest_main
PRIVATE ${LIBRARY} GTest::gtest_main
)

include(GoogleTest)
Expand All @@ -38,8 +38,21 @@ target_link_options(${TEST_TARGET} PRIVATE -O0 -g --coverage)

# server implementation executable
add_executable(${TARGET}
src/main.cpp
src/main.cpp
)
target_compile_options(${TARGET} PRIVATE -g -O0 -g --coverage)
target_link_options(${TARGET} PRIVATE -O0 -g --coverage)
target_link_libraries(${TARGET} PRIVATE ${LIBRARY})

# coverage target
# find required tools
find_program(LCOV lcov REQUIRED)
find_program(GENHTML genhtml REQUIRED)

# add coverage target
add_custom_target(coverage
# gather data
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles/server_library.dir/src
COMMAND ${LCOV} -c -d . -o coverage.info
COMMAND ${GENHTML} coverage.info -o out
)
17 changes: 4 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
## Building the source code

### Building for Release mode
## Building for Release mode
```bash
conan build . --build=missing
cmake -S . -B build/Release -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release

# runs the underlying build system (Makefiles, VStudio solution files)
cmake --build build/Release
```

## Command to run the HttpServer impl example
Expand All @@ -18,22 +14,17 @@ cmake --build build/Release
## Command to run the Tests
```bash
# run tests
./build/Release/server_test_bin
./build/Release/server_tests_bin
```

## Generation of coverage reports

```bash
cmake --build build/Release \
&& ctest \
&& cd CMakeFiles/server_library.dir/src \
&& gcov HttpServer.cpp.gcno \
&& lcov -c -d . -o coverage.info \
&& genhtml coverage.info -o out
make -C build/Release coverage
```

### Open the coverage report
```bash
# specific to Linux
xdg-open build/Debug/generators/CMakeFiles/server_library.dir/src/out/index.html
xdg-open build/Release/CMakeFiles/server_library.dir/src/out/index.html
```
13 changes: 11 additions & 2 deletions conanfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# To keep your changes, remove these comment lines, but the plugin won't be able to modify your requirements

from conan import ConanFile
from conan.tools.cmake import cmake_layout, CMakeToolchain
from conan.tools.cmake import CMake, cmake_layout, CMakeToolchain

class ConanApplication(ConanFile):
package_type = "application"
Expand All @@ -20,4 +20,13 @@ def generate(self):
def requirements(self):
requirements = self.conan_data.get('requirements', [])
for requirement in requirements:
self.requires(requirement)
self.requires(requirement)

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def package(self):
cmake = CMake(self)
cmake.install()
Loading