Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
7a4b6d2
Add Debug Visualization Markers to Newton Based Visualizers (#5473)
matthewtrepte May 5, 2026
fa5959f
Improves hanging flakiness in CI tests (#5479)
kellyguo11 May 5, 2026
2d52d62
Docs: update contributing.rst and PR template for changelog fragments…
hujc7 May 5, 2026
bf646bb
mark all rtx-based rendering tests flaky for now (#5508)
huidongc May 6, 2026
efd9d1e
perf: add PrepareForReuse to FabricFrameView, remove sync_usd_on_fabr…
pv-nvidia May 6, 2026
b258e87
Update pytorch3d installation command in locomanipulation SDG documen…
jaybdub May 6, 2026
7b44452
use RendererCfg as default renderer_cfg in CameraCfg (#5521)
r-schmitt May 7, 2026
b582dab
Refactors schema cfgs to separate solver-common from PhysX-specific f…
vidurv-nvidia May 7, 2026
2388178
Updates docs for using nurec background in locomanipulation sdg (#5301)
dengyuchenkit May 7, 2026
a7514be
[CI][Auto Version Bump] Compile changelog fragments (workflow_dispatch)
isaaclab-bot[bot] May 8, 2026
9e4e62c
[Newton] Bump Newton pin to v1.2.0rc2 (#5523)
hujc7 May 8, 2026
99b0359
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 8, 2026
af9c98f
Fixes joint friction API docs (#5533)
AntoineRichard May 8, 2026
8c5e2ad
Deprecates state properties calls (#5423)
AntoineRichard May 8, 2026
311ec73
Fixes backend deprecation warning call sites (#5418)
AntoineRichard May 8, 2026
3d93e84
Updates core deprecation call sites (#5409)
AntoineRichard May 8, 2026
a64fcf1
Adds PVA and joint wrench sensor docs (#5532)
AntoineRichard May 8, 2026
a784ed9
[CI unblock] Skip viewergl-fully-black test + fix warp intersphinx 40…
hujc7 May 8, 2026
21a7919
Replicates fk invalidation on other assets (#5367)
AntoineRichard May 8, 2026
513a017
Updates task deprecation call sites (#5410)
AntoineRichard May 8, 2026
e15b1d0
Enabled OVRTX rendering tests on CI (#5492)
huidongc May 8, 2026
24f2cc0
Fix OvPhysX 0.4 compatibility (#5545)
marcodiiga May 8, 2026
65e5ead
Add Kamino solver tutorial (#5483)
AntoineRichard May 8, 2026
23ababb
[Visualizers] Fix viewergl fully-black: assign PyVec3 to Newton camer…
hujc7 May 8, 2026
1336acd
Adds multirotor vision-based navigation task and acceleration, veloci…
Zwoelf12 May 8, 2026
8d9af88
Fixes various installation bugs (#5530)
myurasov-nv May 8, 2026
4687c34
Replaces fcntl with filelock to avoid windows import issues (#5544)
AntoineRichard May 8, 2026
1e0e379
Disables articulation tests in Isaac Sim CI (#5557)
kellyguo11 May 9, 2026
39a9aec
Initialize Warp runtime (#5548)
pbarejko May 9, 2026
b59b3ae
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 9, 2026
4934cd0
Fix Pink IK DAQP dependency checks (#5556)
ooctipus May 9, 2026
63b1257
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 10, 2026
6dedbb7
Refactor cloning around cfg-driven ClonePlan (#5528)
ooctipus May 10, 2026
4feb184
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 11, 2026
e1fba6e
Fixes benchmark scripts when tensorboard logs are missing (#5564)
kellyguo11 May 11, 2026
5442de1
Fixes manus docs moving. (#5577)
hougantc-nvda May 11, 2026
707e87d
Pre and post physics renderer initialization (#5573)
pbarejko May 12, 2026
a337c0b
Enables pipelined IsaacTeleop retargeting (#5493)
hougantc-nvda May 12, 2026
dd5a21a
Add assemble_trocar task for G129-Dex3 (#5082)
mingxueg-nv May 12, 2026
d9bdc7f
Refactors the doc on Schema for Lab 3.0, and adds MuJoCo gravcomp (#5…
vidurv-nvidia May 12, 2026
1f35b18
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 12, 2026
a2a5167
Fix broken external links flagged by lychee (#5576)
ooctipus May 12, 2026
6621d49
Stop logging spurious carb null-client error from cloner / cubric hel…
ooctipus May 12, 2026
965136d
Adds heterogeneous dexsuite to Newton backend (#5024)
ooctipus May 12, 2026
d58e3d7
Pins Isaac Sim image to previous image from 05/11 (#5600)
kellyguo11 May 13, 2026
b8fead4
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 13, 2026
5ea7512
[Newton] Fixes contact sensor metadata access (#5588)
camevor May 13, 2026
68a651f
[OVPHYSX] RigidObject + RigidObjectData asset (#5426)
AntoineRichard May 13, 2026
3ece85b
[Newton] Backend-agnostic task-space accessors for IK/OSC (#5400)
hujc7 May 13, 2026
a44eefc
Disables test timeout retry (#5602)
kellyguo11 May 13, 2026
4c99765
Fixes doc build errors in mimic datagen (#5606)
kellyguo11 May 13, 2026
b2582a4
Update configs to new conventions from rsl_rl >= 5.0 (#5551)
StafaH May 13, 2026
ae453e8
New Scene Data Provider (#5128)
daniela-hase May 14, 2026
00ec13e
Restore RT2 RenderCfg fields removed in PhysicsManager refactor (#5167)
nblauch May 14, 2026
a7c791e
Fix LeappDeploymentEnv missing extras attribute (#5560)
klakhi May 14, 2026
d12cfce
Fixes some nvbugs (#5584)
myurasov-nv May 14, 2026
ce95adb
[Newton] Drop explicit mujoco/mujoco-warp pins, defer to newton[sim] …
hujc7 May 14, 2026
0c49777
[Newton] Add Shadow-Hand-Over MAPPO Newton backend (depends on #5433)…
hujc7 May 14, 2026
b65a1ac
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 14, 2026
ac538fd
Fix leapp docs (#5512)
frlai May 14, 2026
98d4bba
[Changelog] Fix orphan paragraph in 5.2.0 entry and gate future fragm…
hujc7 May 14, 2026
e0a217d
OMPE-92490: Fix singular rotation matrix and non-rotation quaternion …
jmart-nv May 14, 2026
88d3dda
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 15, 2026
a5eb9ad
Fixes OmniHub startup in Docker tests (#5633)
AntoineRichard May 15, 2026
ef6c178
Fix skrl drone-ARL configs using STATES instead of OBSERVATIONS (#5613)
pascal-roth May 15, 2026
4e62558
Add teleop replay agent for non-interactive CI runs (#5507)
rwiltz May 15, 2026
4985855
Fixed rlinf install docs (#5639)
mingxueg-nv May 15, 2026
7015be2
Refactor train/play and create uv run workflow without dedicated virt…
StafaH May 15, 2026
18c6bf3
[Newton] Rename per-env labels in physics replication (depends on #55…
hujc7 May 15, 2026
94c0967
Updates URDF/MJCF importer to use the latest Isaac Sim importer (#5394)
stevfeng May 15, 2026
112f3c0
[PresetCLI] Add typed preset selection with task-aware help (#5587)
hujc7 May 15, 2026
aef3dbc
[Newton] Bump Newton pin to v1.2.0 (stable) (#5616)
hujc7 May 15, 2026
d84b905
Add patch to locomanipulation SDG pipeline to avoid use of flash attn…
jaybdub May 15, 2026
21745e2
Fix silent ABI mismatch in cubric Python shim (#5444)
jmart-nv May 15, 2026
2bdccb2
Fix invalid inline comment in Windows batch code block (#5612)
klakhi May 15, 2026
bb9388e
Add settings to make training results deterministic (#5449)
redfler May 15, 2026
4737154
Fix OVRTX renderer device mismatch on multi-GPU (#5594)
fatimaanes May 15, 2026
9989d27
Enable OVRTX cloning by default (#5591)
huidongc May 15, 2026
3d002c8
[Fix] Use matrix multiplication for rotation composition in test_pink…
hujc7 May 16, 2026
b541035
[Docs] Expand Isaac Teleop XR performance optimization guide (#5643)
rwiltz May 16, 2026
32462c0
Make Isaac Lab Docker images run as non-root (#5618)
sheikh-nv May 16, 2026
cafc911
Add frame stacking support for explicit temporal info (#5574)
jmart-nv May 16, 2026
3a34736
Migrate camera/renderer/camera data to warp (#5578)
StafaH May 16, 2026
58f633c
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 16, 2026
6e3482d
[OVPHYSX] Articulation rewrite (data class + asset class + kernels) (…
AntoineRichard May 16, 2026
bed2bf9
Fix lazy import for configclass and provide upper bound for python (#…
pbarejko May 16, 2026
9297faf
Avoid disk I/O when preparing USD stage for OVRTX renderer (#5631)
huidongc May 16, 2026
c67ed38
Move rendering-correctness tests into dedicated CI jobs (#5649)
nvsekkin May 16, 2026
f8d167c
Test run time improvement: remove AppLauncher from tests that do not…
pbarejko May 16, 2026
0dd2412
Split RayCaster into backend-specific implementations (#5510)
ooctipus May 17, 2026
4f0e8c8
Updates ecosystem docs (#5581)
kellyguo11 May 17, 2026
9da557a
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 17, 2026
99d5097
Expose missing API docs (#5582)
kellyguo11 May 17, 2026
2ace55b
Reworks modular installation and add tests and updates docs (#5650)
kellyguo11 May 17, 2026
0bb80fd
Fixes uv run path and aligns closer to ./isaaclab.sh -i approach (#5663)
kellyguo11 May 18, 2026
5d69131
Remove the `is_homogeneous` helper from isaaclab core (#5667)
huidongc May 18, 2026
27924a8
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 18, 2026
0609d56
Migration of camera.py to completely remove torch (#5651)
StafaH May 18, 2026
3d10e74
[OVPHYSX] SceneDataProvider (#5589)
AntoineRichard May 18, 2026
42ab744
Add warp environment docs and timer alignment (#4995)
hujc7 May 18, 2026
6fbce9e
Update DexSuite camera mini-batches (#5668)
ooctipus May 18, 2026
c348f01
Update locomanipulation SDG docs with clarification on converting to …
jaybdub May 18, 2026
c97bedd
Pin OVRTX to 0.3 (#5568)
huidongc May 19, 2026
51abd7f
Moves h5py import to be lazy to avoid DLL issues in windows (#5682)
kellyguo11 May 19, 2026
a03c503
Updates Flexiv reach policy with ROS inference (#5683)
shauryadNv May 19, 2026
cb199d5
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 19, 2026
bac793f
[OVPHYSX] RigidObjectCollection asset (#5570)
AntoineRichard May 19, 2026
dda47bc
Actuators integration (#5455)
jvonmuralt May 19, 2026
b48b249
Fix active preset branch resolution (#5658)
ooctipus May 19, 2026
b31f35f
Updates documentation around new presets arguments (#5685)
kellyguo11 May 19, 2026
2340c4b
Fixes the running cmd and rlinf env installation (#5670)
mingxueg-nv May 19, 2026
dded726
[Docs] Move Newton out of experimental and add physical-backends hub …
AntoineRichard May 19, 2026
3c1753b
[OVPHYSX] ContactSensor (#5422)
AntoineRichard May 19, 2026
37862a1
Migrate teleop replay from XCR to Isaac Teleop MCAP (#5608)
rwiltz May 19, 2026
7df01a9
Import torch after app launcher (#5694)
pbarejko May 19, 2026
16d6315
Remove stale xfail decorator from Newton environment tests (#5692)
nvsekkin May 19, 2026
cc09598
Adds instructions for using pre-made locomanipulation SDG dataset/mod…
jaybdub May 19, 2026
a9b6210
Skips apply_external_force_torque when both ranges are zero (#5688)
AntoineRichard May 19, 2026
cd1ba91
Minor Updates & Patches to Visualizers (#5610)
matthewtrepte May 20, 2026
3896938
Add experimental Newton deformable support with rigid-deformable coup…
mmichelis May 20, 2026
a36ab7a
Scene Data Provider Update (#5622)
daniela-hase May 20, 2026
c707450
[OvPhysX] Adds FrameView for the OVPhysX backend (#5678)
AntoineRichard May 20, 2026
45bd707
[CI][Auto Version Bump] Compile changelog fragments (schedule)
isaaclab-bot[bot] May 20, 2026
a34c5f0
Fix crash in kit visualizer (#5699)
rwiltz May 20, 2026
8b63997
feat: add typed service locator to SimulationContext (#5672)
pv-nvidia May 20, 2026
17be306
Enable FabricFrameView on non-primary GPUs
pv-nvidia May 6, 2026
abab55a
Skip cuda:1 fabric tests on single-GPU runners instead of failing
pv-nvidia May 7, 2026
cb81414
Strip sys.argv before AppLauncher boot in fabric test
pv-nvidia May 7, 2026
875594d
Use ProxyArray.torch accessor in fabric view tests
pv-nvidia May 8, 2026
8abdf67
Address review feedback on the multi-GPU branch
pv-nvidia May 11, 2026
711264b
Update FabricFrameView docstrings for multi-GPU support
pv-nvidia May 12, 2026
60d99b8
Split FabricFrameView multi-GPU tests into their own workflow
pv-nvidia May 12, 2026
a039313
ci: disable multi-GPU workflow (no runner available)
pv-nvidia May 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ To upload images to a PR -- simply drag and drop an image while in edit mode and
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file
- [ ] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there

<!--
Expand Down
62 changes: 59 additions & 3 deletions .github/actions/run-tests/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ runs:
local logs_pid=""
local wait_pid=""
local docker_wait_file="/tmp/.docker_exit_${container_name}"
local docker_runtime_dir=""

# Kill the container immediately if the runner is cancelled.
# The GitHub Actions runner can deliver HUP, INT, or TERM on cancellation
Expand All @@ -94,6 +95,7 @@ runs:
docker kill '${container_name}' 2>/dev/null || true; \
docker rm -f '${container_name}' 2>/dev/null || true; \
rm -f '${docker_wait_file}'; \
if [ -n \"\$docker_runtime_dir\" ]; then rm -rf \"\$docker_runtime_dir\" 2>/dev/null || true; fi; \
if [ -n \"\$logs_pid\" ]; then kill \"\$logs_pid\" 2>/dev/null || true; fi; \
if [ -n \"\$wait_pid\" ]; then kill \"\$wait_pid\" 2>/dev/null || true; fi; \
exit 130" HUP INT TERM
Expand Down Expand Up @@ -180,16 +182,56 @@ runs:
docker_env_vars="$docker_env_vars -e TEST_EXTRA_PIP_PACKAGES"
fi

echo "Docker environment variables: '$docker_env_vars'"

# Volume mount for deps-cache-hit mode: bind-mount the checked-out
# source code over /workspace/isaaclab instead of baking it into the image.
docker_volume_args=""
docker_user_args=""
if [ -n "$volume_mount_source" ]; then
docker_volume_args="-v ${volume_mount_source}:/workspace/isaaclab"
host_uid="$(id -u)"
host_gid="$(id -g)"
host_user="$(id -un)"
# Kit writes generated cache, config, data, and log files outside
# the Isaac Lab source tree. Provide writable runtime storage for
# host-uid test runs, mirroring the compose/singularity mounts.
docker_runtime_dir="$(mktemp -d "${RUNNER_TEMP:-/tmp}/isaaclab-docker-runtime.XXXXXX")"
mkdir -p \
"${docker_runtime_dir}/home/.cache" \
"${docker_runtime_dir}/home/.local/share/ov/data" \
"${docker_runtime_dir}/home/.local/share/ov/pkg" \
"${docker_runtime_dir}/home/.nv/ComputeCache" \
"${docker_runtime_dir}/home/.nvidia-omniverse/config" \
"${docker_runtime_dir}/home/.nvidia-omniverse/logs" \
"${docker_runtime_dir}/home/Documents/Kit/shared" \
"${docker_runtime_dir}/isaac-sim/kit/cache" \
"${docker_runtime_dir}/isaac-sim/kit/data" \
"${docker_runtime_dir}/isaac-sim/kit/logs" \
"${docker_runtime_dir}/isaac-sim/cache" \
"${docker_runtime_dir}/isaac-sim/computecache" \
"${docker_runtime_dir}/isaac-sim/config" \
"${docker_runtime_dir}/isaac-sim/data" \
"${docker_runtime_dir}/isaac-sim/logs" \
"${docker_runtime_dir}/isaac-sim/pkg"
docker_volume_args="\
-v ${volume_mount_source}:/workspace/isaaclab:rw \
-v ${docker_runtime_dir}/home:/tmp/isaaclab-ci-home:rw \
-v ${docker_runtime_dir}/isaac-sim/kit/cache:/isaac-sim/kit/cache:rw \
-v ${docker_runtime_dir}/isaac-sim/kit/data:/isaac-sim/kit/data:rw \
-v ${docker_runtime_dir}/isaac-sim/kit/logs:/isaac-sim/kit/logs:rw \
-v ${docker_runtime_dir}/isaac-sim/cache:/isaac-sim/.cache:rw \
-v ${docker_runtime_dir}/isaac-sim/computecache:/isaac-sim/.nv/ComputeCache:rw \
-v ${docker_runtime_dir}/isaac-sim/config:/isaac-sim/.nvidia-omniverse/config:rw \
-v ${docker_runtime_dir}/isaac-sim/data:/isaac-sim/.local/share/ov/data:rw \
-v ${docker_runtime_dir}/isaac-sim/logs:/isaac-sim/.nvidia-omniverse/logs:rw \
-v ${docker_runtime_dir}/isaac-sim/pkg:/isaac-sim/.local/share/ov/pkg:rw"
docker_user_args="--user ${host_uid}:${host_gid}"
docker_env_vars="$docker_env_vars -e HOME=/tmp/isaaclab-ci-home -e XDG_CACHE_HOME=/tmp/isaaclab-ci-home/.cache -e XDG_DATA_HOME=/tmp/isaaclab-ci-home/.local/share -e USER=${host_user} -e LOGNAME=${host_user}"
echo "🔵 Volume-mounting ${volume_mount_source} >> /workspace/isaaclab"
echo "🔵 Mounting writable Docker runtime storage from ${docker_runtime_dir}"
echo "🔵 Running volume-mounted container as host uid:gid ${host_uid}:${host_gid} (${host_user})"
fi

echo "Docker environment variables: '$docker_env_vars'"

# Run tests in a detached container and follow logs. Running detached
# means the container lifecycle is independent of the shell - if the
# runner kills this step on cancellation, the `if: always()` cleanup
Expand All @@ -206,6 +248,7 @@ runs:
--ulimit nofile=65536:65536 \
--ulimit nproc=4096:4096 \
$docker_volume_args \
$docker_user_args \
$docker_env_vars \
$image_tag \
-c "
Expand All @@ -214,9 +257,19 @@ runs:
mkdir -p tests
rm _isaac_sim || true
ln -s /isaac-sim _isaac_sim
# Allow OmniHub to start in the test container. Some base images
# set this detect-only flag, which makes cold asset downloads
# fall back to slow repeated retries.
unset HUB__ARGS__DETECT_ONLY
if [ -n \"\${TEST_EXTRA_PIP_PACKAGES:-}\" ]; then
echo \"Installing extra pip packages: \${TEST_EXTRA_PIP_PACKAGES}\"
./isaaclab.sh -p -m pip install \${TEST_EXTRA_PIP_PACKAGES}
case \" \${TEST_EXTRA_PIP_PACKAGES} \" in
*\" leapp\"*)
echo \"Resolved LEAPP package:\"
./isaaclab.sh -p -m pip show leapp || true
;;
esac
fi
echo 'Starting pytest with path: $test_path'
./isaaclab.sh -p -m pytest --ignore=tools/conftest.py --ignore=source/isaaclab/test/install_ci $test_path $pytest_options -v --junitxml=tests/$result_file
Expand Down Expand Up @@ -308,6 +361,9 @@ runs:
# Clean up container
echo "🔵 Cleaning up Docker container..."
docker rm $container_name 2>/dev/null || echo "🟠 Container cleanup failed, but continuing..."
if [ -n "$docker_runtime_dir" ]; then
rm -rf "$docker_runtime_dir" || echo "🟠 Docker runtime storage cleanup failed, but continuing..."
fi

return $DOCKER_EXIT
}
Expand Down
141 changes: 137 additions & 4 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -101,17 +101,17 @@ jobs:
$'^\\.github/workflows/config\\.yaml$\tBase image config'
$'^\\.github/actions/\tCI actions'
)
triggered_jobs="Docker build + all test-* matrix jobs"
triggered_jobs="Docker build + non-root verify jobs + all test-* matrix jobs"

render_table() {
local files="$1" entry regex desc count sample
echo "| Pattern | What it covers | Matched files |"
echo "|---|---|---|"
for entry in "${patterns[@]}"; do
IFS=$'\t' read -r regex desc <<< "$entry"
count=$(printf '%s\n' "$files" | grep -cE "$regex" || true)
count=$(grep -cE "$regex" <<< "$files" || true)
if [ "$count" -gt 0 ]; then
sample=$(printf '%s\n' "$files" | grep -E "$regex" | head -3 | paste -sd ', ' -)
sample=$(grep -m 3 -E "$regex" <<< "$files" | paste -sd ', ' -)
[ "$count" -gt 3 ] && sample="$sample (and $((count - 3)) more)"
echo "| \`$regex\` | $desc | $sample |"
else
Expand All @@ -124,7 +124,7 @@ jobs:
local files="$1" entry regex
for entry in "${patterns[@]}"; do
IFS=$'\t' read -r regex _ <<< "$entry"
if printf '%s\n' "$files" | grep -qE "$regex"; then
if grep -qE "$regex" <<< "$files"; then
return 0
fi
done
Expand Down Expand Up @@ -215,6 +215,51 @@ jobs:
dockerfile-path: docker/Dockerfile.base
cache-tag: cache-base

verify-base-non-root:
name: verify-base-non-root
runs-on: [self-hosted, gpu]
timeout-minutes: 30
needs: [build, config]
if: needs.build.result == 'success'
steps:
- name: Checkout Code
uses: actions/checkout@v6
with:
fetch-depth: 1
lfs: true

- name: Pull Base Docker image
uses: ./.github/actions/ecr-build-push-pull
with:
image-tag: ${{ env.CI_IMAGE_TAG }}
isaacsim-base-image: ${{ needs.config.outputs.isaacsim_image_name }}
isaacsim-version: ${{ needs.config.outputs.isaacsim_image_tag }}
dockerfile-path: docker/Dockerfile.base
cache-tag: cache-base

- name: Run Dockerfile non-root regression test
shell: bash
run: |
set -euo pipefail
docker run --rm \
-v "$PWD":/workspace/isaaclab \
--entrypoint bash \
"${{ env.CI_IMAGE_TAG }}" \
-lc 'cd /workspace/isaaclab && /isaac-sim/python.sh -m pytest docker/test/test_dockerfile_nonroot.py -q'

- name: Verify Base runtime user is non-root
shell: bash
run: |
set -euo pipefail
runtime_identity="$(docker run --rm --entrypoint bash "${{ env.CI_IMAGE_TAG }}" \
-lc 'printf "%s %s %s\n" "$(id -u)" "$(id -g)" "$(id -un 2>/dev/null || true)"')"
read -r runtime_uid runtime_gid runtime_user <<< "${runtime_identity}"
echo "Base runtime identity: uid=${runtime_uid} gid=${runtime_gid} user=${runtime_user}"
if [ "${runtime_uid}" = "0" ]; then
echo "::error::Base Docker image must not run as root by default."
exit 1
fi

build-curobo:
name: Build cuRobo Docker Image
runs-on: [self-hosted, gpu]
Expand All @@ -235,6 +280,51 @@ jobs:
isaacsim-version: ${{ needs.config.outputs.isaacsim_image_tag }}
dockerfile-path: docker/Dockerfile.curobo
cache-tag: cache-curobo

verify-curobo-non-root:
name: verify-curobo-non-root
runs-on: [self-hosted, gpu]
timeout-minutes: 30
needs: [build-curobo, config]
if: needs.build-curobo.result == 'success'
steps:
- name: Checkout Code
uses: actions/checkout@v6
with:
fetch-depth: 1
lfs: true

- name: Pull cuRobo Docker image
uses: ./.github/actions/ecr-build-push-pull
with:
image-tag: ${{ env.CI_IMAGE_TAG }}-curobo
isaacsim-base-image: ${{ needs.config.outputs.isaacsim_image_name }}
isaacsim-version: ${{ needs.config.outputs.isaacsim_image_tag }}
dockerfile-path: docker/Dockerfile.curobo
cache-tag: cache-curobo

- name: Run Dockerfile non-root regression test
shell: bash
run: |
set -euo pipefail
docker run --rm \
-v "$PWD":/workspace/isaaclab \
--entrypoint bash \
"${{ env.CI_IMAGE_TAG }}-curobo" \
-lc 'cd /workspace/isaaclab && /isaac-sim/python.sh -m pytest docker/test/test_dockerfile_nonroot.py -q'

- name: Verify cuRobo runtime user is non-root
shell: bash
run: |
set -euo pipefail
runtime_identity="$(docker run --rm --entrypoint bash "${{ env.CI_IMAGE_TAG }}-curobo" \
-lc 'printf "%s %s %s\n" "$(id -u)" "$(id -g)" "$(id -un 2>/dev/null || true)"')"
read -r runtime_uid runtime_gid runtime_user <<< "${runtime_identity}"
echo "cuRobo runtime identity: uid=${runtime_uid} gid=${runtime_gid} user=${runtime_user}"
if [ "${runtime_uid}" = "0" ]; then
echo "::error::cuRobo Docker image must not run as root by default."
exit 1
fi
#endregion

#region test jobs
Expand Down Expand Up @@ -603,6 +693,49 @@ jobs:
filter-pattern: "isaaclab_tasks"
include-files: "test_environments_training.py"
container-name: isaac-lab-environments-training-test

test-rendering-correctness:
name: "rendering-correctness"
runs-on: [self-hosted, gpu]
timeout-minutes: 120
continue-on-error: true
needs: [build, config]
if: needs.build.result == 'success'
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1
lfs: true
- uses: ./.github/actions/run-package-tests
with:
image-tag: ${{ env.CI_IMAGE_TAG }}
isaacsim-base-image: ${{ needs.config.outputs.isaacsim_image_name }}
isaacsim-version: ${{ needs.config.outputs.isaacsim_image_tag }}
filter-pattern: "isaaclab_tasks"
include-files: "test_rendering_cartpole.py,test_rendering_dexsuite_kuka.py,test_rendering_registered_tasks.py,test_rendering_shadow_hand.py"
container-name: isaac-lab-rendering-correctness-test

test-rendering-correctness-kitless:
name: "rendering-correctness-kitless"
runs-on: [self-hosted, gpu]
timeout-minutes: 120
continue-on-error: true
needs: [build, config]
if: needs.build.result == 'success'
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1
lfs: true
- uses: ./.github/actions/run-package-tests
with:
image-tag: ${{ env.CI_IMAGE_TAG }}
isaacsim-base-image: ${{ needs.config.outputs.isaacsim_image_name }}
isaacsim-version: ${{ needs.config.outputs.isaacsim_image_tag }}
filter-pattern: "isaaclab_tasks"
extra-pip-packages: "ovrtx"
include-files: "test_rendering_cartpole_kitless.py,test_rendering_dexsuite_kuka_kitless.py,test_rendering_shadow_hand_kitless.py"
container-name: isaac-lab-rendering-correctness-kitless-test
#endregion

#region disabled quarantined tests
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
# Shared image config for CI workflows. Loaded by the `config` job in each
# workflow via yq and exposed as job outputs (see e.g. .github/workflows/build.yaml).
isaacsim_image_name: nvcr.io/nvidian/isaac-sim
isaacsim_image_tag: latest-develop
isaacsim_image_tag: latest-develop@sha256:0dd49a1121b297dc85eee7777a9c528318683dbe03b29fd01f2059ac1b099301
isaaclab_image_name: nvcr.io/nvidian/isaac-lab
1 change: 1 addition & 0 deletions .github/workflows/daily-compatibility.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ jobs:
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
pytest-options: ""
filter-pattern: "isaaclab_tasks"
extra-pip-packages: "ovrtx"

- name: Copy All Test Results from IsaacLab Tasks Container
run: |
Expand Down
40 changes: 34 additions & 6 deletions .github/workflows/install-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ jobs:
echo "|---|---|---|"
for entry in "${patterns[@]}"; do
IFS=$'\t' read -r regex desc <<< "$entry"
count=$(printf '%s\n' "$files" | grep -cE "$regex" || true)
count=$(grep -cE "$regex" <<< "$files" || true)
if [ "$count" -gt 0 ]; then
sample=$(printf '%s\n' "$files" | grep -E "$regex" | head -3 | paste -sd ', ' -)
sample=$(grep -m 3 -E "$regex" <<< "$files" | paste -sd ', ' -)
[ "$count" -gt 3 ] && sample="$sample (and $((count - 3)) more)"
echo "| \`$regex\` | $desc | $sample |"
else
Expand All @@ -83,7 +83,7 @@ jobs:
local files="$1" entry regex
for entry in "${patterns[@]}"; do
IFS=$'\t' read -r regex _ <<< "$entry"
if printf '%s\n' "$files" | grep -qE "$regex"; then
if grep -qE "$regex" <<< "$files"; then
return 0
fi
done
Expand Down Expand Up @@ -132,24 +132,52 @@ jobs:
fi

install-tests:
name: Installation Tests
name: Installation Tests (uv)
needs: [changes]
if: needs.changes.outputs.run_install_tests == 'true'
runs-on: [self-hosted, gpu]
timeout-minutes: 90
steps:
- name: Checkout
uses: actions/checkout@v6 # v6
- name: Run installation tests
- name: Run installation tests (uv)
env:
BASE_IMAGE: ${{ github.event_name == 'workflow_dispatch' && inputs.base_image || 'ubuntu:24.04' }}
TEST_FILTER: ${{ github.event_name == 'workflow_dispatch' && inputs.test_filter || '' }}
run: |
RUNNER_ARGS="--base-image $BASE_IMAGE"
RUNNER_ARGS="$RUNNER_ARGS --results-dir ${{ github.workspace }}/results"
RUNNER_ARGS="$RUNNER_ARGS --gpu"
RUNNER_ARGS="$RUNNER_ARGS --no-cache"

PYTEST_EXTRA_ARGS=(-sv)
PYTEST_EXTRA_ARGS=(-sv -m uv)
if [ -n "$TEST_FILTER" ]; then
PYTEST_EXTRA_ARGS+=(-k "$TEST_FILTER")
fi

tools/run_install_ci.py docker $RUNNER_ARGS -- --tb=short "${PYTEST_EXTRA_ARGS[@]}"

install-tests-conda:
name: Installation Tests (conda)
needs: [changes]
if: needs.changes.outputs.run_install_tests == 'true'
runs-on: [self-hosted, gpu]
timeout-minutes: 150
steps:
- name: Checkout
uses: actions/checkout@v6 # v6
- name: Run installation tests (conda)
env:
BASE_IMAGE: ${{ github.event_name == 'workflow_dispatch' && inputs.base_image || 'ubuntu:24.04' }}
TEST_FILTER: ${{ github.event_name == 'workflow_dispatch' && inputs.test_filter || '' }}
run: |
RUNNER_ARGS="--base-image $BASE_IMAGE"
RUNNER_ARGS="$RUNNER_ARGS --results-dir ${{ github.workspace }}/results-conda"
RUNNER_ARGS="$RUNNER_ARGS --gpu"
RUNNER_ARGS="$RUNNER_ARGS --conda"
RUNNER_ARGS="$RUNNER_ARGS --no-cache"

PYTEST_EXTRA_ARGS=(-sv -m conda)
if [ -n "$TEST_FILTER" ]; then
PYTEST_EXTRA_ARGS+=(-k "$TEST_FILTER")
fi
Expand Down
Loading