ab63a7e824
This adds an option MUJOCO_BUILD_USD_PLUGINS to the top level CMakeLists which allows us to build the usdMjcf file format plugin with the rest of mujoco. In this first version, we allow building against either standalone USD or against Houdini (DCC) since it has it's own fork of USD. When building against standalone USD we also build the file format tests. PiperOrigin-RevId: 753969974 Change-Id: If691eecbddf45d18b7c4ff76f7650999d42e99c5
300 lines
11 KiB
YAML
300 lines
11 KiB
YAML
# This configuration is used to build and test on GitHub Actions only.
|
|
# It is not the same configuration that is used by Google DeepMind to create release binaries.
|
|
# The "official" binaries are built with Clang 13 on all platforms, and are linked against libc++
|
|
# on Linux.
|
|
#
|
|
# We set CMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF here to reduce build time.
|
|
# It is highly recommended that this is set to ON for production builds.
|
|
|
|
name: build
|
|
|
|
on:
|
|
push:
|
|
paths-ignore:
|
|
- "doc/**"
|
|
- "**/README.md"
|
|
pull_request:
|
|
paths-ignore:
|
|
- "doc/**"
|
|
- "**/README.md"
|
|
|
|
jobs:
|
|
mujoco:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-22.04
|
|
additional_label: "-gcc-12"
|
|
cmake_args: >-
|
|
-G Ninja
|
|
-DCMAKE_C_COMPILER:STRING=gcc-12
|
|
-DCMAKE_CXX_COMPILER:STRING=g++-12
|
|
-DCMAKE_EXE_LINKER_FLAGS:STRING=-Wl,--no-as-needed
|
|
tmpdir: "/tmp"
|
|
- os: ubuntu-22.04
|
|
additional_label: "-gcc-11"
|
|
cmake_args: >-
|
|
-G Ninja
|
|
-DCMAKE_C_COMPILER:STRING=gcc-11
|
|
-DCMAKE_CXX_COMPILER:STRING=g++-11
|
|
-DCMAKE_EXE_LINKER_FLAGS:STRING=-Wl,--no-as-needed
|
|
tmpdir: "/tmp"
|
|
- os: ubuntu-22.04
|
|
additional_label: "-gcc-10"
|
|
cmake_args: >-
|
|
-G Ninja
|
|
-DCMAKE_C_COMPILER:STRING=gcc-10
|
|
-DCMAKE_CXX_COMPILER:STRING=g++-10
|
|
-DCMAKE_EXE_LINKER_FLAGS:STRING=-Wl,--no-as-needed
|
|
tmpdir: "/tmp"
|
|
- os: ubuntu-22.04
|
|
additional_label: "-gcc-9"
|
|
cmake_args: >-
|
|
-G Ninja
|
|
-DCMAKE_C_COMPILER:STRING=gcc-9
|
|
-DCMAKE_CXX_COMPILER:STRING=g++-9
|
|
-DCMAKE_EXE_LINKER_FLAGS:STRING=-Wl,--no-as-needed
|
|
tmpdir: "/tmp"
|
|
- os: ubuntu-22.04
|
|
additional_label: "-clang-14"
|
|
cmake_args: >-
|
|
-G Ninja
|
|
-DCMAKE_C_COMPILER:STRING=clang-14
|
|
-DCMAKE_CXX_COMPILER:STRING=clang++-14
|
|
-DMUJOCO_HARDEN:BOOL=ON
|
|
tmpdir: "/tmp"
|
|
- os: ubuntu-22.04
|
|
additional_label: "-clang-13"
|
|
cmake_args: >-
|
|
-G Ninja
|
|
-DCMAKE_C_COMPILER:STRING=clang-13
|
|
-DCMAKE_CXX_COMPILER:STRING=clang++-13
|
|
-DMUJOCO_HARDEN:BOOL=ON
|
|
tmpdir: "/tmp"
|
|
- os: ubuntu-20.04
|
|
additional_label: "-clang-12"
|
|
cmake_args: >-
|
|
-G Ninja
|
|
-DCMAKE_C_COMPILER:STRING=clang-12
|
|
-DCMAKE_CXX_COMPILER:STRING=clang++-12
|
|
-DMUJOCO_HARDEN:BOOL=ON
|
|
tmpdir: "/tmp"
|
|
- os: ubuntu-20.04
|
|
additional_label: "-clang-11"
|
|
cmake_args: >-
|
|
-G Ninja
|
|
-DCMAKE_C_COMPILER:STRING=clang-11
|
|
-DCMAKE_CXX_COMPILER:STRING=clang++-11
|
|
-DMUJOCO_HARDEN:BOOL=ON
|
|
tmpdir: "/tmp"
|
|
- os: ubuntu-20.04
|
|
additional_label: "-clang-10"
|
|
cmake_args: >-
|
|
-G Ninja
|
|
-DCMAKE_C_COMPILER:STRING=clang-10
|
|
-DCMAKE_CXX_COMPILER:STRING=clang++-10
|
|
-DMUJOCO_HARDEN:BOOL=ON
|
|
tmpdir: "/tmp"
|
|
- os: macos-13
|
|
cmake_args: >-
|
|
-G Ninja
|
|
-DMUJOCO_HARDEN:BOOL=ON
|
|
tmpdir: "/tmp"
|
|
- os: windows-2022
|
|
cmake_args: >-
|
|
-DCMAKE_SYSTEM_VERSION="10.0.22621.0"
|
|
cmake_build_args: "-- -m"
|
|
tmpdir: "C:/Temp"
|
|
|
|
name: "${{ matrix.os }}${{ matrix.additional_label }}"
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Prepare Linux
|
|
if: ${{ runner.os == 'Linux' }}
|
|
run: >
|
|
sudo apt-get update && sudo apt-get install
|
|
libgl1-mesa-dev
|
|
libxinerama-dev
|
|
libxcursor-dev
|
|
libxrandr-dev
|
|
libxi-dev
|
|
ninja-build
|
|
- name: Prepare macOS
|
|
if: ${{ runner.os == 'macOS' }}
|
|
run: brew install ninja
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "3.11"
|
|
- name: Prepare Python
|
|
shell: bash
|
|
run: |
|
|
repo="${PWD}"
|
|
cd ${{ matrix.tmpdir }}
|
|
python -m venv venv
|
|
if [[ $RUNNER_OS == "Windows" ]]; then
|
|
mkdir venv/bin
|
|
fixpath="$(s="$(cat venv/Scripts/activate | grep VIRTUAL_ENV=)"; echo "${s:13:-1}")"
|
|
sed -i "s#$(printf "%q" "${fixpath}")#$(cygpath "${fixpath}")#g" venv/Scripts/activate
|
|
ln -s ../Scripts/activate venv/bin/activate
|
|
fi
|
|
source venv/bin/activate
|
|
python -m pip install --upgrade --require-hashes -r "${repo}/python/build_requirements.txt"
|
|
python -m pip install --upgrade --require-hashes -r "${repo}/python/build_requirements_usd.txt"
|
|
- name: Configure MuJoCo
|
|
run: >
|
|
mkdir build &&
|
|
cd build &&
|
|
cmake ..
|
|
-DCMAKE_BUILD_TYPE:STRING=Release
|
|
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION:BOOL=OFF
|
|
-DCMAKE_INSTALL_PREFIX:STRING=${{ matrix.tmpdir }}/mujoco_install
|
|
-DMUJOCO_BUILD_EXAMPLES:BOOL=OFF
|
|
${{ matrix.cmake_args }}
|
|
- name: Build MuJoCo
|
|
working-directory: build
|
|
run: cmake --build . --config=Release ${{ matrix.cmake_build_args }}
|
|
- name: Copy in the correct VC runtime DLLs (workaround for actions/runner-images#10004)
|
|
if: ${{ runner.os == 'Windows' }}
|
|
working-directory: build
|
|
shell: powershell
|
|
run: |
|
|
Copy-Item (Join-Path `
|
|
((Get-ChildItem -Directory `
|
|
-Path "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Redist\MSVC\14.*" |
|
|
Sort -Descending | Select-Object -First 1).FullName
|
|
) 'x64\Microsoft.VC143.CRT\*.dll') "bin\Release"
|
|
- name: Test MuJoCo
|
|
working-directory: build
|
|
run: ctest -C Release --output-on-failure .
|
|
- name: Install MuJoCo
|
|
working-directory: build
|
|
run: cmake --install .
|
|
- name: Copy plugins (POSIX)
|
|
if: ${{ runner.os != 'Windows' }}
|
|
working-directory: build
|
|
run: mkdir -p ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin &&
|
|
cp lib/libactuator.* ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin &&
|
|
cp lib/libelasticity.* ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin &&
|
|
cp lib/libsensor.* ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin &&
|
|
cp lib/libsdf_plugin.* ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin
|
|
- name: Copy plugins (Windows)
|
|
if: ${{ runner.os == 'Windows' }}
|
|
working-directory: build
|
|
run: mkdir -p ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin &&
|
|
cp bin/Release/actuator.dll ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin &&
|
|
cp bin/Release/elasticity.dll ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin &&
|
|
cp bin/Release/sensor.dll ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin
|
|
- name: Configure samples
|
|
working-directory: sample
|
|
run: >
|
|
mkdir build &&
|
|
cd build &&
|
|
cmake ..
|
|
-DCMAKE_BUILD_TYPE:STRING=Release
|
|
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION:BOOL=OFF
|
|
-Dmujoco_ROOT:STRING=${{ matrix.tmpdir }}/mujoco_install
|
|
${{ matrix.cmake_args }}
|
|
- name: Build samples
|
|
working-directory: sample/build
|
|
run: cmake --build . --config=Release ${{ matrix.cmake_build_args }}
|
|
- name: Configure simulate
|
|
working-directory: simulate
|
|
run: >
|
|
mkdir build &&
|
|
cd build &&
|
|
cmake ..
|
|
-DCMAKE_BUILD_TYPE:STRING=Release
|
|
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION:BOOL=OFF
|
|
-Dmujoco_ROOT:STRING=${{ matrix.tmpdir }}/mujoco_install
|
|
${{ matrix.cmake_args }}
|
|
- name: Build simulate
|
|
working-directory: simulate/build
|
|
run: cmake --build . --config=Release ${{ matrix.cmake_build_args }}
|
|
- name: Make Python sdist
|
|
shell: bash
|
|
working-directory: python
|
|
run: >
|
|
source ${{ matrix.tmpdir }}/venv/bin/activate &&
|
|
./make_sdist.sh
|
|
- name: Build Python bindings
|
|
if: ${{ runner.os != 'Windows' }}
|
|
shell: bash
|
|
working-directory: python/dist
|
|
run: >
|
|
source ${{ matrix.tmpdir }}/venv/bin/activate &&
|
|
MUJOCO_PATH="${{ matrix.tmpdir }}/mujoco_install"
|
|
MUJOCO_PLUGIN_PATH="${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin"
|
|
MUJOCO_CMAKE_ARGS="-DCMAKE_INTERPROCEDURAL_OPTIMIZATION:BOOL=OFF ${{ matrix.cmake_args }}"
|
|
pip wheel -v --no-deps mujoco-*.tar.gz
|
|
- name: Install Python bindings
|
|
if: ${{ runner.os != 'Windows' }}
|
|
shell: bash
|
|
working-directory: python/dist
|
|
run: >
|
|
source ${{ matrix.tmpdir }}/venv/bin/activate &&
|
|
pip install --no-index mujoco-*.whl
|
|
- name: Test Python bindings
|
|
if: ${{ runner.os != 'Windows' }}
|
|
shell: bash
|
|
env:
|
|
MUJOCO_GL: disable
|
|
run: >
|
|
source ${{ matrix.tmpdir }}/venv/bin/activate &&
|
|
pytest -v --pyargs mujoco
|
|
- name: Package MJX
|
|
if: ${{ runner.os != 'Windows' }}
|
|
shell: bash
|
|
working-directory: mjx
|
|
run:
|
|
source ${{ matrix.tmpdir }}/venv/bin/activate &&
|
|
python -m build .
|
|
- name: Install MJX
|
|
if: ${{ runner.os != 'Windows' }}
|
|
shell: bash
|
|
working-directory: mjx
|
|
run:
|
|
source ${{ matrix.tmpdir }}/venv/bin/activate &&
|
|
pip install --require-hashes -r requirements.txt &&
|
|
pip install --no-index dist/mujoco_mjx-*.whl
|
|
- name: Test MJX
|
|
if: ${{ runner.os != 'Windows' }}
|
|
shell: bash
|
|
run:
|
|
source ${{ matrix.tmpdir }}/venv/bin/activate &&
|
|
pytest -n auto -v -k 'not IntegrationTest' --pyargs mujoco.mjx
|
|
- name: Notify team chat
|
|
shell: bash
|
|
env:
|
|
GCHAT_API_URL: ${{ secrets.GCHAT_API }}
|
|
JOB_URL: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
CHATMSG_AUTHOR_NAME: ${{ github.event.head_commit.author.name }}
|
|
CHATMSG_AUTHOR_EMAIL: ${{ github.event.head_commit.author.email }}
|
|
CHATMSG_COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
|
CHATMSG_JOB_ID: ${{ matrix.os }}${{ matrix.additional_label }}
|
|
if: ${{ failure() && github.event_name == 'push' && env.GCHAT_API_URL != '' }}
|
|
run: |
|
|
CHATMSG="$(cat <<-'EOF' | python3
|
|
import json
|
|
import os
|
|
env = lambda x: os.getenv(x, '')
|
|
data = dict(
|
|
result=env('JOB_URL'),
|
|
job=env('CHATMSG_JOB_ID'),
|
|
commit=env('GITHUB_SHA')[:6],
|
|
name=env('CHATMSG_AUTHOR_NAME').replace('```', ''),
|
|
email=env('CHATMSG_AUTHOR_EMAIL'),
|
|
msg=env('CHATMSG_COMMIT_MESSAGE').replace('```', '')
|
|
)
|
|
text = '<{result}|*FAILURE*>: job `{job}` commit `{commit}`\n```Author: {name}<{email}>\n\n{msg}```'.format(**data)
|
|
print(json.dumps({'text' : text}))
|
|
EOF
|
|
)" &&
|
|
|
|
curl "$GCHAT_API_URL&threadKey=$GITHUB_SHA&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD" \
|
|
-X POST \
|
|
-H "Content-Type: application/json" \
|
|
--data-raw "${CHATMSG}"
|