[gym/common] Add 'DeformationEstimator' block. #4167
Workflow file for this run
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: Linux CI (Build from source dependencies) | |
on: | |
# Trigger the workflow on push on the master branch, or for any pull request | |
push: | |
branches: | |
- master | |
pull_request: | |
jobs: | |
build-and-test-linux: | |
name: >- | |
(${{ matrix.PYTHON_VERSION }}) (${{ matrix.BUILD_TYPE }}) | |
Build the dependencies. Build the project and run the unit tests. | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
PYTHON_VERSION: ['3.8', '3.9', '3.10', '3.11', '3.12'] | |
BUILD_TYPE: ['Release'] | |
include: | |
- PYTHON_VERSION: '3.10' | |
BUILD_TYPE: 'Debug' | |
defaults: | |
run: | |
shell: bash -ieo pipefail {0} | |
env: | |
CMAKE_CXX_FLAGS: "-march=x86-64-v3 -mtune=generic" | |
##################################################################################### | |
steps: | |
- name: Configure Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.PYTHON_VERSION }} | |
- name: Free Disk Space | |
uses: jlumbroso/free-disk-space@v1.3.1 | |
with: | |
tool-cache: false | |
android: true | |
dotnet: true | |
haskell: true | |
large-packages: false | |
swap-storage: false | |
- name: Checkout jiminy | |
uses: actions/checkout@v4 | |
##################################################################################### | |
- name: Define environment variables | |
run: | | |
PYTHON_EXECUTABLE="${pythonLocation}/bin/python3" | |
echo "PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}" >> $GITHUB_ENV | |
echo "RootDir=${GITHUB_WORKSPACE}" >> $GITHUB_ENV | |
echo "InstallDir=${GITHUB_WORKSPACE}/install" >> $GITHUB_ENV | |
echo "/home/runner/.local/bin" >> $GITHUB_PATH | |
- name: Setup minimal build environment | |
run: | | |
sudo apt update | |
sudo apt install -y gdb gnupg curl wget build-essential cmake doxygen graphviz texlive-latex-base | |
"${PYTHON_EXECUTABLE}" -m pip install setuptools wheel "pip>=20.3" | |
"${PYTHON_EXECUTABLE}" -m pip install "numpy>=1.21,<2.0" | |
git config --global advice.detachedHead false | |
- name: Build jiminy dependencies | |
run: | | |
BUILD_TYPE="${{ matrix.BUILD_TYPE }}" ./build_tools/build_install_deps_unix.sh | |
- name: Install pre-compiled binaries for additional gym-jiminy dependencies | |
if: matrix.PYTHON_VERSION != '3.12' | |
run: | | |
"${PYTHON_EXECUTABLE}" -m pip install "torch" -f https://download.pytorch.org/whl/torch | |
"${PYTHON_EXECUTABLE}" -m pip install "gymnasium>=0.26,<0.29" "importlib-metadata>=3.3.0" | |
##################################################################################### | |
- name: Build and install Jiminy | |
run: | | |
unset Boost_ROOT | |
mkdir "$RootDir/build" | |
cd "$RootDir/build" | |
cmake "$RootDir" -DCMAKE_INSTALL_PREFIX="$InstallDir" -DCMAKE_PREFIX_PATH="$InstallDir" \ | |
-DBOOST_ROOT="$InstallDir" -DBoost_INCLUDE_DIR="$InstallDir/include" \ | |
-DBoost_NO_SYSTEM_PATHS=TRUE -DBoost_NO_BOOST_CMAKE=TRUE -DBoost_USE_STATIC_LIBS=ON \ | |
-DPYTHON_EXECUTABLE="${PYTHON_EXECUTABLE}" \ | |
-DBUILD_TESTING=ON -DBUILD_EXAMPLES=ON -DBUILD_PYTHON_INTERFACE=ON \ | |
-DINSTALL_GYM_JIMINY=${{ (matrix.PYTHON_VERSION == '3.12' && 'OFF') || 'ON' }} \ | |
-DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS}" -DCMAKE_BUILD_TYPE="${{ matrix.BUILD_TYPE }}" | |
make install -j2 | |
echo "LD_LIBRARY_PATH=$InstallDir/lib:$InstallDir/lib64:/usr/local/lib" >> $GITHUB_ENV | |
##################################################################################### | |
- name: Build extension module | |
run: | | |
"$InstallDir/bin/jiminy_double_pendulum" | |
mkdir -p "$RootDir/core/examples/external_project/build" | |
cd "$RootDir/core/examples/external_project/build" | |
cmake "$RootDir/core/examples/external_project/" -DCMAKE_INSTALL_PREFIX="$InstallDir" \ | |
-DCMAKE_PREFIX_PATH="$InstallDir" -DPYTHON_EXECUTABLE="${PYTHON_EXECUTABLE}" \ | |
-DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS}" -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" | |
make install | |
"$InstallDir/bin/pip_double_pendulum" | |
##################################################################################### | |
- name: Run unit tests for jiminy | |
run: | | |
ctest --output-on-failure --test-dir "${RootDir}/build/core/unit" | |
"${PYTHON_EXECUTABLE}" -m unittest discover -s "$RootDir/python/jiminy_py/unit_py" -v | |
- name: Run unit tests for gym_jiminy | |
if: matrix.BUILD_TYPE == 'Release' && matrix.PYTHON_VERSION != '3.12' | |
run: | | |
cd "$RootDir/python/gym_jiminy/examples/reinforcement_learning/rllib" | |
gdb -batch -ex "run" -ex "bt" --args "${PYTHON_EXECUTABLE}" acrobot_ppo.py 2>&1 | \ | |
grep -v ^"No stack."$ && exit 1 | |
# FIXME: Must install stable_baselines3 after running rllib test | |
# because they require a different version of `gymnasium`. | |
"${PYTHON_EXECUTABLE}" -m pip install "stable_baselines3>=2.0" | |
"${PYTHON_EXECUTABLE}" -m unittest discover -s "$RootDir/python/gym_jiminy/unit_py" -v | |
- name: Python static type checker | |
if: matrix.PYTHON_VERSION == '3.8' && matrix.BUILD_TYPE == 'Release' | |
run: | | |
# Generate stubs | |
stubgen -p jiminy_py -o $RootDir/build/pypi/jiminy_py/src | |
"${PYTHON_EXECUTABLE}" "$RootDir/build_tools/stub_gen.py" \ | |
-o $RootDir/build/stubs --ignore-invalid=all jiminy_py | |
cp $RootDir/build/stubs/jiminy_py-stubs/core/__init__.pyi \ | |
$RootDir/build/pypi/jiminy_py/src/jiminy_py/core/core.pyi | |
# Re-install jiminy with stubs | |
cd "$RootDir/build" | |
make install | |
# FIXME: Force re-installing the right version of gymnasium | |
"${PYTHON_EXECUTABLE}" -m pip install "gymnasium>=0.28,<0.29" | |
# mypy is not able to follow `.pth` when checking directories or files. | |
# This bug may be fixed in the future. The only workaround is to set `MYPYPATH` manually. | |
# Anyway, the stubs generated for eigenpy, hppfcl and pinocchio they are incomplete and | |
# even partially wrong, so it is better to ignore them for now. | |
# See: https://github.com/python/mypy/issues/14848. | |
cd "$RootDir/python/jiminy_py/" | |
mypy --config-file="$RootDir/.mypy.ini" -p src | |
for name in "common" "envs" "toolbox" "rllib"; do | |
cd "$RootDir/python/gym_jiminy/$name" | |
mypy --config-file="$RootDir/.mypy.ini" -p gym_jiminy | |
done |