Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
169 changes: 118 additions & 51 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ name: CI

on:
push:
branches: [ main, develop ]
branches: [main, develop]
pull_request:
branches: [ main ]
branches: [main]
release:
types: [published]

Expand All @@ -32,42 +32,109 @@ jobs:
runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- name: Configure CMake
run: cmake --preset=test
- name: Configure CMake
run: cmake --preset=test

- name: Build
run: cmake --build --preset=test
- name: Build
run: cmake --build --preset=test

- name: Test
run: ctest --preset=test
- name: Test
run: ctest --preset=test

clang-tidy:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
install-test:
name: Test Installation (${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs: test
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]

- name: Setup Ninja
uses: ashutoshvarma/setup-ninja@master
steps:
- uses: actions/checkout@v5

- name: Build and Install
run: |
cmake --preset=default
cmake --build --preset=default
cmake --install build/default --prefix ${{ runner.temp }}/install

- name: Test find_package
shell: bash
run: |
# Create a minimal test to verify the installation works with find_package
mkdir -p ${{ runner.temp }}/test-find-package
cd ${{ runner.temp }}/test-find-package

# Get project name from CMakeLists.txt
PROJECT_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\(.*\))/\1/' | awk '{print $1}')

# Create test CMakeLists.txt
cat > CMakeLists.txt << EOF
cmake_minimum_required(VERSION 3.20)
project(test-find-package CXX)

set(CMAKE_PREFIX_PATH "${{ runner.temp }}/install")
find_package(\${PROJECT_NAME} REQUIRED)

message(STATUS "Successfully found \${PROJECT_NAME}")
EOF

# Test find_package
cmake -B build -S .

- name: Test CPMFindPackage
shell: bash
run: |
# Create test to verify CPMFindPackage works (tries find_package first, then CPM)
mkdir -p ${{ runner.temp }}/test-cpm
cd ${{ runner.temp }}/test-cpm

# Download CPM.cmake
mkdir cmake
curl -L https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake -o cmake/CPM.cmake

# Get project name from CMakeLists.txt
PROJECT_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\(.*\))/\1/' | awk '{print $1}')

# Create test CMakeLists.txt that uses CPMFindPackage
cat > CMakeLists.txt << EOF
cmake_minimum_required(VERSION 3.20)
project(test-cpm CXX)

set(CMAKE_PREFIX_PATH "${{ runner.temp }}/install")
set(CPM_SOURCE_CACHE \${CMAKE_SOURCE_DIR}/.cache/cpm CACHE PATH "CPM cache")
include(cmake/CPM.cmake)

# CPMFindPackage tries find_package first, then falls back to CPMAddPackage
CPMFindPackage(
NAME \${PROJECT_NAME}
GITHUB_REPOSITORY ${{ github.repository }}
GIT_TAG ${{ github.sha }}
)

message(STATUS "Successfully acquired \${PROJECT_NAME} via CPMFindPackage")
EOF

# Test CPMFindPackage (should find the installed version first)
cmake -B build -S .

- name: Setup Clang
uses: egor-tensin/setup-clang@v1
with:
version: latest
clang-tidy:
runs-on: ubuntu-latest

- name: Install clang-tidy
run: sudo apt-get update && sudo apt-get install -y clang-tidy
steps:
- uses: actions/checkout@v5

- name: Configure CMake with clang-tidy
run: cmake --preset=clang-tidy
- name: Configure CMake with clang-tidy
run: cmake --preset=clang-tidy

- name: Build with clang-tidy
run: cmake --build --preset=clang-tidy
- name: Build with clang-tidy
run: cmake --build --preset=clang-tidy

- name: Run tests with clang-tidy
run: ctest --preset=clang-tidy
- name: Run tests with clang-tidy
run: ctest --preset=clang-tidy

docs:
runs-on: ubuntu-latest
Expand All @@ -76,27 +143,27 @@ jobs:
id-token: write
pages: write
contents: read

steps:
- uses: actions/checkout@v5
- name: Install Doxygen
uses: ssciwr/doxygen-install@v1
- name: Configure CMake
run: cmake --preset=docs
- name: Build Documentation
run: cmake --build --preset=docs
- name: Setup Pages
uses: actions/configure-pages@v5

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: build/docs/html

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
- uses: actions/checkout@v5

- name: Install Doxygen
uses: ssciwr/doxygen-install@v1

- name: Configure CMake
run: cmake --preset=docs

- name: Build Documentation
run: cmake --build --preset=docs

- name: Setup Pages
uses: actions/configure-pages@v5

- name: Upload artifact
uses: actions/upload-pages-artifact@v4
with:
path: build/docs/html

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
1 change: 0 additions & 1 deletion .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
{
"_comment": "Auto-generated from cpp-library (https://github.com/stlab/cpp-library) - Do not edit this file directly",
"recommendations": [
"matepek.vscode-catch2-test-adapter",
"llvm-vs-code-extensions.vscode-clangd",
Expand Down
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ include(cmake/CPM.cmake)
# NAME cpp-library
# URL "${CMAKE_SOURCE_DIR}/../cpp-library"
# )
CPMAddPackage("gh:stlab/[email protected]")
CPMAddPackage("gh:stlab/cpp-library#3ab13f2be3b835fd1e6feaab7845088c31642eba")
# CPMAddPackage("gh:stlab/[email protected]")
include(${cpp-library_SOURCE_DIR}/cpp-library.cmake)

# Let cpp-library handle the project declaration and version detection
Expand Down
17 changes: 16 additions & 1 deletion CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,29 @@
"CMAKE_CXX_EXTENSIONS": "OFF",
"CPP_LIBRARY_FORCE_INIT": "ON"
}
},
{
"name": "install",
"displayName": "Local Install Test",
"description": "Configuration for testing installation locally (installs to build/install/prefix)",
"binaryDir": "${sourceDir}/build/install",
"generator": "Ninja",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"BUILD_TESTING": "OFF",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"CMAKE_CXX_EXTENSIONS": "OFF",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install/prefix"
}
}
],
"buildPresets": [
{ "name": "default", "displayName": "Default Build", "configurePreset": "default" },
{ "name": "test", "displayName": "Build Tests", "configurePreset": "test" },
{ "name": "docs", "displayName": "Build Docs", "configurePreset": "docs", "targets": "docs" },
{ "name": "clang-tidy", "displayName": "Build with Clang-Tidy", "configurePreset": "clang-tidy" },
{ "name": "init", "displayName": "Initialize Templates", "configurePreset": "init" }
{ "name": "init", "displayName": "Initialize Templates", "configurePreset": "init" },
{ "name": "install", "displayName": "Build for Local Install", "configurePreset": "install" }
],
"testPresets": [
{ "name": "test", "displayName": "Run All Tests", "configurePreset": "test", "output": { "outputOnFailure": true } },
Expand Down