1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
|
name: CMake (Extensive build on PR to develepment)
on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened] # defaults + ready_to_review
branches:
- development
env:
BUILD_TYPE: Release
jobs:
build:
if: github.event.pull_request.draft == false # avoid triggering on draft
name:
${{ matrix.platform }}, Parser option ${{ matrix.xml_parser_option }},
with namespaces ${{ matrix.with_namespace}}, strict includes ${{
matrix.strict }}, with examples ${{ matrix.with_examples}}, package option
${{ matrix.package_option}}
strategy:
fail-fast: false
matrix:
xml_parser_option: ["-DWITH_LIBXML"]
platform: [windows-latest, macos-latest, ubuntu-latest]
with_namespace: ["True", "False"]
strict: ["True"]
with_examples: ["True"]
package_option:
["", "-DWITH_STABLE_PACKAGES=ON", "-DWITH_ALL_PACKAGES=ON"]
language_bindings:
["-DWITH_JAVA=True -DWITH_CSHARP=True -DWITH_PYTHON=True -DWITH_R=OFF"]
include:
# to test the other two XML parsers while avoiding a combinatorial explosion in the number of jobs,
# we additionally include just two runs / OS : one for Expat, and one for Xerces
# extra Windows runs
- xml_parser_option: "-DWITH_EXPAT"
platform: windows-latest
with_namespace: "True"
strict: "True"
with_examples: "True"
package_option: "-DWITH_ALL_PACKAGES=ON"
language_bindings: ""
- xml_parser_option: "-DWITH_XERCES"
platform: windows-latest
with_namespace: "True"
strict: "True"
with_examples: "True"
package_option: "-DWITH_ALL_PACKAGES=ON"
language_bindings: ""
# extra MacOS runs
- xml_parser_option: "-DWITH_EXPAT"
platform: macos-latest
with_namespace: "True"
strict: "True"
with_examples: "True"
package_option: "-DWITH_ALL_PACKAGES=ON"
language_bindings: ""
- xml_parser_option: "-DWITH_XERCES"
platform: macos-latest
with_namespace: "True"
strict: "True"
with_examples: "True"
package_option: "-DWITH_ALL_PACKAGES=ON"
language_bindings: ""
# extra Ubuntu runs
- xml_parser_option: "-DWITH_EXPAT"
platform: ubuntu-latest
with_namespace: "True"
strict: "True"
with_examples: "True"
package_option: "-DWITH_ALL_PACKAGES=ON"
language_bindings: ""
- xml_parser_option: "-DWITH_XERCES"
platform: ubuntu-latest
with_namespace: "True"
strict: "True"
with_examples: "True"
package_option: "-DWITH_ALL_PACKAGES=ON"
language_bindings: ""
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- uses: seanmiddleditch/gha-setup-ninja@master
- name: Add msbuild to PATH (Windows)
if: matrix.platform == 'windows-latest'
uses: ilammy/msvc-dev-cmd@v1
### configure the operating system ###
- name: Cache Windows dependencies and SWIG
# On Windows, the dependencies live inside the source folder, ie `.`.
# For the CI, we put SWIG there too, for simplicity.
if: matrix.platform == 'windows-latest'
id: cache-win-dependencies-static
uses: actions/cache@v4
with:
path: |
./dependencies
./swig
key: ${{ runner.os }}-dependencies-static-2
- name: Download pre-built Windows dependencies and SWIG
# Windows dependencies have to be in a subfolder called `dependencies`, directly under the git repository root.
# also gets SWIG, completing the set of dependencies needed for windows
if:
matrix.platform == 'windows-latest' &&
steps.cache-win-dependencies.outputs.cache-hit != 'true'
shell: bash
run: |
curl -L https://github.com/sbmlteam/libSBML-dependencies/releases/download/latest/libSBML-dependencies-1.0.1-x64-Release-static.zip > dependencies.zip
unzip dependencies.zip
mv libSBML-dependencies-1.0.1-x64-Release-static dependencies
curl -L https://prdownloads.sourceforge.net/swig/swigwin-3.0.12.zip > swig.zip
unzip -o swig.zip -d swig
- name: setup Windows environment
# this is separate from the SWIG download itself, because it needs to be added to the path also when SWIG is cached
if: matrix.platform == 'windows-latest'
shell: bash
run: |
echo $GITHUB_WORKSPACE"/swig/swigwin-3.0.12/" >> $GITHUB_PATH
echo RUNTIME_LINKING_OPTION="-DWITH_STATIC_RUNTIME=ON" >> "${GITHUB_ENV}"
./dev/utilities/expdef/expdef64.exe -dRlib.def -l R.dll
echo R_PLATFORM_SPECIFIC_OPTIONS="-DR_LIB=${GITHUB_WORKSPACE}\Rlib.lib" >> "${GITHUB_ENV}"
- name: Find Windows R include path
# robust to R version changing
if: matrix.platform == 'windows-latest'
shell: bash
run: |
cd /c/Program\ Files/R/
R_INCLUDE_DIR_VERSION=$(ls -d *)
echo R_INCLUDE_PATH="/c/Program Files/R/"$R_INCLUDE_DIR_VERSION"/include" >> "${GITHUB_ENV}"
- name: Install Ubuntu dependencies
# ubuntu already has SWIG and libxml2 by default
if: matrix.platform == 'ubuntu-latest'
shell: bash
run: |
# add mono using instructions from: https://www.mono-project.com/download/stable/#download-lin
sudo apt install ca-certificates gnupg
sudo gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mono-official-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb [signed-by=/usr/share/keyrings/mono-official-archive-keyring.gpg] https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
sudo apt install -y mono-devel
sudo apt-get install -y check libxerces-c-dev expat ccache
echo PYTHON_LINKING_OPTION="-DPYTHON_USE_DYNAMIC_LOOKUP=ON" >> "${GITHUB_ENV}"
git clone https://github.com/libexpat/libexpat
cmake -G Ninja -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DEXPAT_BUILD_TESTS=OFF -DEXPAT_BUILD_TOOLS=OFF -DEXPAT_BUILD_EXAMPLES=OFF -DEXPAT_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=./dependencies -B libexpat -S libexpat/expat
cmake --build libexpat
cmake --install libexpat
- name: Install MacOS dependencies
# MacOS already has libxml2 by default
if: matrix.platform == 'macos-latest'
shell: bash
run: |
brew install check swig xerces-c expat ccache
echo PYTHON_LINKING_OPTION="-DPYTHON_USE_DYNAMIC_LOOKUP=ON" >> "${GITHUB_ENV}"
- name: Unix R options
if: matrix.platform != 'windows-latest'
shell: bash
run:
echo R_PLATFORM_SPECIFIC_OPTIONS="-DWITH_CREATE_R_SOURCE=ON
-DWITH_SKIP_R_BINARY=ON" >> "${GITHUB_ENV}"
### setup ccache, not on Windows ###
- name: Prepare ccache timestamp
if: matrix.platform != 'windows-latest'
id: ccache_cache_timestamp
shell: cmake -P {0}
run: |
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
message("::set-output name=timestamp::${current_date}")
- name: Set ccache cache directory
if: matrix.platform != 'windows-latest'
shell: bash
run: |
echo "CCACHE_DIR=${{runner.workspace}}/.ccache" >> "${GITHUB_ENV}"
echo "COMPILER_LAUNCHER=ccache" >> "${GITHUB_ENV}"
- name: cache ccache files
if: matrix.platform != 'windows-latest'
uses: actions/cache@v4
with:
path: ${{runner.workspace}}/.ccache
key:
${{ runner.os }}-test-${{ matrix.xml_parser_option }}-${{
matrix.with_namespace }}-${{ matrix.strict }}-${{
steps.ccache_cache_timestamp.outputs.timestamp }}
restore-keys: |
${{ runner.os }}-test-${{ matrix.xml_parser_option }}-${{ matrix.with_namespace }}-${{ matrix.strict }}-${{ steps.ccache_cache_timestamp.outputs.timestamp }}
${{ runner.os }}-test-${{ matrix.xml_parser_option }}-${{ matrix.with_namespace }}-${{ matrix.strict }}-
${{ runner.os }}-test-${{ matrix.xml_parser_option }}-${{ matrix.with_namespace }}-${{ matrix.strict }}-
${{ runner.os }}-test-${{ matrix.xml_parser_option }}-${{ matrix.with_namespace }}-${{ matrix.strict }}-
${{ runner.os }}-test-${{ matrix.xml_parser_option }}-${{ matrix.with_namespace }}-
${{ runner.os }}-test-${{ matrix.xml_parser_option }}-
${{ runner.os }}-test-
${{ runner.os }}-
### build the project ###
- name: Create Build Environment
run: cmake -E make_directory ${{runner.workspace}}/build
- name: Configure CMake for default XML_parser (LIBXML2)
if: matrix.xml_parser_option == '-DWITH_LIBXML' # default option, no need to specify -DWITH_LIBXML=...
shell: bash
working-directory: ${{runner.workspace}}/build
run: |
cmake $GITHUB_WORKSPACE \
-G "Ninja" \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-DCMAKE_C_COMPILER_LAUNCHER=${COMPILER_LAUNCHER} \
-DCMAKE_CXX_COMPILER_LAUNCHER=${COMPILER_LAUNCHER} \
-DCMAKE_CXX_STANDARD=11 \
-DWITH_CHECK=True \
-DWITH_CPP_NAMESPACE=${{matrix.with_namespace}} \
-DLIBSBML_USE_STRICT_INCLUDES=${{matrix.strict}} \
-DWITH_EXAMPLES=${{matrix.with_examples}} \
${{matrix.package_option}} \
${{matrix.language_bindings}} \
${R_PLATFORM_SPECIFIC_OPTIONS} \
-DR_INCLUDE_DIRS="$R_INCLUDE_PATH" \
${RUNTIME_LINKING_OPTION} \
${PYTHON_LINKING_OPTION}
- name: Configure CMake for non-default XML_parser
if: matrix.xml_parser_option != '-DWITH_LIBXML'
shell: bash
working-directory: ${{runner.workspace}}/build
run: |
cmake $GITHUB_WORKSPACE \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-DCMAKE_C_COMPILER_LAUNCHER=${COMPILER_LAUNCHER} \
-DCMAKE_CXX_COMPILER_LAUNCHER=${COMPILER_LAUNCHER} \
-DCMAKE_CXX_STANDARD=11 \
-DWITH_CHECK=True \
-DWITH_CPP_NAMESPACE=${{matrix.with_namespace}} \
-DLIBSBML_USE_STRICT_INCLUDES=${{matrix.strict}} \
-DWITH_EXAMPLES=${{matrix.with_examples}} \
-DWITH_LIBXML=False \
${{matrix.xml_parser_option}}=True\
${{matrix.package_option}} \
${{matrix.language_bindings}} \
${RUNTIME_LINKING_OPTION} \
${PYTHON_LINKING_OPTION}
- name: Build
working-directory: ${{runner.workspace}}/build
shell: bash
run: cmake --build . --config $BUILD_TYPE
# - name: Build Unix R binaries from source package
# if: matrix.platform != 'windows-latest' && matrix.xml_parser_option == '-DWITH_LIBXML'
# shell: bash
# working-directory: ${{runner.workspace}}/build
# run: |
# mkdir r-binaries
# R CMD INSTALL -l r-binaries --build ./src/bindings/r/out/libSBML_5.19.3.tar.gz
### run tests ###
- name: Test
if: matrix.platform == 'macos-latest'
working-directory: ${{runner.workspace}}/build
shell: bash
run: ctest -V -C $BUILD_TYPE -E test_cs
- name: Test
if: matrix.platform != 'macos-latest'
working-directory: ${{runner.workspace}}/build
shell: bash
run: ctest -V -C $BUILD_TYPE
|