Skip to content

Commit 9cf3321

Browse files
Merge origin/develop into feature/event_mdp_parity
Resolve changelog and extension.toml version conflicts. Bump version to 4.5.30 to follow develop's 4.5.29.
2 parents 3d0a558 + 4356a67 commit 9cf3321

51 files changed

Lines changed: 1702 additions & 287 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/actions/run-package-tests/action.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,28 @@ inputs:
6161
runs:
6262
using: composite
6363
steps:
64+
# Display some details on AWS instance we're running on
65+
- name: AWS Instance Info
66+
shell: bash
67+
run: |
68+
# get instance ID for debugging purposes (if running on EC2)
69+
IMDS_TOKEN=$(curl -sf -X PUT "http://169.254.169.254/latest/api/token" \
70+
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600") || true
71+
if [ -n "$IMDS_TOKEN" ]; then
72+
INSTANCE_ID=$(curl -sf -H "X-aws-ec2-metadata-token: ${IMDS_TOKEN}" \
73+
"http://169.254.169.254/latest/meta-data/instance-id") || true
74+
INSTANCE_REGION=$(curl -sf -H "X-aws-ec2-metadata-token: ${IMDS_TOKEN}" \
75+
"http://169.254.169.254/latest/meta-data/placement/region") || true
76+
INSTANCE_TYPE=$(curl -sf -H "X-aws-ec2-metadata-token: ${IMDS_TOKEN}" \
77+
"http://169.254.169.254/latest/meta-data/instance-type") || true
78+
echo "⚪ Instance ID: ${INSTANCE_ID:-Not running on EC2}"
79+
echo "⚪ Instance Region: ${INSTANCE_REGION:-Not running on EC2}"
80+
echo "⚪ Instance Type: ${INSTANCE_TYPE:-Not running on EC2}"
81+
echo "⚪ Connect: https://${INSTANCE_REGION}.console.aws.amazon.com/ec2-instance-connect/ssh/home?region=${INSTANCE_REGION}&connType=standard&instanceId=${INSTANCE_ID}&osUser=ubuntu&sshPort=22&addressFamily=ipv4"
82+
else
83+
echo "🟠 Could not obtain IMDS token, probably not running on EC2"
84+
fi
85+
6486
- name: Record pull start time
6587
id: pull-start
6688
shell: bash
@@ -134,6 +156,8 @@ runs:
134156
# Don't let cleanup errors fail a passing test job
135157
set +e
136158
159+
echo "🔵 Cleaning up old Docker images..."
160+
137161
echo "⚪ Disk usage before cleanup:"
138162
df -h /var/lib/docker
139163

.github/actions/run-tests/action.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,10 @@ runs:
183183
set -e
184184
cd /workspace/isaaclab
185185
mkdir -p tests
186+
rm _isaac_sim || true
187+
ln -s /isaac-sim _isaac_sim
186188
echo 'Starting pytest with path: $test_path'
187-
/isaac-sim/python.sh -m pytest --ignore=tools/conftest.py $test_path $pytest_options -v --junitxml=tests/$result_file
189+
./isaaclab.sh -p -m pytest --ignore=tools/conftest.py --ignore=source/isaaclab/test/install_ci $test_path $pytest_options -v --junitxml=tests/$result_file
188190
"
189191
190192
# Stream container logs to CI output (this is the killable foreground process).

.github/workflows/build.yaml

Lines changed: 30 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#
44
# SPDX-License-Identifier: BSD-3-Clause
55

6+
# region help
67
# Test job gating summary
78
#
89
# +------------------------------------+-----------------------------------------------------+
@@ -63,6 +64,7 @@
6364
#
6465
# Remember to REVERT all temporary changes before merging!
6566
# =============================================================================
67+
#endregion
6668

6769
name: Docker + Tests
6870

@@ -242,6 +244,7 @@ jobs:
242244
done
243245
} >> "$GITHUB_STEP_SUMMARY"
244246
247+
#region build jobs
245248
build:
246249
name: Build Base Docker Image
247250
runs-on: [self-hosted, gpu]
@@ -262,7 +265,6 @@ jobs:
262265
dockerfile-path: docker/Dockerfile.base
263266
cache-tag: cache-base
264267

265-
266268
build-curobo:
267269
name: Build cuRobo Docker Image
268270
runs-on: [self-hosted, gpu]
@@ -287,12 +289,9 @@ jobs:
287289
isaacsim-version: ${{ env.ISAACSIM_BASE_VERSION }}
288290
dockerfile-path: docker/Dockerfile.curobo
289291
cache-tag: cache-curobo
292+
#endregion
290293

291-
292-
293-
# Each test job checks out code, then calls run-package-tests which handles
294-
# ECR pull, pytest in Docker, artifact upload, and fork-PR checks.
295-
294+
#region test jobs
296295
test-isaaclab-tasks:
297296
name: isaaclab_tasks [1/3]
298297
runs-on: [self-hosted, gpu]
@@ -320,7 +319,6 @@ jobs:
320319
shard-count: "3"
321320
container-name: isaac-lab-tasks-1-test
322321

323-
324322
test-isaaclab-tasks-2:
325323
name: isaaclab_tasks [2/3]
326324
runs-on: [self-hosted, gpu]
@@ -348,7 +346,6 @@ jobs:
348346
shard-count: "3"
349347
container-name: isaac-lab-tasks-2-test
350348

351-
352349
test-isaaclab-tasks-3:
353350
name: isaaclab_tasks [3/3]
354351
runs-on: [self-hosted, gpu]
@@ -376,7 +373,6 @@ jobs:
376373
shard-count: "3"
377374
container-name: isaac-lab-tasks-3-test
378375

379-
380376
test-isaaclab-core:
381377
name: isaaclab (core) [1/3]
382378
runs-on: [self-hosted, gpu]
@@ -402,7 +398,6 @@ jobs:
402398
shard-count: "3"
403399
container-name: isaac-lab-core-1-test
404400

405-
406401
test-isaaclab-core-2:
407402
name: isaaclab (core) [2/3]
408403
runs-on: [self-hosted, gpu]
@@ -428,7 +423,6 @@ jobs:
428423
shard-count: "3"
429424
container-name: isaac-lab-core-2-test
430425

431-
432426
test-isaaclab-core-3:
433427
name: isaaclab (core) [3/3]
434428
runs-on: [self-hosted, gpu]
@@ -454,7 +448,6 @@ jobs:
454448
shard-count: "3"
455449
container-name: isaac-lab-core-3-test
456450

457-
458451
test-isaaclab-rl:
459452
name: isaaclab_rl
460453
runs-on: [self-hosted, gpu]
@@ -479,7 +472,6 @@ jobs:
479472
filter-pattern: "isaaclab_rl"
480473
container-name: isaac-lab-rl-test
481474

482-
483475
test-isaaclab-mimic:
484476
name: isaaclab_mimic
485477
runs-on: [self-hosted, gpu]
@@ -504,7 +496,6 @@ jobs:
504496
filter-pattern: "isaaclab_mimic"
505497
container-name: isaac-lab-mimic-test
506498

507-
508499
test-isaaclab-contrib:
509500
name: isaaclab_contrib
510501
runs-on: [self-hosted, gpu]
@@ -529,7 +520,6 @@ jobs:
529520
filter-pattern: "isaaclab_contrib"
530521
container-name: isaac-lab-contrib-test
531522

532-
533523
test-isaaclab-teleop:
534524
name: isaaclab_teleop
535525
runs-on: [self-hosted, gpu]
@@ -554,7 +544,6 @@ jobs:
554544
filter-pattern: "isaaclab_teleop"
555545
container-name: isaac-lab-teleop-test
556546

557-
558547
test-isaaclab-visualizers:
559548
name: isaaclab_visualizers
560549
runs-on: [self-hosted, gpu]
@@ -579,7 +568,6 @@ jobs:
579568
filter-pattern: "isaaclab_visualizers"
580569
container-name: isaac-lab-visualizers-test
581570

582-
583571
test-isaaclab-assets:
584572
name: isaaclab_assets
585573
runs-on: [self-hosted, gpu]
@@ -604,7 +592,6 @@ jobs:
604592
filter-pattern: "isaaclab_assets"
605593
container-name: isaac-lab-assets-test
606594

607-
608595
test-isaaclab-newton:
609596
name: isaaclab_newton
610597
runs-on: [self-hosted, gpu]
@@ -629,7 +616,6 @@ jobs:
629616
filter-pattern: "isaaclab_newton"
630617
container-name: isaac-lab-newton-test
631618

632-
633619
test-isaaclab-physx:
634620
name: isaaclab_physx
635621
runs-on: [self-hosted, gpu]
@@ -654,7 +640,6 @@ jobs:
654640
filter-pattern: "isaaclab_physx"
655641
container-name: isaac-lab-physx-test
656642

657-
658643
test-isaaclab-ov:
659644
name: isaaclab_ov
660645
runs-on: [self-hosted, gpu]
@@ -679,7 +664,6 @@ jobs:
679664
filter-pattern: "isaaclab_ov"
680665
container-name: isaac-lab-ov-test
681666

682-
683667
test-curobo:
684668
name: test-curobo
685669
runs-on: [self-hosted, gpu]
@@ -707,7 +691,6 @@ jobs:
707691
include-files: "test_curobo_planner_franka.py,test_curobo_planner_cube_stack.py,test_pink_ik.py"
708692
container-name: isaac-lab-curobo-test
709693

710-
711694
test-skillgen:
712695
name: test-skillgen
713696
runs-on: [self-hosted, gpu]
@@ -736,29 +719,6 @@ jobs:
736719
include-files: "test_generate_dataset_skillgen.py,test_environments_skillgen.py,test_environments_automate.py"
737720
container-name: isaac-lab-skillgen-test
738721

739-
740-
# test-quarantined:
741-
# name: "Quarantined Tests"
742-
# runs-on: [self-hosted, gpu]
743-
# timeout-minutes: 180
744-
# continue-on-error: true
745-
# needs: [build, detect-changes]
746-
# if: >-
747-
# always() && needs.build.result == 'success' &&
748-
# vars.RUN_QUARANTINED_TESTS == 'true'
749-
# steps:
750-
# - uses: actions/checkout@v6
751-
# with:
752-
# fetch-depth: 1
753-
# lfs: true
754-
# - uses: ./.github/actions/run-package-tests
755-
# with:
756-
# image-tag: ${{ env.DOCKER_IMAGE_TAG }}
757-
# isaacsim-base-image: ${{ env.ISAACSIM_BASE_IMAGE }}
758-
# isaacsim-version: ${{ env.ISAACSIM_BASE_VERSION }}
759-
# quarantined-only: "true"
760-
# container-name: isaac-lab-quarantined-test
761-
762722
test-environments-training:
763723
name: "environments_training"
764724
runs-on: [self-hosted, gpu]
@@ -784,3 +744,28 @@ jobs:
784744
filter-pattern: "isaaclab_tasks"
785745
include-files: "test_environments_training.py"
786746
container-name: isaac-lab-environments-training-test
747+
#endregion
748+
749+
#region disabled quarantined tests
750+
# test-quarantined:
751+
# name: "Quarantined Tests"
752+
# runs-on: [self-hosted, gpu]
753+
# timeout-minutes: 180
754+
# continue-on-error: true
755+
# needs: [build, detect-changes]
756+
# if: >-
757+
# always() && needs.build.result == 'success' &&
758+
# vars.RUN_QUARANTINED_TESTS == 'true'
759+
# steps:
760+
# - uses: actions/checkout@v6
761+
# with:
762+
# fetch-depth: 1
763+
# lfs: true
764+
# - uses: ./.github/actions/run-package-tests
765+
# with:
766+
# image-tag: ${{ env.DOCKER_IMAGE_TAG }}
767+
# isaacsim-base-image: ${{ env.ISAACSIM_BASE_IMAGE }}
768+
# isaacsim-version: ${{ env.ISAACSIM_BASE_VERSION }}
769+
# quarantined-only: "true"
770+
# container-name: isaac-lab-quarantined-test
771+
#endregion

.github/workflows/install-ci.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
2+
# All rights reserved.
3+
#
4+
# SPDX-License-Identifier: BSD-3-Clause
5+
6+
name: Installation Tests
7+
on:
8+
workflow_dispatch:
9+
inputs:
10+
base_image:
11+
description: 'Docker base image for the test container'
12+
required: false
13+
default: 'ubuntu:24.04'
14+
type: string
15+
test_filter:
16+
description: 'pytest -k filter expression (e.g. "uv" or "bugs")'
17+
default: ''
18+
permissions:
19+
contents: read
20+
jobs:
21+
install-tests:
22+
name: Installation Tests (${{ inputs.base_image }})
23+
runs-on: [self-hosted, gpu]
24+
timeout-minutes: 90
25+
steps:
26+
- name: Checkout
27+
uses: actions/checkout@v6
28+
- name: Run installation tests
29+
env:
30+
BASE_IMAGE: ${{ inputs.base_image }}
31+
TEST_FILTER: ${{ inputs.test_filter }}
32+
run: |
33+
RUNNER_ARGS="--base-image $BASE_IMAGE"
34+
RUNNER_ARGS="$RUNNER_ARGS --results-dir ${{ github.workspace }}/results"
35+
RUNNER_ARGS="$RUNNER_ARGS --gpu"
36+
37+
PYTEST_EXTRA_ARGS=(-sv)
38+
if [ -n "$TEST_FILTER" ]; then
39+
PYTEST_EXTRA_ARGS+=(-k "$TEST_FILTER")
40+
fi
41+
42+
tools/run_install_ci.py docker $RUNNER_ARGS -- --tb=short "${PYTEST_EXTRA_ARGS[@]}"

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ _build
6565
/datasets/
6666

6767
# Tests
68-
tests/
68+
/tests/
6969

7070
# Docker history
7171
.isaac-lab-docker-history

CONTRIBUTORS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Guidelines for modifications:
3434
* Kelly (Yunrong) Guo
3535
* Matthew Trepte
3636
* Mayank Mittal
37+
* Mikhail Yurasov
3738
* Nikita Rudin
3839
* Octi (Zhengyu) Zhang
3940
* Ossama Ahmed
@@ -123,7 +124,6 @@ Guidelines for modifications:
123124
* Michael Noseworthy
124125
* Miguel Alonso Jr
125126
* Mihir Kulkarni
126-
* Mikhail Yurasov
127127
* Mingxue Gu
128128
* Mingyu Lee
129129
* Muhong Guo

docker/Dockerfile.base

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,19 @@ RUN touch /bin/nvidia-smi && \
100100
# installing Isaac Lab dependencies
101101
# use pip caching to avoid reinstalling large packages
102102
RUN --mount=type=cache,target=${DOCKER_USER_HOME}/.cache/pip \
103-
${ISAACLAB_PATH}/isaaclab.sh --install
103+
DEBUG=1 ${ISAACLAB_PATH}/isaaclab.sh --install
104104

105105
# HACK: Remove install of quadprog dependency
106106
RUN ${ISAACLAB_PATH}/isaaclab.sh -p -m pip uninstall -y quadprog
107107

108+
# HACK: Expose pin/pinocchio from IsaacSim's private extension prebundle
109+
ENV PYTHONPATH="${ISAACSIM_ROOT_PATH}/exts/isaacsim.robot_motion.pink/pip_prebundle:${ISAACSIM_ROOT_PATH}/exts/isaacsim.robot_motion.pink/pip_prebundle/cmeel.prefix/lib/python3.12/site-packages:${PYTHONPATH}"
110+
ENV LD_LIBRARY_PATH="${ISAACSIM_ROOT_PATH}/exts/isaacsim.robot_motion.pink/pip_prebundle/cmeel.prefix/lib:${LD_LIBRARY_PATH}"
111+
112+
# HACK: Expose nvidia.srl from Kit python into the ml_archive nvidia namespace
113+
RUN ln -s ${ISAACSIM_ROOT_PATH}/kit/python/lib/python3.12/site-packages/nvidia/srl \
114+
${ISAACSIM_ROOT_PATH}/exts/omni.isaac.ml_archive/pip_prebundle/nvidia/srl
115+
108116
# aliasing isaaclab.sh and python for convenience
109117
RUN echo "export ISAACLAB_PATH=${ISAACLAB_PATH}" >> ${HOME}/.bashrc && \
110118
echo "alias isaaclab=${ISAACLAB_PATH}/isaaclab.sh" >> ${HOME}/.bashrc && \

docker/Dockerfile.curobo

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,19 @@ RUN rm -rf ${ISAACSIM_ROOT_PATH}/kit/python/lib/python3.12/site-packages/pip* &&
148148
# installing Isaac Lab dependencies
149149
# use pip caching to avoid reinstalling large packages
150150
RUN --mount=type=cache,target=${DOCKER_USER_HOME}/.cache/pip \
151-
${ISAACLAB_PATH}/isaaclab.sh --install
151+
DEBUG=1 ${ISAACLAB_PATH}/isaaclab.sh --install
152152

153153
# HACK: Uninstall quadprog as it causes issues with some reinforcement learning frameworks
154154
RUN ${ISAACLAB_PATH}/isaaclab.sh -p -m pip uninstall -y quadprog
155155

156+
# HACK: Expose pin/pinocchio from IsaacSim's private extension prebundle
157+
ENV PYTHONPATH="${ISAACSIM_ROOT_PATH}/exts/isaacsim.robot_motion.pink/pip_prebundle:${ISAACSIM_ROOT_PATH}/exts/isaacsim.robot_motion.pink/pip_prebundle/cmeel.prefix/lib/python3.12/site-packages:${PYTHONPATH}"
158+
ENV LD_LIBRARY_PATH="${ISAACSIM_ROOT_PATH}/exts/isaacsim.robot_motion.pink/pip_prebundle/cmeel.prefix/lib:${LD_LIBRARY_PATH}"
159+
160+
# HACK: Expose nvidia.srl from Kit python into the ml_archive nvidia namespace
161+
RUN ln -s ${ISAACSIM_ROOT_PATH}/kit/python/lib/python3.12/site-packages/nvidia/srl \
162+
${ISAACSIM_ROOT_PATH}/exts/omni.isaac.ml_archive/pip_prebundle/nvidia/srl
163+
156164
# Install cuRobo from source (pinned commit); needs CUDA env and Torch
157165
RUN ${ISAACLAB_PATH}/isaaclab.sh -p -m pip install --no-build-isolation \
158166
"nvidia-curobo @ git+https://github.com/NVlabs/curobo.git@ebb71702f3f70e767f40fd8e050674af0288abe8"

0 commit comments

Comments
 (0)