Nightly build (binaries) #1351
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Nightly build (binaries) | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: "0 5 * * *" | |
env: | |
BUILD_TYPE: Release | |
jobs: | |
build: | |
if: github.repository_owner == 'sbmlteam' | |
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: | |
platform: [windows-latest, macos-latest, ubuntu-latest] | |
xml_parser_option: ["-DWITH_EXPAT=ON"] | |
with_namespace: ["True"] | |
strict: ["True"] | |
with_examples: ["True"] | |
package_option: ["-DWITH_ALL_PACKAGES=ON", "-DWITH_STABLE_PACKAGES=ON"] | |
language_bindings: | |
[ | |
"-DWITH_JAVA=True -DWITH_PYTHON=True -DWITH_R=OFF", | |
] | |
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-static.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}" | |
echo CSHARP_OPTION="-DWITH_CSHARP=True" >> "${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 but expat is too old | |
if: matrix.platform == 'ubuntu-latest' | |
shell: bash | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y check ccache | |
echo PYTHON_LINKING_OPTION="-DPYTHON_USE_DYNAMIC_LOOKUP=ON" >> "${GITHUB_ENV}" | |
echo CSHARP_OPTION="-DWITH_CSHARP=True" >> "${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 expat by default | |
if: matrix.platform == 'macos-latest' | |
shell: bash | |
run: | | |
brew install check swig ccache | |
echo PYTHON_LINKING_OPTION="-DPYTHON_USE_DYNAMIC_LOOKUP=ON" >> "${GITHUB_ENV}" | |
echo CSHARP_OPTION="-DWITH_CSHARP=OFF" >> "${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 }}-${{ steps.ccache_cache_timestamp.outputs.timestamp}} | |
restore-keys: | | |
${{ runner.os }}-${{ steps.ccache_cache_timestamp.outputs.timestamp }} | |
${{ runner.os }}- | |
### build the project ### | |
- name: Create Build Environment | |
run: cmake -E make_directory ${{runner.workspace}}/build | |
- name: Configure CMake for XML_parser (expat) | |
shell: bash | |
working-directory: ${{runner.workspace}}/build | |
run: | | |
mkdir ../install | |
cmake $GITHUB_WORKSPACE \ | |
-G "Ninja" \ | |
-DCMAKE_INSTALL_PREFIX=../install \ | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \ | |
-DCMAKE_C_COMPILER_LAUNCHER=${COMPILER_LAUNCHER} \ | |
-DCMAKE_CXX_COMPILER_LAUNCHER=${COMPILER_LAUNCHER} \ | |
-DCMAKE_CXX_STANDARD=98 \ | |
-DWITH_CHECK=True \ | |
-DWITH_CPP_NAMESPACE=${{matrix.with_namespace}} \ | |
-DLIBSBML_USE_STRICT_INCLUDES=${{matrix.strict}} \ | |
-DWITH_EXAMPLES=${{matrix.with_examples}} \ | |
-DWITH_LIBXML=OFF \ | |
${{matrix.xml_parser_option}} \ | |
${{matrix.package_option}} \ | |
${{matrix.language_bindings}} \ | |
${R_PLATFORM_SPECIFIC_OPTIONS} \ | |
-DR_INCLUDE_DIRS="$R_INCLUDE_PATH" \ | |
${RUNTIME_LINKING_OPTION} \ | |
${PYTHON_LINKING_OPTION} \ | |
${CSHARP_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' | |
# 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 | |
working-directory: ${{runner.workspace}}/build | |
shell: bash | |
run: ctest -C $BUILD_TYPE | |
### create binaries ### | |
- name: Install | |
working-directory: ${{runner.workspace}}/build | |
shell: bash | |
run: cmake --install . --config $BUILD_TYPE | |
- name: Remove large .lib file on Windows | |
### file temporarily needed for bindings ### | |
if: matrix.platform == 'windows-latest' | |
working-directory: ${{runner.workspace}}/install | |
shell: bash | |
run: rm lib/libsbml-static.lib | |
### setup artifact environment ### | |
- name: Store libSBML version in environment | |
shell: bash | |
run: echo "LIBSBML_VERSION=$( cat VERSION.txt)" >> "${GITHUB_ENV}" | |
- name: Set artifact name suffix to stable packages | |
if: matrix.package_option=='-DWITH_STABLE_PACKAGES=ON' | |
shell: bash | |
run: | | |
echo "ARTIFACT_NAME_SUFFIX=stable-packages" >> "${GITHUB_ENV}" | |
- name: Set artifact name suffix to all packages | |
if: matrix.package_option=='-DWITH_ALL_PACKAGES=ON' | |
shell: bash | |
run: | | |
echo "ARTIFACT_NAME_SUFFIX=all-packages" >> "${GITHUB_ENV}" | |
### Upload installed versions ### | |
- name: Upload Windows binary archive | |
if: matrix.platform == 'windows-latest' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: | |
Windows (zip, libSBML ${{env.LIBSBML_VERSION}}, | |
${{env.ARTIFACT_NAME_SUFFIX}})-${{ strategy.job-index }} | |
path: ${{runner.workspace}}/install/* | |
retention-days: 1 | |
if-no-files-found: error | |
- name: Upload MacOS binary archive | |
if: matrix.platform == 'macos-latest' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: | |
MacOS (zip, libSBML ${{env.LIBSBML_VERSION}}, | |
${{env.ARTIFACT_NAME_SUFFIX}})-${{ strategy.job-index }} | |
path: | | |
${{runner.workspace}}/install/* | |
${{runner.workspace}}/build/r-binaries/* | |
retention-days: 1 | |
if-no-files-found: error | |
- name: Upload Ubuntu binary archive | |
if: matrix.platform == 'ubuntu-latest' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: | |
Ubuntu nightly (zip, libSBML ${{env.LIBSBML_VERSION}}, | |
${{env.ARTIFACT_NAME_SUFFIX}})-${{ strategy.job-index }} | |
path: | | |
${{runner.workspace}}/install/* | |
retention-days: 1 | |
if-no-files-found: error | |
manylinuxbuild: | |
if: github.repository_owner == 'sbmlteam' | |
name: | |
${{ matrix.container }}, 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: | |
platform: [ubuntu-latest] | |
xml_parser_option: ["-DWITH_EXPAT=ON"] | |
with_namespace: ["True"] | |
strict: ["True"] | |
with_examples: ["True"] | |
package_option: ["-DWITH_ALL_PACKAGES=ON", "-DWITH_STABLE_PACKAGES=ON"] | |
cpp_standard: [98] | |
language_bindings: | |
["-DWITH_JAVA=True -DWITH_PYTHON=True"] | |
container: ["quay.io/pypa/manylinux_2_28_x86_64"] | |
runs-on: ${{ matrix.platform }} | |
container: ${{ matrix.container}} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: install Swig 4 from source | |
run: | | |
yum install -y pcre-devel | |
echo "SWIG_DIR=/usr/local/swig/" >> "${GITHUB_ENV}" | |
curl -L https://sourceforge.net/projects/swig/files/swig/swig-4.0.2/swig-4.0.2.tar.gz/download > swig.tar.gz | |
tar -zxvf swig.tar.gz | |
cd swig-4.0.2/ | |
./configure --disable-dependency-tracking --prefix=$SWIG_DIR | |
make clean | |
make -j 2 | |
make install | |
swig -version | |
- name: install CMake using pip | |
run: | | |
/opt/python/cp38-cp38/bin/pip install cmake | |
ln -s /opt/python/cp38-cp38/bin/cmake /usr/bin/cmake | |
ln -s /opt/python/cp38-cp38/bin/ctest /usr/bin/ctest | |
cmake --version | |
ctest --version | |
- name: Install dependencies, configure, build | |
run: | | |
yum install -y libxml2-devel check-devel java-devel | |
git clone https://github.com/libexpat/libexpat | |
cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -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 | |
cd .. | |
mkdir build | |
cd build | |
mkdir ../install | |
cmake ../libsbml \ | |
-DCMAKE_INSTALL_PREFIX=../install \ | |
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \ | |
-DCMAKE_CXX_STANDARD=${{matrix.cpp_standard}} \ | |
-DWITH_CHECK=True \ | |
-DWITH_CPP_NAMESPACE=${{matrix.with_namespace}} \ | |
-DLIBSBML_USE_STRICT_INCLUDES=${{matrix.strict}} \ | |
-DWITH_EXAMPLES=${{matrix.with_examples}} \ | |
-DWITH_LIBXML=OFF \ | |
${{matrix.xml_parser_option}} \ | |
${{matrix.package_option}} \ | |
${{matrix.language_bindings}} \ | |
-DPYTHON_EXECUTABLE=/opt/python/cp38-cp38/bin/python \ | |
-DPYTHON_INCLUDE_DIR=/opt/python/cp38-cp38/include/python3.8/ \ | |
-DWITH_STATIC_RUNTIME=ON \ | |
-DPYTHON_USE_DYNAMIC_LOOKUP=ON | |
cmake --build . --config $BUILD_TYPE | |
- name: Test | |
run: | | |
cd ../build | |
ctest -V -C $BUILD_TYPE | |
### create binaries ### | |
- name: Install | |
run: | | |
cd ../build | |
cmake --install . --config $BUILD_TYPE | |
### setup artifact environment ### | |
- name: Store libSBML version in environment | |
run: | | |
echo "LIBSBML_VERSION=$( cat VERSION.txt)" >> "${GITHUB_ENV}" | |
- name: Set artifact name suffix to stable packages | |
if: matrix.package_option=='-DWITH_STABLE_PACKAGES=ON' | |
run: | | |
echo "ARTIFACT_NAME_SUFFIX=stable-packages" >> "${GITHUB_ENV}" | |
- name: Set artifact name suffix to all packages | |
if: matrix.package_option=='-DWITH_ALL_PACKAGES=ON' | |
run: | | |
echo "ARTIFACT_NAME_SUFFIX=all-packages" >> "${GITHUB_ENV}" | |
- name: Upload Manylinux binary archive | |
uses: actions/upload-artifact@v4 | |
with: | |
name: | |
Manylinux nightly (zip, libSBML ${{env.LIBSBML_VERSION}}, | |
${{env.ARTIFACT_NAME_SUFFIX}})-${{ strategy.job-index }} | |
path: ../install |