Skip to content

Commit 3488b22

Browse files
committed
* Updating workflow to have three jobs.
* Adding three badges to readme.md
1 parent cff473b commit 3488b22

3 files changed

Lines changed: 91 additions & 67 deletions

File tree

Lines changed: 81 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,29 @@
1-
# This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform.
2-
# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml
3-
name: CMake on multiple platforms
1+
# Copyright (c) 2026, Ben McCart
2+
# Boost Software License - Version 1.0 - August 17th, 2003
3+
#
4+
# Permission is hereby granted, free of charge, to any person or organization
5+
# obtaining a copy of the software and accompanying documentation covered by
6+
# this license (the "Software") to use, reproduce, display, distribute,
7+
# execute, and transmit the Software, and to prepare derivative works of the
8+
# Software, and to permit third-parties to whom the Software is furnished to
9+
# do so, all subject to the following:
10+
#
11+
# The copyright notices in the Software and this entire statement, including
12+
# the above license grant, this restriction and the following disclaimer,
13+
# must be included in all copies of the Software, in whole or in part, and
14+
# all derivative works of the Software, unless such copies or derivative
15+
# works are solely in the form of machine-executable object code generated by
16+
# a source language processor.
17+
#
18+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20+
# FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
21+
# SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
22+
# FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
23+
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24+
# DEALINGS IN THE SOFTWARE.
25+
26+
name: Build and Test for GCC, Clang, and MSVC
427

528
on:
629
push:
@@ -9,67 +32,60 @@ on:
932
branches: [ "main" ]
1033

1134
jobs:
12-
build:
13-
runs-on: ${{ matrix.os }}
14-
15-
strategy:
16-
# Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable.
17-
fail-fast: false
18-
19-
# Set up a matrix to run the following 3 configurations:
20-
# 1. <Windows, Release, latest MSVC compiler toolchain on the default runner image, default generator>
21-
# 2. <Linux, Release, latest GCC compiler toolchain on the default runner image, default generator>
22-
# 3. <Linux, Release, latest Clang compiler toolchain on the default runner image, default generator>
23-
#
24-
# To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list.
25-
matrix:
26-
os: [ubuntu-latest, windows-latest]
27-
build_type: [Release]
28-
c_compiler: [gcc, clang, cl]
29-
include:
30-
- os: windows-latest
31-
c_compiler: cl
32-
cpp_compiler: cl
33-
- os: ubuntu-latest
34-
c_compiler: gcc
35-
cpp_compiler: g++
36-
- os: ubuntu-latest
37-
c_compiler: clang
38-
cpp_compiler: clang++
39-
exclude:
40-
- os: windows-latest
41-
c_compiler: gcc
42-
- os: windows-latest
43-
c_compiler: clang
44-
- os: ubuntu-latest
45-
c_compiler: cl
35+
gcc:
36+
name: GCC
37+
runs-on: ubuntu-latest
38+
steps:
39+
- uses: actions/checkout@v4
40+
41+
- name: Set build directory
42+
run: echo "BUILD_DIR=build-gcc" >> $GITHUB_ENV
43+
44+
- name: Configure CMake
45+
run: cmake -B $BUILD_DIR -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=Release -S ${{ github.workspace }}
46+
47+
- name: Build
48+
run: cmake --build $BUILD_DIR --config Release
4649

50+
- name: Test
51+
working-directory: ${{ env.BUILD_DIR }}
52+
run: ctest --build-config Release --output-on-failure
53+
54+
clang:
55+
name: Clang
56+
runs-on: ubuntu-latest
4757
steps:
48-
- uses: actions/checkout@v4
49-
50-
- name: Set reusable strings
51-
# Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file.
52-
id: strings
53-
shell: bash
54-
run: |
55-
echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT"
56-
57-
- name: Configure CMake
58-
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
59-
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
60-
run: >
61-
cmake -B ${{ steps.strings.outputs.build-output-dir }}
62-
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }}
63-
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }}
64-
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
65-
-S ${{ github.workspace }}
66-
67-
- name: Build
68-
# Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
69-
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }}
70-
71-
- name: Test
72-
working-directory: ${{ steps.strings.outputs.build-output-dir }}
73-
# Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
74-
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
75-
run: ctest --build-config ${{ matrix.build_type }}
58+
- uses: actions/checkout@v4
59+
60+
- name: Set build directory
61+
run: echo "BUILD_DIR=build-clang" >> $GITHUB_ENV
62+
63+
- name: Configure CMake
64+
run: cmake -B $BUILD_DIR -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -S ${{ github.workspace }}
65+
66+
- name: Build
67+
run: cmake --build $BUILD_DIR --config Release
68+
69+
- name: Test
70+
working-directory: ${{ env.BUILD_DIR }}
71+
run: ctest --build-config Release --output-on-failure
72+
73+
msvc:
74+
name: MSVC
75+
runs-on: windows-latest
76+
steps:
77+
- uses: actions/checkout@v4
78+
79+
- name: Set build directory
80+
run: echo "BUILD_DIR=build-msvc" >> $GITHUB_ENV
81+
82+
- name: Configure CMake
83+
run: cmake -B $BUILD_DIR -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=cl -DCMAKE_BUILD_TYPE=Release -S ${{ github.workspace }}
84+
85+
- name: Build
86+
run: cmake --build $BUILD_DIR --config Release
87+
88+
- name: Test
89+
working-directory: ${{ env.BUILD_DIR }}
90+
run: ctest --build-config Release --output-on-failure
91+

‎CMakeLists.txt‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,3 @@ enable_testing()
3232

3333
add_subdirectory(fuzzy)
3434
add_subdirectory(test)
35-
36-
# TODO: Add tests and install targets if needed.

‎README.md‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
11
# **fuzzy_cpp**
2+
[![GCC](https://github.com/benmccart/fuzzy_cpp/actions/workflows/cmake-multi-platform.yml/badge.svg?branch=main&job=GCC)](
3+
https://github.com/benmccart/fuzzy_cpp/actions/workflows/cmake-multi-platform.yml
4+
)
5+
[![Clang](https://github.com/benmccart/fuzzy_cpp/actions/workflows/cmake-multi-platform.yml/badge.svg?branch=main&job=Clang)](
6+
https://github.com/benmccart/fuzzy_cpp/actions/workflows/cmake-multi-platform.yml
7+
)
8+
[![MSVC](https://github.com/benmccart/fuzzy_cpp/actions/workflows/cmake-multi-platform.yml/badge.svg?branch=main&job=MSVC)](
9+
https://github.com/benmccart/fuzzy_cpp/actions/workflows/cmake-multi-platform.yml
10+
)
11+
212
A header only C++ library for use in a number of problem domains. Applications include control systems, simulations, or any other problem domain where a solution can be modeled with linguistic rules by a domain expert. The library is modeled after fundamental concepts presented in _FUZZY LOGIC : Intelligence, Control, and Information_ by John Yen and Reza Langari.
313
## Dependencies
414
1. A C++ compiler that conforms to the ISO C++20 standard specification.

0 commit comments

Comments
 (0)