Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add cmake-init generated CMake files #4

Open
wants to merge 11 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 5 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
216 changes: 216 additions & 0 deletions .github/workflows/cmake.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
name: Continuous Integration

on:
push:
branches:
- master
- develop
- feature/*

pull_request:
branches:
- develop

jobs:
lint:
runs-on: ubuntu-24.04

steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with: {python-version: "3.12"}

- name: Install codespell
run: pip3 install codespell

# - name: Lint
# if: always()
# working-directory: asio
# run: cmake -D FORMAT_COMMAND=clang-format-18 -P cmake/lint.cmake || echo ignored

- name: Spell check
if: always()
working-directory: asio
run: cmake -P cmake/spell.cmake || echo ignored

coverage:
needs: [lint]

runs-on: ubuntu-24.04

# To enable coverage, delete the last line from the conditional below and
# edit the "<name>" placeholder to your GitHub name.
# If you do not wish to use codecov, then simply delete this job from the
# workflow.
if: github.repository_owner == 'ClausKlein'

steps:
- uses: actions/checkout@v4

- name: Install LCov
run: sudo apt-get update -q
&& sudo apt-get install lcov -q -y

- name: Configure
working-directory: asio
run: cmake --preset=ci-coverage

- name: Build
working-directory: asio
run: cmake --build build/coverage -j 4

- name: Test
working-directory: asio/build/coverage
run: ctest --output-on-failure --no-tests=error -j 4

- name: Process coverage info
working-directory: asio
run: cmake --build build/coverage -t coverage

- name: Submit to codecov.io
uses: codecov/codecov-action@v4
with:
file: build/coverage/coverage.info

sanitize:
needs: [lint]

runs-on: ubuntu-24.04

env: {CXX: clang++-18}

steps:
- uses: actions/checkout@v4

- name: Configure
working-directory: asio
run: cmake --preset=ci-sanitize

- name: Build
working-directory: asio
run: cmake --build build/sanitize -j 4

- name: Test
working-directory: asio/build/sanitize
env:
ASAN_OPTIONS: "strict_string_checks=1:\
detect_stack_use_after_return=1:\
check_initialization_order=1:\
strict_init_order=1:\
detect_leaks=1"
UBSAN_OPTIONS: print_stacktrace=1
run: ctest --output-on-failure --no-tests=error -j 4

test:
needs: [lint]

strategy:
fail-fast: false
matrix:
os: [macos-15, ubuntu-24.04, windows-2022]

runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v4

- name: Install static analyzers
if: matrix.os == 'ubuntu-24.04'
run: |
sudo apt-get install cppcheck ninja-build -y -q
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 19 all
sudo update-alternatives --install \
/usr/bin/clang-tidy clang-tidy \
/usr/bin/clang-tidy-19 150

- name: Install llvm-19
if: startsWith(matrix.os, 'macos')
run: |
brew install llvm@19
echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> /Users/runner/.envrc
echo 'export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"' >> /Users/runner/.envrc
echo 'export CPPFLAGS="-L/opt/homebrew/opt/llvm/include"' >> /Users/runner/.envrc

- name: Configure windows
if: matrix.os == 'windows-2022'
working-directory: asio
run: |
Add-Content "$env:GITHUB_ENV" 'UseMultiToolTask=true'
Add-Content "$env:GITHUB_ENV" 'EnforceProcessCountAcrossBuilds=true'
cmake --preset=ci-windows

- name: Configure macos
if: matrix.os == 'macos-15'
working-directory: asio
shell: bash
run: |
source /Users/runner/.envrc
which clang++ && clang++ --version
CXX=$(brew --prefix llvm@19)/bin/clang++ cmake --preset=ci-macos

- name: Configure ubuntu
if: matrix.os == 'ubuntu-24.04'
working-directory: asio
env:
CXX: clang++-19
run: cmake --preset=ci-ubuntu

- name: Build
working-directory: asio
run: cmake --build build --config Release -j 4

- name: Install
working-directory: asio
run: cmake --install build --config Release --prefix prefix

- name: Test
working-directory: asio/build
run: ctest --output-on-failure --no-tests=error -C Release -j 4

docs:
# Deploy docs only when builds succeed
needs: [sanitize, test]

runs-on: ubuntu-24.04

# To enable, first you have to create an orphaned gh-pages branch:
#
# git switch --orphan gh-pages
# git commit --allow-empty -m "Initial commit"
# git push -u origin gh-pages
#
# Edit the <name> placeholder below to your GitHub name, so this action
# runs only in your repository and no one else's fork. After these, delete
# this comment and the last line in the conditional below.
# If you do not wish to use GitHub Pages for deploying documentation, then
# simply delete this job similarly to the coverage one.
if: github.ref == 'refs/heads/master'
&& github.event_name == 'push'
&& github.repository_owner == 'ClausKlein'

steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with: {python-version: "3.12"}

- name: Install m.css dependencies
run: pip3 install jinja2 Pygments

- name: Install Doxygen
run: sudo apt-get update -q
&& sudo apt-get install doxygen -q -y

- name: Build docs
working-directory: asio
run: cmake "-DPROJECT_SOURCE_DIR=$PWD" "-DPROJECT_BINARY_DIR=$PWD/build"
-P cmake/docs-ci.cmake

- name: Deploy docs
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: build/docs/html
139 changes: 139 additions & 0 deletions asio/.CMakeUserPresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 25,
"patch": 0
},
"configurePresets": [
{
"name": "dev-common",
"hidden": true,
"generator": "Ninja",
"inherits": [
"dev-mode"
],
"cacheVariables": {
"BUILD_MCSS_DOCS": "ON"
}
},
{
"name": "dev-Linux",
"binaryDir": "${sourceDir}/build/${presetName}",
"inherits": [
"dev-common",
"ci-Linux"
],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "dev-Darwin",
"binaryDir": "${sourceDir}/build/${presetName}",
"inherits": [
"dev-common",
"ci-Darwin"
],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "dev-Windows",
"binaryDir": "${sourceDir}/build/${presetName}",
"inherits": [
"dev-common",
"ci-windows"
],
"environment": {
"UseMultiToolTask": "true",
"EnforceProcessCountAcrossBuilds": "true"
}
},
{
"name": "dev",
"binaryDir": "${sourceDir}/build/dev",
"inherits": "dev-<hostSystemName>"
},
{
"name": "dev-coverage",
"binaryDir": "${sourceDir}/build/coverage",
"inherits": [
"dev-mode",
"coverage-Linux"
]
}
],
"buildPresets": [
{
"name": "dev",
"configurePreset": "dev",
"configuration": "Debug",
"jobs": 12,
"targets": [
"install"
]
},
{
"name": "verify",
"configurePreset": "dev",
"jobs": 12,
"targets": [
"all_verify_interface_header_sets"
]
}
],
"testPresets": [
{
"name": "dev",
"configurePreset": "dev",
"configuration": "Debug",
"output": {
"outputOnFailure": true
},
"execution": {
"jobs": 12,
"noTestsAction": "error"
}
}
],
"packagePresets": [
{
"name": "dev",
"configurePreset": "dev",
"generators": [
"TGZ"
]
}
],
"workflowPresets": [
{
"name": "dev",
"steps": [
{
"type": "configure",
"name": "dev"
},
{
"type": "build",
"name": "dev"
},
{
"type": "build",
"name": "verify"
},
{
"type": "test",
"name": "dev"
},
{
"type": "package",
"name": "dev"
}
]
}
]
}
Loading
Loading