Skip to content

Commit

Permalink
Merge pull request #1254 from agarny/issue1253
Browse files Browse the repository at this point in the history
CI: add some "basic" GitHub Actions
  • Loading branch information
hsorby authored Nov 5, 2024
2 parents 8d0f7cc + b19bdad commit f9c95f2
Show file tree
Hide file tree
Showing 6 changed files with 300 additions and 37 deletions.
263 changes: 263 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,263 @@
name: CI

on:
pull_request:
branches: [ main ]
workflow_dispatch:

env:
BUILDCACHE_ACCURACY: STRICT
BUILDCACHE_COMPRESS_FORMAT: ZSTD
BUILDCACHE_DEBUG: -1
BUILDCACHE_LOG_FILE: ""

jobs:
cpp_python:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: 'Windows static - C++/Python'
os: windows-latest
bindings_python: ON
build_shared: OFF
unit_tests: ON
set_path: $env:Path="C:\libxml2\bin;C:\zlib\bin;"+$env:Path
additional_cmake_options: -DLIBXML2_INCLUDE_DIR="C:\libxml2\include\libxml2" -DLIBXML2_LIBRARY="C:\libxml2\lib\libxml2.lib" -DZLIB_INCLUDE_DIR="C:\zlib\include" -DZLIB_LIBRARY="C:\zlib\lib\z_dll.lib"
- name: 'Windows shared - C++/Python'
os: windows-latest
bindings_python: ON
build_shared: ON
unit_tests: ON
set_path: $env:Path="C:\libxml2\bin;C:\zlib\bin;"+$env:Path
additional_cmake_options: -DLIBXML2_INCLUDE_DIR="C:\libxml2\include\libxml2" -DLIBXML2_LIBRARY="C:\libxml2\lib\libxml2.lib" -DZLIB_INCLUDE_DIR="C:\zlib\include" -DZLIB_LIBRARY="C:\zlib\lib\z_dll.lib"
- name: 'Linux static - C++ (build only)'
os: ubuntu-latest
bindings_python: OFF
build_shared: OFF
unit_tests: OFF
- name: 'Linux shared - C++/Python'
os: ubuntu-latest
bindings_python: ON
build_shared: ON
unit_tests: ON
- name: 'macOS static - C++ (Intel)'
os: macos-13
bindings_python: OFF
build_shared: OFF
unit_tests: ON
- name: 'macOS shared - C++/Python (Intel)'
os: macos-13
bindings_python: ON
build_shared: ON
unit_tests: ON
- name: 'macOS static - C++ (ARM)'
os: macos-latest
bindings_python: OFF
build_shared: OFF
unit_tests: ON
- name: 'macOS shared - C++/Python (ARM)'
os: macos-latest
bindings_python: ON
build_shared: ON
unit_tests: ON
steps:
- name: Check out libCellML
uses: actions/checkout@v4
- name: Install Python (if needed)
if: ${{ matrix.bindings_python == 'ON' }}
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install CMake and Ninja
uses: lukka/get-cmake@latest
- name: Install buildcache
uses: mikehardy/buildcache-action@v2
with:
cache_key: ${{ matrix.os }}-${{ matrix.build_shared }}
- name: Configure MSVC (Windows only)
if: ${{ runner.os == 'Windows' }}
uses: ilammy/msvc-dev-cmd@v1
- name: Install libxml2 (Windows only)
if: ${{ runner.os == 'Windows' }}
run: |
Invoke-WebRequest -UseBasicParsing https://github.com/cellml/gha/releases/download/gha/libxml2.zip -OutFile libxml2.zip
Expand-Archive -LiteralPath libxml2.zip -DestinationPath C:\
- name: Install SWIG (macOS only and if needed)
if: ${{ runner.os == 'macOS' && matrix.bindings_python == 'ON' }}
run: |
brew install swig
- name: Install zlib (Windows only)
if: ${{ runner.os == 'Windows' }}
run: |
Invoke-WebRequest -UseBasicParsing https://github.com/cellml/gha/releases/download/gha/zlib.zip -OutFile zlib.zip
Expand-Archive -LiteralPath zlib.zip -DestinationPath C:\
- name: Configure libCellML
run: |
mkdir build
cd build
${{ matrix.set_path }}
cmake -G Ninja -DBINDINGS_PYTHON=${{ matrix.bindings_python }} -DBUILD_SHARED=${{ matrix.build_shared }} -DCOVERAGE=OFF -DLLVM_COVERAGE=OFF -DMEMCHECK=OFF -DUNIT_TESTS=${{ matrix.unit_tests }} ${{ matrix.additional_cmake_options }} ..
- name: Build libCellML
run: |
cd build
ninja
- name: Unit testing
if: ${{ matrix.unit_tests == 'ON' }}
run: |
cd build
ninja test
javascript:
name: JavaScript
runs-on: macos-latest
strategy:
fail-fast: false
env:
LIBCELLML_WASM_DIR: wasm
LIBXML2_VERSION: 2.9.10
ZLIB_VERSION: 1.2.3
steps:
- name: Check out libCellML
uses: actions/checkout@v4
- name: Install CMake and Ninja
uses: lukka/get-cmake@latest
- name: Install buildcache
uses: mikehardy/buildcache-action@v2
- name: Install Emscripten
run: |
brew install --overwrite emscripten
- name: Set up the build directory
run: |
mkdir build
- name: Build zlib
run: |
cd build
ZLIB_BUILD_DIR=zlib-wasm
git clone https://github.com/OpenCMISS-Dependencies/zlib.git -b v${ZLIB_VERSION}
mkdir ${ZLIB_BUILD_DIR}
emcmake cmake -G Ninja -S zlib -B ${ZLIB_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=~/${LIBCELLML_WASM_DIR} -DBUILD_SHARED_LIBS=OFF
cmake --build ${ZLIB_BUILD_DIR}
cmake --install ${ZLIB_BUILD_DIR}
- name: Build libxml2
run: |
cd build
LIBXML2_BUILD_DIR=libxml2-wasm
git clone https://github.com/OpenCMISS-Dependencies/libxml2.git -b v${LIBXML2_VERSION}
mkdir ${LIBXML2_BUILD_DIR}
emcmake cmake -G Ninja -S libxml2 -B ${LIBXML2_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=~/${LIBCELLML_WASM_DIR} -DZLIB_DIR=~/${LIBCELLML_WASM_DIR}/lib/cmake/ZLIB-${ZLIB_VERSION} -DBUILD_SHARED_LIBS=OFF -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_TESTS=OFF -DLIBXML2_WITH_PROGRAMS=OFF
cmake --build ${LIBXML2_BUILD_DIR}
cmake --install ${LIBXML2_BUILD_DIR}
- name: Build libCellML
run: |
cd build
mkdir ${LIBCELLML_WASM_DIR}
emcmake cmake -G Ninja -S .. -B ${LIBCELLML_WASM_DIR} -DLibXml2_DIR=~/${LIBCELLML_WASM_DIR}/lib/cmake/libxml2-${LIBXML2_VERSION} -DBUILD_TYPE=Release
cmake --build ${LIBCELLML_WASM_DIR}
- name: Unit testing
run: |
cd build
cmake --build ${LIBCELLML_WASM_DIR} --target jest_test
code_formatting:
name: Code formatting
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- name: Check out libCellML
uses: actions/checkout@v4
- name: Install ClangFormat
run: |
sudo apt update
sudo apt install clang-format
- name: Install CMake and Ninja
uses: lukka/get-cmake@latest
- name: Configure libCellML
run: |
mkdir build
cd build
cmake -G Ninja ..
- name: Code formatting
run: |
cd build
ninja test_clang_format
coverage:
name: Code coverage
runs-on: macos-latest
strategy:
fail-fast: false
steps:
- name: Check out libCellML
uses: actions/checkout@v4
- name: Install CMake and Ninja
uses: lukka/get-cmake@latest
- name: Install buildcache
uses: mikehardy/buildcache-action@v2
- name: Install LLVM
run: |
brew install --overwrite llvm
echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.bash_profile
- name: Configure libCellML
run: |
mkdir build
cd build
cmake -G Ninja -DBINDINGS_PYTHON=OFF ..
- name: Code coverage
run: |
cd build
ninja llvm_coverage
if [ `ninja llvm_coverage | grep TOTAL | sed 's/ /\n/g' | grep "100.00%" | wc -l | sed 's/ //g'` -eq 4 ]; then exit 0; else exit 1; fi
memory_leaks:
name: Memory leaks
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- name: Check out libCellML
uses: actions/checkout@v4
- name: Install CMake and Ninja
uses: lukka/get-cmake@latest
- name: Install buildcache
uses: mikehardy/buildcache-action@v2
- name: Install Valgrind
run: |
sudo apt update
sudo apt install valgrind
- name: Configure libCellML
run: |
mkdir build
cd build
cmake -G Ninja -DBINDINGS_PYTHON=OFF ..
- name: Memory leaks
run: |
cd build
ninja memcheck
documentation:
name: Documentation
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- name: Check out libCellML
uses: actions/checkout@v4
- name: Install CMake and Ninja
uses: lukka/get-cmake@latest
- name: Install buildcache
uses: mikehardy/buildcache-action@v2
- name: Install Doxygen
run: |
sudo apt update
sudo apt install doxygen
- name: Install Sphinx
run: |
pip3 install sphinx
- name: Configure libCellML
run: |
mkdir build
cd build
cmake -G Ninja -DBINDINGS_PYTHON=OFF ..
- name: Documentation
run: |
cd build
ninja docs
4 changes: 2 additions & 2 deletions cmake/environmentchecks.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ else ()
find_program(CLANG_TIDY_EXE NAMES ${PREFERRED_CLANG_TIDY_NAMES} clang-tidy)
find_program(FIND_EXE NAMES ${PREFERRED_FIND_NAMES} find)
find_program(GCOV_EXE NAMES ${PREFERRED_GCOV_NAMES} gcov)
find_program(LLVM_COV_EXE NAMES ${PREFERRED_LLVM_COV_NAMES} llvm-cov HINTS ${LLVM_BIN_DIR} /Library/Developer/CommandLineTools/usr/bin/)
find_program(LLVM_PROFDATA_EXE NAMES ${PREFERRED_LLVM_PROFDATA_NAMES} llvm-profdata HINTS ${LLVM_BIN_DIR} /Library/Developer/CommandLineTools/usr/bin/)
find_program(LLVM_COV_EXE NAMES ${PREFERRED_LLVM_COV_NAMES} llvm-cov HINTS ${LLVM_BIN_DIR} ENV PATH /Library/Developer/CommandLineTools/usr/bin/)
find_program(LLVM_PROFDATA_EXE NAMES ${PREFERRED_LLVM_PROFDATA_NAMES} llvm-profdata HINTS ${LLVM_BIN_DIR} ENV PATH /Library/Developer/CommandLineTools/usr/bin/)
find_program(VALGRIND_EXE NAMES ${PREFERRED_VALGRIND_NAMES} valgrind)
find_program(INSTALL_NAME_TOOL_EXE NAMES ${PREFERRED_INSTALL_NAME_TOOL_NAMES} install_name_tool)

Expand Down
1 change: 0 additions & 1 deletion docs/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,3 @@ if(SPHINX_FOUND OR DOXYGEN_FOUND OR LIBCELLML_COVERAGE)
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_CURRENT_BINARY_DIR}/_doctrees
COMMENT "Cleaning documentation")
endif()

66 changes: 33 additions & 33 deletions docs/conf.in.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,42 +47,42 @@
# These are the shorthand for external links. Use them in the other pages as:
# :shortcut:`Shortcut text <extra string if needed>` NB space before <
# Declare below as:
# 'shortcut': ('http://linkhere/%s',''), NB have to put the string insertion %s to make it work
# 'shortcut': ('http://linkhere/%s', None), NB have to put the string insertion %s to make it work
extlinks = {
# NB for deployment outside of the libcellml.org domain, you will need to include the root of the href for the
# :api: shortcut here. This only works internally.
'api': ('/documentation/latest/api/classlibcellml_1_1%s', ''),
'buildbot': ('https://buildbot.net/%s',''),
'cellml': ('https://www.cellml.org/%s',''),
'cellml2spec': ('https://www.cellml.org/specifications/cellml_2.0%s', ''),
'clang': ('https://clang.llvm.org/%s',''),
'cmake': ('https://cmake.org/%s',''),
'doxygen': ('http://www.doxygen.nl/%s',''),
'forcescheduler': ('http://docs.buildbot.net/latest/developer/cls-forcesched.html%s',''),
'gcc': ('https://gcc.gnu.org/%s',''),
'gcovr': ('https://gcovr.com/%s',''),
'git': ('https://git-scm.com/%s',''),
'github': ('https://github.com/%s',''),
'github_desktop': ('https://desktop.github.com/%s',''),
'github_help': ('https://help.github.com%s',''),
'github_rtd': ('https://github.com/rtfd/readthedocs.org/issues%s',''),
'google_style_guide': ('https://google.github.io/styleguide/cppguide.html%s',''),
'graphviz': ('http://graphviz.org%s',''),
'htpasswd': ('https://httpd.apache.org/docs/current/programs/htpasswd.html%s',''),
'libcellml_repo': ('https://github.com/cellml/libcellml/%s',''),
'libcellml_buildbot': ('https://autotest.bioeng.auckland.ac.nz/buildbot/libcellml/#/builders%s',''),
'libxml2': ('http://xmlsoft.org/%s',''),
'mathml': ('https://www.w3.org/Math/%s',''),
'msvs': ('https://visualstudio.microsoft.com%s',''),
'opencmiss_libxml2_repo': ('https://github.com/OpenCMISS-Dependencies/libxml2/releases%s',''),
'opencmiss_zlib_repo': ('https://github.com/OpenCMISS-Dependencies/zlib/releases%s',''),
'python': ('https://www.python.org/%s',''),
'sphinx': ('http://www.sphinx-doc.org/en/master/%s',''),
'swig':('http://swig.org%s',''),
'swigwin_download': ('https://sourceforge.net/projects/swig/files/swigwin/%s',''),
'wikipedia': ('https://en.wikipedia.org/wiki%s',''),
'xml': ('https://www.w3.org/XML/%s',''),
'zlib': ('https://www.zlib.net/%s',''),
'api': ('/documentation/latest/api/classlibcellml_1_1%s', None),
'buildbot': ('https://buildbot.net/%s', None),
'cellml': ('https://www.cellml.org/%s', None),
'cellml2spec': ('https://www.cellml.org/specifications/cellml_2.0%s', None),
'clang': ('https://clang.llvm.org/%s', None),
'cmake': ('https://cmake.org/%s', None),
'doxygen': ('http://www.doxygen.nl/%s', None),
'forcescheduler': ('http://docs.buildbot.net/latest/developer/cls-forcesched.html%s', None),
'gcc': ('https://gcc.gnu.org/%s', None),
'gcovr': ('https://gcovr.com/%s', None),
'git': ('https://git-scm.com/%s', None),
'github': ('https://github.com/%s', None),
'github_desktop': ('https://desktop.github.com/%s', None),
'github_help': ('https://help.github.com%s', None),
'github_rtd': ('https://github.com/rtfd/readthedocs.org/issues%s', None),
'google_style_guide': ('https://google.github.io/styleguide/cppguide.html%s', None),
'graphviz': ('http://graphviz.org%s', None),
'htpasswd': ('https://httpd.apache.org/docs/current/programs/htpasswd.html%s', None),
'libcellml_repo': ('https://github.com/cellml/libcellml/%s', None),
'libcellml_buildbot': ('https://autotest.bioeng.auckland.ac.nz/buildbot/libcellml/#/builders%s', None),
'libxml2': ('http://xmlsoft.org/%s', None),
'mathml': ('https://www.w3.org/Math/%s', None),
'msvs': ('https://visualstudio.microsoft.com%s', None),
'opencmiss_libxml2_repo': ('https://github.com/OpenCMISS-Dependencies/libxml2/releases%s', None),
'opencmiss_zlib_repo': ('https://github.com/OpenCMISS-Dependencies/zlib/releases%s', None),
'python': ('https://www.python.org/%s', None),
'sphinx': ('http://www.sphinx-doc.org/en/master/%s', None),
'swig':('http://swig.org%s', None),
'swigwin_download': ('https://sourceforge.net/projects/swig/files/swigwin/%s', None),
'wikipedia': ('https://en.wikipedia.org/wiki%s', None),
'xml': ('https://www.w3.org/XML/%s', None),
'zlib': ('https://www.zlib.net/%s', None),
}

# The master toctree document.
Expand Down
2 changes: 1 addition & 1 deletion src/api/libcellml/generatorprofile.h
Original file line number Diff line number Diff line change
Expand Up @@ -2587,7 +2587,7 @@ class LIBCELLML_EXPORT GeneratorProfile
* Set the @c std::string for the name of the state variable type that is
* used in a differential model.
*
* @param stateTypeString The @c std::string to use for the name of the
* @param stateVariableTypeString The @c std::string to use for the name of the
* state variable type.
*/
void setStateVariableTypeString(const std::string &stateVariableTypeString);
Expand Down
1 change: 1 addition & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ if(LIBCELLML_LLVM_COVERAGE)

add_custom_target(llvm_coverage_report
COMMAND ${LLVM_COV_EXE} show $<TARGET_FILE:cellml> -instr-profile=${DATA_PROFILE_FILENAME} -format=html -Xdemangler c++filt -Xdemangler -n -o coverage_report --show-expansions --show-branches=count
COMMAND echo "The coverage report can be found at ${CMAKE_CURRENT_BINARY_DIR}/${COVERAGE_REPORT_DIR}coverage_report/index.html."
DEPENDS prepare_llvm_coverage
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Running LLVM coverage missing lines command")
Expand Down

0 comments on commit f9c95f2

Please sign in to comment.