name: lekiwi-compatibility on: workflow_dispatch: push: paths: - 'contracts/**' - 'control_bridge/**' - 'integrations/lerobot/**' - 'examples/lekiwi/**' - 'robot_profiles/**' - 'web_platform/**' - 'package*.json' - '.github/workflows/lekiwi-compat.yml' pull_request: paths: - 'contracts/**' - 'control_bridge/**' - 'integrations/lerobot/**' - 'examples/lekiwi/**' - 'robot_profiles/**' - 'web_platform/**' - 'package*.json' - '.github/workflows/lekiwi-compat.yml' permissions: contents: read jobs: cpu-compatibility: runs-on: ubuntu-24.04 timeout-minutes: 25 steps: - uses: actions/checkout@v6 - uses: actions/setup-node@v6 with: node-version-file: .nvmrc cache: npm - uses: actions/setup-python@v6 with: python-version: '3.12' cache: pip cache-dependency-path: | integrations/lerobot/requirements-cpu.txt examples/lekiwi/requirements-collision.txt - run: npm install --global npm@11.17.0 - run: npm ci - run: npx playwright install --with-deps chromium - run: python -m pip install -e control_bridge - uses: actions/cache@v5 with: path: build/lekiwi key: lekiwi-efa608d7-${{ hashFiles('robot_profiles/lekiwi-v1.json', 'examples/lekiwi/prepare_assets.py') }} - name: Prepare pinned upstream assets (never skipped) run: | if [ -f build/lekiwi/URDF/LeKiwi.urdf ]; then python examples/lekiwi/prepare_assets.py --source build/lekiwi --output build/lekiwi-verified cp build/lekiwi-verified/lekiwi-v1.zip build/lekiwi/lekiwi-v1.zip else python examples/lekiwi/prepare_assets.py --download fi - name: Rebuild and verify collision recipe in its own environment run: | python -m venv build/venvs/collision build/venvs/collision/bin/python -m pip install -r examples/lekiwi/requirements-collision.txt build/venvs/collision/bin/python -m unittest discover -s examples/lekiwi/tests -v build/venvs/collision/bin/python examples/lekiwi/generate_full_collisions.py --check env: PYTHONPATH: '' PYTHONNOUSERSITE: '1' - run: python examples/lekiwi/setup_lerobot.py - run: build/venvs/lerobot/bin/python -m unittest discover -s integrations/lerobot/tests -v env: PYTHONPATH: '' PYTHONNOUSERSITE: '1' - run: npm run test:e2e:lekiwi env: BRIDGE_PYTHON: python3 LEROBOT_PYTHON: build/venvs/lerobot/bin/python - uses: actions/upload-artifact@v6 if: always() with: name: lekiwi-compatibility-evidence path: | build/e2e/lekiwi/ build/lerobot-environment.json build/lekiwi/source-manifest.json