Skip to content

Nightly build (binaries) #1339

Nightly build (binaries)

Nightly build (binaries) #1339

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