Skip to content

Upgrade to SWIG 4.1.1 on CI builds #2917

Upgrade to SWIG 4.1.1 on CI builds

Upgrade to SWIG 4.1.1 on CI builds #2917

name: continuous-integration
# syntax https://help.github.com/en/articles/workflow-syntax-for-github-actions
on:
# Run at 2am every night.
schedule:
- cron: '0 2 * * *'
pull_request:
branches:
- '*'
push:
branches:
- master
tags:
- '*'
jobs:
windows:
name: Windows
runs-on: windows-2019
steps:
- uses: actions/checkout@v3
- name: Install Doxygen
# choco install doxygen.portable # <-- too unreliable.
run: |
(New-Object System.Net.WebClient).DownloadFile("https://sourceforge.net/projects/myosin/files/doxygen-1.8.14.windows.x64.bin.zip/download", "doxygen.zip")
7z x $env:GITHUB_WORKSPACE/doxygen.zip -odoxygen
echo "$env:GITHUB_WORKSPACE\\doxygen" >> $GITHUB_PATH
- name: Install Python packages
uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Install numpy
#Need numpy to use SWIG numpy typemaps.
run: python3 -m pip install numpy==1.20.2
- name: Install SWIG
run: |
choco install swig --version 4.0.2 --yes --limit-output --allow-downgrade
swig -swiglib
- name: Cache dependencies
id: cache-dependencies
uses: actions/cache@v3
with:
path: ~/opensim_dependencies_install
# Every time a cache is created, it's stored with this key.
# In subsequent runs, if the key matches the key of an existing cache,
# then the cache is used. We chose for this key to depend on the
# operating system and a hash of the hashes of all files in the
# dependencies directory (non-recursive).
# https://help.github.com/en/actions/automating-your-workflow-with-github-actions/caching-dependencies-to-speed-up-workflows#matching-a-cache-key
key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }}
- name: Build dependencies
# if: steps.cache-dependencies.outputs.cache-hit != 'true'
run: |
echo $env:GITHUB_WORKSPACE\\build_deps
mkdir $env:GITHUB_WORKSPACE\\build_deps
chdir $env:GITHUB_WORKSPACE\\build_deps
# /W0 disables warnings.
# https://msdn.microsoft.com/en-us/library/19z1t1wy.aspx
# TODO: CMake provides /W3, which overrides our /W0
cmake -E env CXXFLAGS="/W0" cmake $env:GITHUB_WORKSPACE/dependencies -LAH -G"Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install -DSUPERBUILD_ezc3d=ON -DOPENSIM_WITH_TROPTER=ON -DOPENSIM_WITH_CASADI=ON
cmake --build . --config Release -- /maxcpucount:4
- name: Configure opensim-core
id: configure
run: |
mkdir $env:GITHUB_WORKSPACE\\build
chdir $env:GITHUB_WORKSPACE\\build
# TODO: Can remove /WX when we use that in CMakeLists.txt.
# Set the CXXFLAGS environment variable to turn warnings into errors.
# Skip timing test section included by default.
cmake -E env CXXFLAGS="/WX -DSKIP_TIMING" cmake $env:GITHUB_WORKSPACE -LAH -G"Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX=~/opensim-core-install -DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install -DOPENSIM_C3D_PARSER=ezc3d -DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on -DPython3_ROOT_DIR=C:\hostedtoolcache\windows\Python\3.8.10\x64 -DSWIG_DIR=C:\ProgramData\Chocolatey\lib\swig\tools\install\Lib -DSWIG_EXECUTABLE=C:\ProgramData\chocolatey\bin\swig.exe
$env:match = cmake -L . | Select-String -Pattern OPENSIM_QUALIFIED_VERSION
$version = $env:match.split('=')[1]
echo $version
echo "VERSION=$version" >> $GITHUB_ENV
echo "version=$version" >> $env:GITHUB_OUTPUT
- name: Build opensim-core
# Install now to avoid building bindings twice (issue when using Visual Studio 2019).
run: |
chdir $env:GITHUB_WORKSPACE\\build
cmake --build . --config Release --target doxygen -- /maxcpucount:4
cmake --build . --config Release --target install -- /maxcpucount:4
- name: Test opensim-core
run: |
chdir $env:GITHUB_WORKSPACE\\build
ctest --parallel 4 --output-on-failure --build-config Release -E python*
- name: Install opensim-core
# TODO: This is where we wish to do the installing, but it's done above for now.
run: |
chdir $env:GITHUB_WORKSPACE\\build
chdir $env:GITHUB_WORKSPACE
Copy-Item -Path "~/opensim-core-install" -Destination "opensim-core-${{ steps.configure.outputs.version }}" -Recurse
7z a "opensim-core-${{ steps.configure.outputs.version }}.zip" "opensim-core-${{ steps.configure.outputs.version }}"
- name: Test Python bindings
run: |
echo "PYTHONPATH= $env:USERPROFILE/opensim-core-install/bin">> $GITHUB_ENV
# Move to the installed location of the python package.
cd ~/opensim-core-install/sdk/python
python setup_win_python38.py
# Run python tests.
python -m unittest discover --start-directory opensim/tests --verbose
- name: Upload opensim-core
uses: actions/upload-artifact@v3
with:
name: opensim-core-${{ steps.configure.outputs.version }}-win
path: opensim-core-${{ steps.configure.outputs.version }}.zip
# TODO: Must be relative to the workspace?
# - name: Upload opensim-moco dependencies
# uses: actions/upload-artifact@v1.0.0
# with:
# name: opensim-core-dependencies
# path: opensim_dependencies_install.zip
# - name: Create release
# id: create-release
# uses: actions/create-release@v1.0.0
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# tag_name: ${{ github.ref }}
# release_name: OpenSim Core ${{ github.ref }}
# draft: true
# prerelease: false
# - name: Zip opensim-core
# run: |
# 7z a opensim-core-$VERSION.zip opensim-core-${VERSION}
# - name: Upload release asset
# id: upload-release-asset
# uses: actions/upload-release-asset@v1.0.1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# upload_url: ${{ steps.create-release.outputs.upload_url }}
# asset_path: ./opensim-core-${{ github.ref }}.zip
# asset_name: opensim-core-${{ github.ref }}.zip
# asset_content_type: application/zip
windows2022:
name: Windows2022
runs-on: windows-2022
steps:
- uses: actions/checkout@v3
- name: Install Doxygen
# choco install doxygen.portable # <-- too unreliable.
run: |
(New-Object System.Net.WebClient).DownloadFile("https://sourceforge.net/projects/myosin/files/doxygen-1.8.14.windows.x64.bin.zip/download", "doxygen.zip")
7z x $env:GITHUB_WORKSPACE/doxygen.zip -odoxygen
echo "$env:GITHUB_WORKSPACE\\doxygen" >> $GITHUB_PATH
- name: Install Python packages
uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Install numpy
#Need numpy to use SWIG numpy typemaps.
run: python3 -m pip install numpy==1.20.2
- name: Install SWIG
run: |
choco install swig --version 4.0.2 --yes --limit-output --allow-downgrade
swig -swiglib
- name: Cache dependencies
id: cache-dependencies
uses: actions/cache@v3
with:
path: ~/opensim_dependencies_install
# Every time a cache is created, it's stored with this key.
# In subsequent runs, if the key matches the key of an existing cache,
# then the cache is used. We chose for this key to depend on the
# operating system and a hash of the hashes of all files in the
# dependencies directory (non-recursive).
# https://help.github.com/en/actions/automating-your-workflow-with-github-actions/caching-dependencies-to-speed-up-workflows#matching-a-cache-key
key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }}
- name: Build dependencies
if: steps.cache-dependencies.outputs.cache-hit != 'true'
run: |
echo $env:GITHUB_WORKSPACE\\build_deps
mkdir $env:GITHUB_WORKSPACE\\build_deps
chdir $env:GITHUB_WORKSPACE\\build_deps
# /W0 disables warnings.
# https://msdn.microsoft.com/en-us/library/19z1t1wy.aspx
# TODO: CMake provides /W3, which overrides our /W0
cmake -E env CXXFLAGS="/W0" cmake $env:GITHUB_WORKSPACE/dependencies -LAH -G"Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install -DSUPERBUILD_ezc3d=ON -DOPENSIM_WITH_TROPTER=ON -DOPENSIM_WITH_CASADI=ON
cmake --build . --config Release -- /maxcpucount:4
- name: Configure opensim-core
id: configure
run: |
mkdir $env:GITHUB_WORKSPACE\\build
chdir $env:GITHUB_WORKSPACE\\build
# TODO: Can remove /WX when we use that in CMakeLists.txt.
# Set the CXXFLAGS environment variable to turn warnings into errors.
# Skip timing test section included by default.
cmake -E env CXXFLAGS="/WX -DSKIP_TIMING" cmake $env:GITHUB_WORKSPACE -LAH -G"Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=~/opensim-core-install -DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install -DOPENSIM_C3D_PARSER=ezc3d -DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on -DPython3_ROOT_DIR=C:\hostedtoolcache\windows\Python\3.8.10\x64 -DSWIG_DIR=C:\ProgramData\Chocolatey\lib\swig\tools\install\Lib -DSWIG_EXECUTABLE=C:\ProgramData\chocolatey\bin\swig.exe
$env:match = cmake -L . | Select-String -Pattern OPENSIM_QUALIFIED_VERSION
$version = $env:match.split('=')[1]
echo $version
echo "VERSION=$version" >> $GITHUB_ENV
echo "version=$version" >> $env:GITHUB_OUTPUT
- name: Build opensim-core
# Install now to avoid building bindings twice (TODO: issue when using Visual Studio 2019, is this an issue too in Visual Studio 2022?).
run: |
chdir $env:GITHUB_WORKSPACE\\build
cmake --build . --config Release --target doxygen -- /maxcpucount:4
cmake --build . --config Release --target install -- /maxcpucount:4
- name: Test opensim-core
run: |
chdir $env:GITHUB_WORKSPACE\\build
ctest --parallel 4 --output-on-failure --build-config Release -E python*
- name: Install opensim-core
# TODO: This is where we wish to do the installing, but it's done above for now.
run: |
chdir $env:GITHUB_WORKSPACE\\build
chdir $env:GITHUB_WORKSPACE
Copy-Item -Path "~/opensim-core-install" -Destination "opensim-core-${{ steps.configure.outputs.version }}" -Recurse
7z a "opensim-core-${{ steps.configure.outputs.version }}.zip" "opensim-core-${{ steps.configure.outputs.version }}"
- name: Test Python bindings
run: |
echo "PYTHONPATH= $env:USERPROFILE/opensim-core-install/bin">> $GITHUB_ENV
# Move to the installed location of the python package.
cd ~/opensim-core-install/sdk/python
python setup_win_python38.py
# Run python tests.
python -m unittest discover --start-directory opensim/tests --verbose
- name: Upload opensim-core
uses: actions/upload-artifact@v3
with:
name: opensim-core-${{ steps.configure.outputs.version }}-win
path: opensim-core-${{ steps.configure.outputs.version }}.zip
mac:
name: Mac
runs-on: macos-11
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Install Homebrew packages
# Save the gfortran version to a file so we can use it in the cache key.
run: |
brew install cmake pkgconfig autoconf libtool automake wget pcre doxygen llvm
brew reinstall gcc
pip3 install numpy==1.20.2
gfortran -v
mkdir gfortran_version
gfortran -v &> gfortran_version/gfortran_version.txt
- name: Cache SWIG
id: cache-swig
uses: actions/cache@v3
with:
path: ~/swig
key: ${{ runner.os }}-swig
- name: Install SWIG
# if: steps.cache-swig.outputs.cache-hit != 'true'
run: |
mkdir ~/swig-source && cd ~/swig-source
wget https://github.com/swig/swig/archive/refs/tags/rel-4.0.2.tar.gz
tar xzf rel-4.0.2.tar.gz && cd swig-rel-4.0.2
sh autogen.sh && ./configure --prefix=$HOME/swig --disable-ccache
make && make -j4 install
- name: Cache dependencies
id: cache-dependencies
uses: actions/cache@v3
with:
path: ~/opensim_dependencies_install
# If Homebrew updates the gcc package, then our cache of IPOPT is invalid.
# Specifically, the pkgcfg_lib_IPOPT_gfortran CMake variable becomes
# undefined.
key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }}-${{ hashFiles('gfortran_version/*') }}
- name: Build dependencies
if: steps.cache-dependencies.outputs.cache-hit != 'true'
run: |
mkdir $GITHUB_WORKSPACE/../build_deps
cd $GITHUB_WORKSPACE/../build_deps
DEP_CMAKE_ARGS=($GITHUB_WORKSPACE/dependencies -LAH)
DEP_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install)
DEP_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release)
DEP_CMAKE_ARGS+=(-DSUPERBUILD_ezc3d=ON)
DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_TROPTER=ON)
DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_CASADI=ON)
DEP_CMAKE_ARGS+=(-DOPENSIM_DISABLE_LOG_FILE=ON)
DEP_CMAKE_ARGS+=(-DCMAKE_OSX_DEPLOYMENT_TARGET=11)
printf '%s\n' "${DEP_CMAKE_ARGS[@]}"
cmake "${DEP_CMAKE_ARGS[@]}"
make --jobs 4
- name: Configure opensim-core
id: configure
run: |
mkdir $GITHUB_WORKSPACE/../build
cd $GITHUB_WORKSPACE/../build
OSIM_CMAKE_ARGS=($GITHUB_WORKSPACE -LAH)
OSIM_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/../opensim-core-install)
OSIM_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release)
OSIM_CMAKE_ARGS+=(-DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install)
OSIM_CMAKE_ARGS+=(-DCMAKE_OSX_DEPLOYMENT_TARGET=11)
OSIM_CMAKE_ARGS+=(-DOPENSIM_C3D_PARSER=ezc3d)
OSIM_CMAKE_ARGS+=(-DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on)
OSIM_CMAKE_ARGS+=(-DSWIG_EXECUTABLE=$HOME/swig/bin/swig)
OSIM_CMAKE_ARGS+=(-DOPENSIM_INSTALL_UNIX_FHS=OFF)
OSIM_CMAKE_ARGS+=(-DOPENSIM_DOXYGEN_USE_MATHJAX=off)
# TODO: Update to simbody.github.io/latest
OSIM_CMAKE_ARGS+=(-DOPENSIM_SIMBODY_DOXYGEN_LOCATION="https://simbody.github.io/simtk.org/api_docs/simbody/latest/")
OSIM_CMAKE_ARGS+=(-DCMAKE_CXX_FLAGS="-Werror, -Wdeprecated-copy")
printf '%s\n' "${OSIM_CMAKE_ARGS[@]}"
cmake "${OSIM_CMAKE_ARGS[@]}"
VERSION=`cmake -L . | grep OPENSIM_QUALIFIED_VERSION | cut -d "=" -f2`
echo $VERSION
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Build opensim-core
run: |
cd $GITHUB_WORKSPACE/../build
make --jobs 4
- name: Test opensim-core
run: |
cd $GITHUB_WORKSPACE/../build
ctest --parallel 4 --output-on-failure
- name: Install opensim-core
run: |
cd $GITHUB_WORKSPACE/../build
make doxygen
make install
cd $GITHUB_WORKSPACE
mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ steps.configure.outputs.version }}
zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}-11.zip opensim-core-${{ steps.configure.outputs.version }}
mv opensim-core-${{ steps.configure.outputs.version }} $GITHUB_WORKSPACE/../opensim-core-install
- name: Test Python bindings
run: |
cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python
# Run the python tests, verbosely.
python3 -m unittest discover --start-directory opensim/tests --verbose
- name: Upload opensim-core
uses: actions/upload-artifact@v3
with:
# The upload-artifact zipping does not preserve symlinks or executable
# bits. So we zip ourselves, even though this causes a double-zip.
name: opensim-core-${{ steps.configure.outputs.version }}-mac-11
path: opensim-core-${{ steps.configure.outputs.version }}-11.zip
ubuntu20:
name: Ubuntu2004
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: Install packages
run: sudo apt-get update && sudo apt-get install --yes build-essential libtool autoconf pkg-config gfortran libopenblas-dev liblapack-dev freeglut3-dev libxi-dev libxmu-dev doxygen python3 python3-dev python3-numpy python3-setuptools patchelf
- name: Install SWIG
# if: steps.cache-swig.outputs.cache-hit != 'true'
run: |
mkdir ~/swig-source && cd ~/swig-source
wget https://github.com/swig/swig/archive/refs/tags/rel-4.0.2.tar.gz
tar xzf rel-4.0.2.tar.gz && cd swig-rel-4.0.2
sh autogen.sh && ./configure --prefix=$HOME/swig --disable-ccache
make && make -j4 install
- name: Cache dependencies
id: cache-dependencies
uses: actions/cache@v3
with:
path: ~/opensim_dependencies_install
key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }}
- name: Build dependencies
# if: steps.cache-dependencies.outputs.cache-hit != 'true'
run: |
mkdir $GITHUB_WORKSPACE/../build_deps
cd $GITHUB_WORKSPACE/../build_deps
DEP_CMAKE_ARGS=($GITHUB_WORKSPACE/dependencies -LAH)
DEP_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install)
DEP_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release)
DEP_CMAKE_ARGS+=(-DSUPERBUILD_ezc3d=ON)
DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_TROPTER=ON)
DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_CASADI=ON)
printf '%s\n' "${DEP_CMAKE_ARGS[@]}"
cmake "${DEP_CMAKE_ARGS[@]}"
make --jobs 4
- name: Configure opensim-core
id: configure
run: |
mkdir $GITHUB_WORKSPACE/../build
cd $GITHUB_WORKSPACE/../build
OSIM_CMAKE_ARGS=($GITHUB_WORKSPACE -LAH)
OSIM_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/../opensim-core-install)
OSIM_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release)
OSIM_CMAKE_ARGS+=(-DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install)
OSIM_CMAKE_ARGS+=(-DOPENSIM_C3D_PARSER=ezc3d)
OSIM_CMAKE_ARGS+=(-DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on)
OSIM_CMAKE_ARGS+=(-DSWIG_DIR=~/swig/share/swig)
OSIM_CMAKE_ARGS+=(-DSWIG_EXECUTABLE=~/swig/bin/swig)
OSIM_CMAKE_ARGS+=(-DOPENSIM_INSTALL_UNIX_FHS=OFF)
OSIM_CMAKE_ARGS+=(-DOPENSIM_DOXYGEN_USE_MATHJAX=off)
# TODO: Update to simbody.github.io/latest
OSIM_CMAKE_ARGS+=(-DOPENSIM_SIMBODY_DOXYGEN_LOCATION="https://simbody.github.io/simtk.org/api_docs/simbody/latest/")
OSIM_CMAKE_ARGS+=(-DCMAKE_CXX_FLAGS="-Werror")
printf '%s\n' "${OSIM_CMAKE_ARGS[@]}"
cmake "${OSIM_CMAKE_ARGS[@]}"
VERSION=`cmake -L . | grep OPENSIM_QUALIFIED_VERSION | cut -d "=" -f2`
echo $VERSION
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Build opensim-core
run: |
cd $GITHUB_WORKSPACE/../build
make --jobs 4
- name: Test opensim-core
run: |
cd $GITHUB_WORKSPACE/../build
# TODO: Temporary for python to find Simbody libraries.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/opensim_dependencies_install/simbody/lib
ctest --parallel 4 --output-on-failure
- name: Install opensim-core
run: |
cd $GITHUB_WORKSPACE/../build
make doxygen
make --jobs 4 install
cd $GITHUB_WORKSPACE
mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ steps.configure.outputs.version }}
zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}-ub20.zip opensim-core-${{ steps.configure.outputs.version }}
mv opensim-core-${{ steps.configure.outputs.version }} $GITHUB_WORKSPACE/../opensim-core-install
# - name: Test Python bindings
# run: |
# echo "TODO: Skipping Python tests."
# # cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python
# # Run the python tests, verbosely.
# # python3 -m unittest discover --start-directory opensim/tests --verbose
- name: Upload opensim-core
uses: actions/upload-artifact@v3
with:
# The upload-artifact zipping does not preserve symlinks or executable
# bits. So we zip ourselves, even though this causes a double-zip.
name: opensim-core-${{ steps.configure.outputs.version }}-ub20-linux
path: opensim-core-${{ steps.configure.outputs.version }}-ub20.zip
ubuntu20-nomoco:
name: Ubuntu2004-nomoco
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: Install packages
run: sudo apt-get update && sudo apt-get install --yes build-essential libtool autoconf pkg-config gfortran libopenblas-dev liblapack-dev freeglut3-dev libxi-dev libxmu-dev doxygen python3 python3-dev python3-numpy python3-setuptools patchelf
- name: Install SWIG
# if: steps.cache-swig.outputs.cache-hit != 'true'
run: |
mkdir ~/swig-source && cd ~/swig-source
wget https://github.com/swig/swig/archive/refs/tags/rel-4.0.2.tar.gz
tar xzf rel-4.0.2.tar.gz && cd swig-rel-4.0.2
sh autogen.sh && ./configure --prefix=$HOME/swig --disable-ccache
make && make -j4 install
- name: Cache dependencies
id: cache-dependencies
uses: actions/cache@v3
with:
path: ~/opensim_dependencies_install
key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }}
- name: Build dependencies
# if: steps.cache-dependencies.outputs.cache-hit != 'true'
run: |
mkdir $GITHUB_WORKSPACE/../build_deps
cd $GITHUB_WORKSPACE/../build_deps
DEP_CMAKE_ARGS=($GITHUB_WORKSPACE/dependencies -LAH)
DEP_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install)
DEP_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release)
DEP_CMAKE_ARGS+=(-DSUPERBUILD_ezc3d=ON)
DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_TROPTER=OFF)
DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_CASADI=OFF)
printf '%s\n' "${DEP_CMAKE_ARGS[@]}"
cmake "${DEP_CMAKE_ARGS[@]}"
make --jobs 4
- name: Configure opensim-core
id: configure
run: |
mkdir $GITHUB_WORKSPACE/../build
cd $GITHUB_WORKSPACE/../build
OSIM_CMAKE_ARGS=($GITHUB_WORKSPACE -LAH)
OSIM_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/../opensim-core-install)
OSIM_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release)
OSIM_CMAKE_ARGS+=(-DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install)
OSIM_CMAKE_ARGS+=(-DOPENSIM_C3D_PARSER=ezc3d)
OSIM_CMAKE_ARGS+=(-DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on)
OSIM_CMAKE_ARGS+=(-DSWIG_DIR=~/swig/share/swig)
OSIM_CMAKE_ARGS+=(-DSWIG_EXECUTABLE=~/swig/bin/swig)
OSIM_CMAKE_ARGS+=(-DOPENSIM_INSTALL_UNIX_FHS=OFF)
OSIM_CMAKE_ARGS+=(-DOPENSIM_DOXYGEN_USE_MATHJAX=off)
OSIM_CMAKE_ARGS+=(-DOPENSIM_WITH_TROPTER=off)
OSIM_CMAKE_ARGS+=(-DOPENSIM_WITH_CASADI=off)
# TODO: Update to simbody.github.io/latest
OSIM_CMAKE_ARGS+=(-DOPENSIM_SIMBODY_DOXYGEN_LOCATION="https://simbody.github.io/simtk.org/api_docs/simbody/latest/")
OSIM_CMAKE_ARGS+=(-DCMAKE_CXX_FLAGS="-Werror")
printf '%s\n' "${OSIM_CMAKE_ARGS[@]}"
cmake "${OSIM_CMAKE_ARGS[@]}"
VERSION=`cmake -L . | grep OPENSIM_QUALIFIED_VERSION | cut -d "=" -f2`
echo $VERSION
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Build opensim-core
run: |
cd $GITHUB_WORKSPACE/../build
make --jobs 4
- name: Test opensim-core
run: |
cd $GITHUB_WORKSPACE/../build
# TODO: Temporary for python to find Simbody libraries.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/opensim_dependencies_install/simbody/lib
# ctest --parallel 4 --output-on-failure
- name: Install opensim-core
run: |
cd $GITHUB_WORKSPACE/../build
make doxygen
make --jobs 4 install
cd $GITHUB_WORKSPACE
mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ steps.configure.outputs.version }}
zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}-ub20.zip opensim-core-${{ steps.configure.outputs.version }}
mv opensim-core-${{ steps.configure.outputs.version }} $GITHUB_WORKSPACE/../opensim-core-install
# - name: Test Python bindings
# run: |
# echo "TODO: Skipping Python tests."
# # cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python
# # Run the python tests, verbosely.
# # python3 -m unittest discover --start-directory opensim/tests --verbose
- name: Upload opensim-core
uses: actions/upload-artifact@v3
with:
# The upload-artifact zipping does not preserve symlinks or executable
# bits. So we zip ourselves, even though this causes a double-zip.
name: opensim-core-${{ steps.configure.outputs.version }}-ub20-nomoco-linux
path: opensim-core-${{ steps.configure.outputs.version }}-ub20.zip
style:
name: Style
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: Check for tabs
# Ensure that there are no tabs in source code.
# GREP returns 0 (true) if there are any matches, and
# we don't want any matches. If there are matches,
# print a helpful message, and make the test fail by using "false".
# The GREP command here checks for any tab characters in the the files
# that match the specified pattern. GREP does not pick up explicit tabs
# (e.g., literally a \t in a source file).
run: if grep --line-num --recursive --exclude-dir="*dependencies*" --exclude-dir="*snopt*" --include={CMakeLists.txt,*.cpp,*.c,*.h} -P "\t" . ; then echo "Tabs found in the lines shown above. See CONTRIBUTING.md about tabs."; false; fi