Version is updated to 0.3.1 #598
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: Build LibSBMLNetwork | |
on: | |
push: | |
branches: | |
- develop | |
pull_request: | |
branches: | |
- '**' | |
jobs: | |
build_on_OSs: | |
name: Build RoadRunner on ${{ matrix.platform.name }}-python${{ matrix.python_version }} | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: | |
- name: macos-12-release | |
os_type: macos | |
os_name: macos-12 | |
build_type: Release | |
build_python: ON | |
- name: macos-12-debug | |
os_type: macos | |
os_name: macos-12 | |
build_type: Debug | |
build_python: ON | |
- name: macos-latest-release | |
os_type: macos | |
os_name: macos-latest | |
build_type: Release | |
build_python: ON | |
- name: macos-latest-debug | |
os_type: macos | |
os_name: macos-latest | |
build_type: Debug | |
build_python: ON | |
- name: ubuntu-latest-release | |
os_type: ubuntu | |
os_name: ubuntu-latest | |
build_type: Release | |
build_python: ON | |
- name: ubuntu-latest-debug | |
os_type: ubuntu | |
os_name: ubuntu-latest | |
build_type: Debug | |
build_python: ON | |
- name: windows-latest-release | |
os_type: windows | |
os_name: windows-latest | |
build_type: Release | |
build_python: ON | |
- name: windows-latest-debug | |
os_type: windows | |
os_name: windows-latest | |
build_type: Debug | |
build_python: OFF | |
- name: manylinux_2_28-release | |
os_type: manylinux | |
os_name: ubuntu-latest | |
container_image: quay.io/pypa/manylinux_2_28_x86_64 | |
build_type: Release | |
build_python: ON | |
- name: manylinux_2_28-debug | |
os_type: manylinux | |
os_name: ubuntu-latest | |
container_image: quay.io/pypa/manylinux_2_28_x86_64 | |
build_type: Debug | |
build_python: ON | |
libroadrunner_deps_owner: [ "sys-bio" ] | |
libroadrunner_deps_repo: [ "libroadrunner-deps" ] | |
libroadrunner_deps_name: [ "libroadrunner-deps" ] | |
libroadrunner_deps_release_version: [ "v2.1.2" ] | |
python_version: [ "3.11" ] | |
runs-on: ${{ matrix.platform.os_name }} | |
container: | |
image: ${{ matrix.platform.container_image || '' }} | |
steps: | |
- name: Checkout libSBMLNetwork | |
uses: actions/checkout@v4 | |
- name: Set MSVC as the default compiler on Windows | |
if: matrix.platform.os_type == 'windows' | |
uses: ilammy/msvc-dev-cmd@v1 | |
- name: Upgrade gcc on Linux | |
if: matrix.platform.os_type == 'manylinux' | |
shell: bash | |
run: | | |
if [ "${{ matrix.platform.os_type }}" == 'ubuntu' ]; then | |
apt-get update | |
apt-get install -y software-properties-common | |
add-apt-repository -y ppa:ubuntu-toolchain-r/test | |
apt-get update | |
apt-get install -y gcc-11 g++-11 | |
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 90 | |
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 90 | |
elif [ "${{ matrix.platform.os_type }}" == 'manylinux' ]; then | |
dnf install -y gcc-toolset-11 | |
scl enable gcc-toolset-11 bash | |
echo "/opt/rh/gcc-toolset-11/root/usr/bin" >> "${GITHUB_PATH}" | |
fi | |
- name: Setup Ninja | |
uses: seanmiddleditch/gha-setup-ninja@master | |
- name: Get Host Architecture | |
shell: bash | |
run: | | |
architecture=$(uname -m) | |
echo "host_architecture=$architecture" >> "${GITHUB_ENV}" | |
if [ "${{ matrix.platform.os_type }}" == 'macos' ]; then | |
echo "OSX_ARCHITECTURES=$architecture" >> "${GITHUB_ENV}" | |
fi | |
- name: Install ccache | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE} | |
if [ "${{ matrix.platform.os_type }}" == 'macos' ]; then | |
brew install ccache | |
elif [ "${{ matrix.platform.os_type }}" == 'ubuntu' ]; then | |
sudo apt-get update | |
sudo apt-get install -y ccache | |
elif [ "${{ matrix.platform.os_type }}" == 'manylinux' ]; then | |
mkdir -p ccache | |
cd ccache | |
curl -L https://github.com/ccache/ccache/releases/download/v4.9.1/ccache-4.9.1.tar.gz > ccache.tar.gz | |
tar -zxf ccache.tar.gz | |
rm ccache.tar.gz | |
mkdir -p build-ccache | |
mkdir -p install-ccache | |
cd build-ccache | |
cmake -DCMAKE_INSTALL_PREFIX="$RUNNER_WORKSPACE/ccache/install-ccache" -DCMAKE_BUILD_TYPE=Release ../ccache-4.9.1 | |
cmake --build . --target install | |
echo "$RUNNER_WORKSPACE/ccache/install-ccache/bin" >> "${GITHUB_PATH}" | |
fi | |
- name: Prepare ccache timestamp on non-Windows platforms | |
if: matrix.platform.os_type != 'windows' | |
id: ccache_cache_timestamp | |
shell: cmake -P {0} | |
run: | | |
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) | |
message("timestamp=${current_date}" >> $GITHUB_OUTPUT) | |
- name: Set ccache cache directory on non-Windows | |
if: matrix.platform.os_type != 'windows' | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE} | |
echo "CCACHE_DIR=${RUNNER_WORKSPACE}/.ccache" >> "${GITHUB_ENV}" | |
echo "COMPILER_LAUNCHER=ccache" >> "${GITHUB_ENV}" | |
- name: Cache ccache files on non-Windows | |
if: matrix.platform.os_type != 'windows' | |
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 }}- | |
- name: Setup Python for non-Manylinux platforms | |
if: matrix.platform.build_python == 'ON' && matrix.platform.os_type != 'manylinux' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python_version }} | |
- name: Setup Python for Manylinux platforms | |
if: matrix.platform.build_python == 'ON' && matrix.platform.os_type == 'manylinux' | |
shell: bash | |
run: | | |
dnf install -y wget | |
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh | |
bash Miniconda3-latest-Linux-x86_64.sh -b -p /Miniconda3 | |
/Miniconda3/bin/conda create -y --name python${{ matrix.python_version }} python=${{ matrix.python_version }} | |
/Miniconda3/bin/conda init && bash ~/.bashrc && . ~/.bashrc cd ${RUNNER_WORKSPACE} | |
echo "export PATH=/Miniconda3/envs/python${{ matrix.python_version }}/bin:$PATH" >> "${GITHUB_ENV}" | |
- name: Download Dependencies binaries | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE} | |
mkdir -p ${{ matrix.libroadrunner_deps_name }}-binaries | |
cd ${{ matrix.libroadrunner_deps_name }}-binaries | |
if [ "${{ matrix.platform.os_type }}" == 'windows' ]; then | |
compiler_version=$(ls "C:\Program Files\Microsoft Visual Studio") | |
binary_file_name=${{ matrix.libroadrunner_deps_name }}-${{ matrix.platform.os_type }}-msvc${compiler_version}-${host_architecture}-${{ matrix.platform.build_type }} | |
elif [ "${{ matrix.platform.os_type }}" == 'macos' ]; then | |
os_version=$(sw_vers -productVersion | cut -d '.' -f 1) | |
binary_file_name=${{ matrix.libroadrunner_deps_name }}-${{ matrix.platform.os_type }}-${os_version}-${host_architecture}-${{ matrix.platform.build_type }} | |
elif [ "${{ matrix.platform.os_type }}" == 'ubuntu' ]; then | |
os_version=$(lsb_release -rs | cut -d '.' -f 1) | |
binary_file_name=${{ matrix.libroadrunner_deps_name }}-${{ matrix.platform.os_type }}-${os_version}-${host_architecture}-${{ matrix.platform.build_type }} | |
elif [ "${{ matrix.platform.os_type }}" == 'manylinux' ]; then | |
os_name="${{ matrix.platform.name }}" | |
os_name_without_build_type="${os_name%%-*}" | |
binary_file_name=${{ matrix.libroadrunner_deps_name }}-${os_name_without_build_type}-${host_architecture}-${{ matrix.platform.build_type }} | |
fi | |
curl -LO "https://github.com/${{ matrix.libroadrunner_deps_owner }}/${{ matrix.libroadrunner_deps_repo }}/releases/download/${{ matrix.libroadrunner_deps_release_version }}/$binary_file_name.zip" | |
unzip -q $binary_file_name.zip | |
rm $binary_file_name.zip | |
echo DEPENDENCIES_INSTALL_PREFIX="${RUNNER_WORKSPACE}/${{ matrix.libroadrunner_deps_name }}-binaries" >> "${GITHUB_ENV}" | |
- name: Create build directory | |
shell: bash | |
run: mkdir -p ${RUNNER_WORKSPACE}/build-libsbmlnetwork | |
- name: Configure CMake for libBMLNetwork | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE}/build-libsbmlnetwork | |
cmake $GITHUB_WORKSPACE \ | |
-G "Ninja" \ | |
-DCMAKE_C_COMPILER_LAUNCHER=${COMPILER_LAUNCHER} \ | |
-DCMAKE_CXX_COMPILER_LAUNCHER=${COMPILER_LAUNCHER} \ | |
-DCMAKE_BUILD_TYPE=${{ matrix.platform.build_type }} \ | |
-DCMAKE_OSX_ARCHITECTURES=${OSX_ARCHITECTURES} \ | |
-DCMAKE_INSTALL_PREFIX="${RUNNER_WORKSPACE}/install-libsbmlnetwork" \ | |
-DDEPENDENCIES_INSTALL_PREFIX=${DEPENDENCIES_INSTALL_PREFIX} \ | |
-DWITH_PYTHON=${{ matrix.platform.build_python }} \ | |
-DPYTHON_INSTALL_WITH_SETUP="ON" | |
- name: Build and install libSBMLNetwork | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE}/build-libsbmlnetwork | |
cmake --build . --target install --config ${{ matrix.platform.build_type }} | |
- name: Install python packages | |
if: matrix.platform.build_python == 'ON' | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE} | |
if [ "${{ matrix.platform.os_type }}" == 'windows' ]; then | |
python -m pip install pytest ipython setuptools wheel | |
python -m pip install ${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/libsbmlnetwork | |
python -m pip install ${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/sbmlnetwork | |
elif [ "${{ matrix.platform.os_type }}" == 'manylinux' ]; then | |
python${{ matrix.python_version }} -m pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org pytest ipython setuptools wheel | |
python${{ matrix.python_version }} -m pip install ${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/libsbmlnetwork | |
python${{ matrix.python_version }} -m pip install ${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/sbmlnetwork | |
else | |
python${{ matrix.python_version }} -m pip install pytest ipython setuptools wheel | |
python${{ matrix.python_version }} -m pip install ${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/libsbmlnetwork | |
python${{ matrix.python_version }} -m pip install ${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/sbmlnetwork | |
fi | |
- name: Run libSBMLNetwork tests | |
if: matrix.platform.build_type == 'Release' && matrix.platform.build_python == 'ON' | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/sbmlnetwork/tests | |
if [ "${{ matrix.platform.os_type }}" == 'windows' ]; then | |
python -m pytest -p no:cacheprovider | |
else | |
python${{ matrix.python_version }} -m pytest -p no:cacheprovider | |
fi | |
- name: Set artifacts path and name | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE} | |
artifacts_name="" | |
if [ "${{ matrix.platform.os_type }}" == 'windows' ]; then | |
compiler_version=$(ls "C:\Program Files\Microsoft Visual Studio") | |
echo "artifacts_name=libsbmlnetwork-${{ matrix.platform.os_type }}-msvc$compiler_version-${host_architecture}-${{ matrix.platform.build_type }}" >> "${GITHUB_ENV}" | |
elif [ "${{ matrix.platform.os_type }}" == 'macos' ]; then | |
os_version=$(sw_vers -productVersion | cut -d '.' -f 1) | |
echo "artifacts_name=libsbmlnetwork-${{ matrix.platform.os_type }}-$os_version-${host_architecture}-${{ matrix.platform.build_type }}" >> "${GITHUB_ENV}" | |
elif [ "${{ matrix.platform.os_type }}" == 'ubuntu' ]; then | |
os_version=$(lsb_release -rs | cut -d '.' -f 1) | |
echo "artifacts_name=libsbmlnetwork-${{ matrix.platform.os_type }}-$os_version-${host_architecture}-${{ matrix.platform.build_type }}" >> "${GITHUB_ENV}" | |
elif [ "${{ matrix.platform.os_type }}" == 'manylinux' ]; then | |
os_name="${{ matrix.platform.name }}" | |
os_name_without_build_type="${os_name%%-*}" | |
echo "artifacts_name=libsbmlnetwork-${os_name_without_build_type}-${host_architecture}-${{ matrix.platform.build_type }}" >> "${GITHUB_ENV}" | |
fi | |
echo "artifacts_path=${RUNNER_WORKSPACE}" >> "${GITHUB_ENV}" | |
- name: Upload libSBMLNetwork binaries | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.artifacts_name}} | |
path: ${{env.artifacts_path}} | |
- name: Create libSBMLNetwork Python wheel artifacts | |
if: matrix.platform.build_type == 'Release' && matrix.platform.build_python == 'ON' | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/libsbmlnetwork | |
if [ "${{ matrix.platform.os_type }}" == 'windows' ]; then | |
python setup.py bdist_wheel | |
else | |
python${{ matrix.python_version }} setup.py bdist_wheel | |
fi | |
- name: Rename libSBMLNetwork Python wheel artifacts | |
if: matrix.platform.build_type == 'Release' && matrix.platform.build_python == 'ON' | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/libsbmlnetwork | |
if [ "${{ matrix.platform.os_type }}" == 'macos' ]; then | |
mv dist/libsbmlnetwork*.whl $(echo dist/libsbmlnetwork*.whl | sed "s/universal2/${host_architecture}/g") | |
elif [ "${{ matrix.platform.os_type }}" == 'manylinux' ]; then | |
mv dist/libsbmlnetwork*.whl $(echo dist/libsbmlnetwork*.whl | sed "s/linux/manylinux_2_28/g") | |
fi | |
python_version_number=$(echo "${{ matrix.python_version }}" | tr -d '.') | |
mv dist/libsbmlnetwork*.whl $(echo dist/libsbmlnetwork*.whl | sed "s/cp${python_version_number}-cp${python_version_number}/py3-none/g") | |
- name: Create SBMLNetwork Python wheel artifacts | |
if: matrix.platform.build_type == 'Release' && matrix.platform.build_python == 'ON' | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/sbmlnetwork | |
if [ "${{ matrix.platform.os_type }}" == 'windows' ]; then | |
python setup.py bdist_wheel | |
else | |
python${{ matrix.python_version }} setup.py bdist_wheel | |
fi | |
- name: Set Python wheel artifacts path and name | |
if: matrix.platform.build_type == 'Release' && matrix.platform.build_python == 'ON' | |
shell: bash | |
run: | | |
cd ${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages | |
libsbmlnetwork_python_wheel_file_name=$(ls libsbmlnetwork/dist | grep '^libsbmlnetwork') | |
echo "libsbmlnetwork_python_wheel_artifacts_name=${libsbmlnetwork_python_wheel_file_name}" >> "${GITHUB_ENV}" | |
sbmlnetwork_python_wheel_file_name=$(ls sbmlnetwork/dist | grep '^sbmlnetwork') | |
echo "sbmlnetwork_python_wheel_artifacts_name=${sbmlnetwork_python_wheel_file_name}" >> "${GITHUB_ENV}" | |
# we need to use relative path as actions/upload-artifact@v1 cannot find it on containerized runners | |
echo "libsbmlnetwork_python_wheel_artifacts_file=${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/libsbmlnetwork/dist/$libsbmlnetwork_python_wheel_file_name" >> "${GITHUB_ENV}" | |
echo "sbmlnetwork_python_wheel_artifacts_file=${RUNNER_WORKSPACE}/install-libsbmlnetwork/lib/python/site-packages/sbmlnetwork/dist/$sbmlnetwork_python_wheel_file_name" >> "${GITHUB_ENV}" | |
- name: Upload libSBMLNetwork Python wheel artifacts | |
if: matrix.platform.build_type == 'Release' && matrix.platform.build_python == 'ON' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.libsbmlnetwork_python_wheel_artifacts_name}} | |
path: ${{env.libsbmlnetwork_python_wheel_artifacts_file}} | |
- name: Upload SBMLNetwork Python wheel artifacts | |
if: matrix.platform.build_type == 'Release' && matrix.platform.build_python == 'ON' && matrix.platform.os_name == 'macos-latest' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.sbmlnetwork_python_wheel_artifacts_name}} | |
path: ${{env.sbmlnetwork_python_wheel_artifacts_file}} |