Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
47c9f95
Update RSL-RL configs to work with newer versions 4.0 and 5.0 (#4379)
ClemensSchwarke Mar 5, 2026
9c812bb
Updates Scene Data Providers and Visualizers (#4797)
matthewtrepte Mar 6, 2026
0ac0ee8
Adds benchmarking presets configuration to Shadow Hand Vision (#4845)
kellyguo11 Mar 6, 2026
5cbf3a1
Fixes camera preset class for shadow hand (#4848)
kellyguo11 Mar 6, 2026
997d70e
Fixes rotation bug in shadow hand direct environment (#4851)
ooctipus Mar 6, 2026
33dfb05
Remove hardcoded camera prim paths from OVRTX renderer (#4843)
ncournia-nv Mar 6, 2026
ae96553
Uses NuRec asset with Compass training (#4750)
sameerchavan0027 Mar 6, 2026
311e03e
Removes Single Articulation Dependencies in RMPflow (#4800)
ooctipus Mar 6, 2026
2f5358a
Removes extension registry setting in app files for Isaac Sim 6.0 (#4…
kellyguo11 Mar 6, 2026
84d5716
Update MJCF converter to support scene import, update urdf cfg (#4826)
stevfeng Mar 6, 2026
5002c0c
Fixes shadow hand data cloning and pink IK tests (#4855)
kellyguo11 Mar 6, 2026
5d602bb
Brings Newton assets integration tests (#4818)
AntoineRichard Mar 6, 2026
f42eccb
Makes Newton path truly kitless (#4849)
kellyguo11 Mar 6, 2026
4a99ae5
Adds rigid object collections for Newton (#4853)
AntoineRichard Mar 6, 2026
e306963
Merge branch 'main' of github.com:isaac-sim/IsaacLab into develop
kellyguo11 Mar 7, 2026
fa9478d
Bumps Newton to RC3 (#4857)
kellyguo11 Mar 7, 2026
258925d
Fixes merge bug (#4867)
ooctipus Mar 7, 2026
f63854a
Adds debugpy support (#4863)
myurasov-nv Mar 7, 2026
10e14fb
Fixes missing unpack of tuple in teleop config (#4854)
rwiltz Mar 7, 2026
1bd396d
Add downloadable links. Increase video resolution (#4842)
dengyuchenkit Mar 7, 2026
b8ac392
Fixes RSL RL imports (#4871)
kellyguo11 Mar 7, 2026
f70318b
Remove rerun binary from Rerun and Change visualizer name CLI arg par…
matthewtrepte Mar 7, 2026
1297dbf
Adds support for varying resolution to shadow hand vision task (#4866)
kellyguo11 Mar 7, 2026
9d8e516
Updates urdf converter (#4864)
stevfeng Mar 7, 2026
e99cf15
Fixes shutdown errors on ctrl+c for visualizers and Newton visualizer…
kellyguo11 Mar 7, 2026
314f0fe
Adds various CI Improvements (#4872)
myurasov-nv Mar 7, 2026
6daebe7
Adds CI Improvements - Stage 2 (#4877)
myurasov-nv Mar 9, 2026
95c16d3
Fixes doc build for develop branch (#4885)
kellyguo11 Mar 9, 2026
60de13c
Allow hydra to preset none (#4881)
ooctipus Mar 9, 2026
e5cb01a
Fixes doc building for develop branch (#4886)
kellyguo11 Mar 9, 2026
3fb916a
Fixes missing warp conversion (#4874)
ooctipus Mar 9, 2026
feef05c
Allows preset to be set when using zero and random agents (#4892)
AntoineRichard Mar 9, 2026
2a3031c
Fixes incorrect PhysX property parsing in Newton replication. (#4890)
AntoineRichard Mar 9, 2026
5f91a58
Add public release of OvRTX as optional dependency (#4876)
bareya Mar 9, 2026
bceb20a
Dev robomimic g1 lm fix (#4841)
jaybdub Mar 9, 2026
106adf3
Fixes RigidObjectData inertia shape and non-contiguous array (#4887)
ooctipus Mar 9, 2026
1153eed
init cloner test success
matthewtrepte Mar 5, 2026
b26d4a7
improve if newton model build is req
matthewtrepte Mar 5, 2026
8f31345
lint
matthewtrepte Mar 5, 2026
c7695b9
revert scripts
matthewtrepte Mar 7, 2026
cf87208
update
matthewtrepte Mar 7, 2026
317d3e7
drop
matthewtrepte Mar 7, 2026
cf8491b
Remove local benchmark helpers from PR
matthewtrepte Mar 7, 2026
e8d5f3c
edit comments
matthewtrepte Mar 7, 2026
ec4834f
update
matthewtrepte Mar 7, 2026
15905c8
fix
matthewtrepte Mar 7, 2026
208813f
lint
matthewtrepte Mar 7, 2026
c52265e
rm visualizer_cfg input to SDP
matthewtrepte Mar 7, 2026
77c1a52
Fixes incorrect PhysX property parsing in Newton replication. (#4890)
AntoineRichard Mar 9, 2026
d7c4d71
init cloner test success
matthewtrepte Mar 5, 2026
830fe37
fb response draft
matthewtrepte Mar 9, 2026
2015595
add copyright header
matthewtrepte Mar 9, 2026
d91078f
lint
matthewtrepte Mar 9, 2026
39278a2
Enhances lazy export to automatically parses absolute external packag…
ooctipus Mar 9, 2026
3b16af5
cleaning
matthewtrepte Mar 9, 2026
91a990d
lint
matthewtrepte Mar 9, 2026
f52cf8c
reorgn
matthewtrepte Mar 10, 2026
d63724d
wip
matthewtrepte Mar 10, 2026
fc57df8
organizin
matthewtrepte Mar 10, 2026
dc56b0f
Resolves ECR_CACHE_URL from env or AWS SSM (#4896)
myurasov-nv Mar 10, 2026
7b784ad
add unit tests
matthewtrepte Mar 10, 2026
3bb20e1
Updates compass instruction doc (#4895)
sameerchavan0027 Mar 10, 2026
62caecc
add larger test, rm unneeded class
matthewtrepte Mar 10, 2026
581bfd5
Fixes pre-commit (#4901)
myurasov-nv Mar 10, 2026
25b8fa9
clean
matthewtrepte Mar 10, 2026
823745b
lint
matthewtrepte Mar 10, 2026
45634f6
clean
matthewtrepte Mar 10, 2026
153aa17
Merge branch 'develop' into mtrepte/add_cloner_support_to_newton_mode…
matthewtrepte Mar 10, 2026
3f8e9f6
add docstrings
matthewtrepte Mar 10, 2026
423f73f
Updates contact sensor API to use Newton new API that allows fast ini…
ooctipus Mar 10, 2026
5f9c13e
moooooore doc strings
matthewtrepte Mar 10, 2026
e30433f
rm no-op fn
matthewtrepte Mar 10, 2026
5edf040
Adds multi backend, multi render, refactored dexsuite environments (#…
ooctipus Mar 10, 2026
de68010
Merge branch 'develop' into mtrepte/add_cloner_support_to_newton_mode…
matthewtrepte Mar 10, 2026
cee6ff5
Updates color types in Newton Viewer (#4897)
matthewtrepte Mar 10, 2026
4dacc4f
Merge branch 'develop' into mtrepte/add_cloner_support_to_newton_mode…
kellyguo11 Mar 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions .github/actions/docker-build/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,18 @@ runs:
local dockerfile_path="$4"
local context_path="$5"

# Skip build if image already exists locally (e.g. built by a prior job on the same runner)
if docker image inspect "$image_tag" > /dev/null 2>&1; then
echo "Image $image_tag already exists locally, skipping build."
return 0
fi

echo "Building Docker image: $image_tag"
echo "Using Dockerfile: $dockerfile_path"
echo "Build context: $context_path"

# Build Docker image
docker buildx build --progress=plain --platform linux/amd64 \
-t isaac-lab-dev \
-t $image_tag \
--build-arg ISAACSIM_BASE_IMAGE_ARG="$isaacsim_base_image" \
--build-arg ISAACSIM_VERSION_ARG="$isaacsim_version" \
Expand All @@ -71,7 +76,8 @@ runs:
--load $context_path

echo "✅ Docker image built successfully: $image_tag"
docker images | grep isaac-lab-dev
echo "Current local Docker images:"
docker images
}

# Call the function with provided parameters
Expand Down
24 changes: 24 additions & 0 deletions .github/actions/ecr-build-push-pull/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# ecr-build-push-pull

Builds a Docker image and pushes it to ECR, or pulls it if the tag already exists.
ECR is also used as the BuildKit layer cache.

## Usage

```yaml
- uses: ./.github/actions/ecr-build-push-pull
with:
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
isaacsim-base-image: nvcr.io/nvidia/isaac-sim
isaacsim-version: 6.0.0
dockerfile-path: docker/Dockerfile.base
cache-tag: cache-base
ecr-url: (optional, complete url for ECR storage)
```
## ECR URL resolution order
1. `ecr-url` input
2. `ECR_CACHE_URL` environment variable on the runner
3. SSM parameter `/github-runner/<instance-id>/ecr-cache-url`
4. If none resolve, ECR is skipped and the image is built locally
195 changes: 195 additions & 0 deletions .github/actions/ecr-build-push-pull/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

name: 'ECR Build-Push-Pull'
description: >
Builds a Docker image and pushes it to ECR, using ECR as the layer cache.
If the image already exists in ECR (same tag), pulls it instead of building.
Drop-in replacement for docker-build/action.yml with ECR-backed caching.

inputs:
image-tag:
description: 'Tag for the Docker image (e.g. my-image:latest).'
required: true
isaacsim-base-image:
description: 'IsaacSim base image (passed as ISAACSIM_BASE_IMAGE_ARG build-arg).'
required: true
isaacsim-version:
description: 'IsaacSim version (passed as ISAACSIM_VERSION_ARG build-arg).'
required: true
dockerfile-path:
description: 'Path to Dockerfile, relative to the repository root'
default: 'docker/Dockerfile.base'
required: false
ecr-url:
description: >
ECR repository URL (e.g. "123456789.dkr.ecr.us-west-2.amazonaws.com/my-repo").
Resolved in the following order:
1. ecr-url input, if provided.
2. ECR_CACHE_URL environment variable on the runner.
3. SSM parameter /github-runner/<instance-id>/ecr-cache-url.
4. If still empty, ECR cache is skipped and the image is built locally.
required: false
default: ''
cache-tag:
description: Tag used for the ECR layer cache image (e.g. "cache-base", "cache-curobo").
required: false
default: 'cache'

runs:
using: composite
steps:
- name: ECR Build, Push, Pull
shell: bash
env:
INPUT_ECR_URL: ${{ inputs.ecr-url }}
run: |
IMAGE_TAG="${{ inputs.image-tag }}"

# Prefer explicit input; fall back to ECR_CACHE_URL env var; then SSM

ECR_URL="${INPUT_ECR_URL:-}"

if [ -z "${ECR_URL}" ]; then
echo "🟢 ecr-url input not set, trying ECR_CACHE_URL env var..."
ECR_URL="${ECR_CACHE_URL:-}"
if [ -n "${ECR_URL}" ]; then
echo "🟢 Using ECR_CACHE_URL env var: ${ECR_URL}"
fi
fi

if [ -z "${ECR_URL}" ]; then
echo "🟢 ECR_CACHE_URL env var not set, trying SSM..."

IMDS_TOKEN=$(curl -sf -X PUT "http://169.254.169.254/latest/api/token" \
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600") || true
INSTANCE_ID=$(curl -sf -H "X-aws-ec2-metadata-token: ${IMDS_TOKEN}" \
"http://169.254.169.254/latest/meta-data/instance-id") || true
INSTANCE_REGION=$(curl -sf -H "X-aws-ec2-metadata-token: ${IMDS_TOKEN}" \
"http://169.254.169.254/latest/meta-data/placement/region") || true

if [ -n "${INSTANCE_ID}" ]; then
ECR_URL=$(aws ssm get-parameter \
--name "/github-runner/${INSTANCE_ID}/ecr-cache-url" \
--region "${INSTANCE_REGION}" \
--query 'Parameter.Value' --output text 2>/dev/null) || ECR_URL=""
if [ -n "${ECR_URL}" ]; then
echo "🟢 Resolved ECR URL from SSM (/github-runner/${INSTANCE_ID}/ecr-cache-url): ${ECR_URL}"
else
echo "🟢 SSM parameter not found for instance ${INSTANCE_ID}"
fi
else
echo "🟢 Not running on EC2 or Instance Metadata Service is unavailable, skipping SSM lookup"
fi
fi

if [ -z "${ECR_URL}" ]; then
echo "🟠 ECR URL cannot be resolved. Building locally."
else
# Derive registry host and AWS region from the URL
REGISTRY=$(echo "${ECR_URL}" | cut -d'/' -f1)
AWS_REGION=$(echo "${REGISTRY}" | sed 's/.*\.dkr\.ecr\.\(.*\)\.amazonaws\.com/\1/')

# Validate ECR URL
if [ "${AWS_REGION}" = "${REGISTRY}" ]; then
echo "🔴 Invalid ECR URL — cannot extract AWS region: ${ECR_URL}"
echo "🔴 Expected format: <account-id>.dkr.ecr.<region>.amazonaws.com/<repo>"
exit 1
fi

# Derive ECR image tag by slugifying the local image-tag
# (colons/slashes not valid in ECR tags)
ECR_TAG=$(echo "${IMAGE_TAG}" | tr ':/' '--')
ECR_IMAGE="${ECR_URL}:${ECR_TAG}"
CACHE_IMAGE="${ECR_URL}:${{ inputs.cache-tag }}"

# The runner's credential store is broken ("not implemented"), so use a temp config dir
# with credsStore disabled. Copy existing ~/.docker/config.json first to preserve other
# registry auths (e.g. nvcr.io), then strip credsStore/credHelpers.
#
DOCKER_CONFIG_DIR=$(mktemp -d)
trap 'rm -rf "${DOCKER_CONFIG_DIR}"' EXIT
if [ -f "${HOME}/.docker/config.json" ]; then
python3 -c "import json; cfg=json.load(open('${HOME}/.docker/config.json')); cfg['credsStore']=''; cfg.pop('credHelpers',None); json.dump(cfg,open('${DOCKER_CONFIG_DIR}/config.json','w'))"
else
echo '{"credsStore":""}' > "${DOCKER_CONFIG_DIR}/config.json"
fi
#
# Export so all subsequent docker calls in this job inherit it
echo "DOCKER_CONFIG=${DOCKER_CONFIG_DIR}" >> "$GITHUB_ENV"
export DOCKER_CONFIG="${DOCKER_CONFIG_DIR}"

# Login to ECR registry with token provided by aws cli
echo "🟢 Logging into ECR registry..."
aws ecr get-login-password --region "${AWS_REGION}" | \
docker login --username AWS --password-stdin "${REGISTRY}"

# Try pulling the exact image from ECR to skip the build
echo "🟢 Checking for existing image ${ECR_IMAGE} in ECR..."
PULL_OUTPUT=$(docker pull "${ECR_IMAGE}" 2>&1) && {
echo "🟢 Image found in ECR, pulled: ${ECR_IMAGE}"
docker tag "${ECR_IMAGE}" "${IMAGE_TAG}"
echo "🟢 Tagged as: ${IMAGE_TAG} — skipping build."
exit 0
} || {
echo "🟠 Image can't be pulled from ECR, will build locally:"
echo -e "\e[90m${PULL_OUTPUT}\e[0m"
}
fi

# Log into nvcr.io so the Dockerfile can pull nvcr.io base images.
# Credential is written into the temp config dir when ECR is enabled,
# and into the default config when it is not.
if [ -n "${{ env.NGC_API_KEY }}" ]; then
echo "🟢 Logging into nvcr.io..."
docker login -u \$oauthtoken -p ${{ env.NGC_API_KEY }} nvcr.io
else
echo "🟠 NGC_API_KEY not set — skipping nvcr.io login (normal for fork PRs)"
fi

# Build the image

BUILD_ARGS=(
--progress=plain
--platform linux/amd64
-f "${{ inputs.dockerfile-path }}"
--build-arg "ISAACSIM_BASE_IMAGE_ARG=${{ inputs.isaacsim-base-image }}"
--build-arg "ISAACSIM_VERSION_ARG=${{ inputs.isaacsim-version }}"
--build-arg "ISAACSIM_ROOT_PATH_ARG=/isaac-sim"
--build-arg "ISAACLAB_PATH_ARG=/workspace/isaaclab"
--build-arg "DOCKER_USER_HOME_ARG=/root"
-t "${IMAGE_TAG}"
)

# Add ECR layer caching
if [ -n "${ECR_URL}" ]; then
BUILD_ARGS+=(
--cache-from "type=registry,ref=${CACHE_IMAGE}"
--cache-to "type=registry,ref=${CACHE_IMAGE},mode=max"
-t "${ECR_IMAGE}"
)
fi

# Set up buildx builder with docker-container driver (required for registry cache export).
BUILDER_NAME="ci-builder-${{ github.run_id }}-${{ github.job }}"

# Create builder (or fall back to reusing existing one on workflow re-runs)
docker buildx create --use --driver docker-container --name "${BUILDER_NAME}" \
|| docker buildx use "${BUILDER_NAME}"

echo "🟢 Building ${IMAGE_TAG}..."
docker buildx build --load "${BUILD_ARGS[@]}" .

# Clean up builder
docker buildx rm "${BUILDER_NAME}" || true

echo "🟢 Build completed for ${IMAGE_TAG}, pushing to ECR..."

if [ -n "${ECR_URL}" ]; then
docker push "${ECR_IMAGE}"
echo "🟢 Pushed ${ECR_IMAGE} to ECR"
fi

echo "🟢 Image ${IMAGE_TAG} is ready!"
4 changes: 2 additions & 2 deletions .github/actions/run-tests/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,11 @@ runs:
# Copy test results with error handling
echo "📋 Attempting to copy test results..."
if docker cp $container_name:/workspace/isaaclab/tests/$result_file "$reports_dir/$result_file" 2>/dev/null; then
echo "✅ Test results copied successfully"
echo "✅ Test results copied successfully to $reports_dir/$result_file"
else
echo "❌ Failed to copy specific result file, trying to copy all test results..."
if docker cp $container_name:/workspace/isaaclab/tests/ "$reports_dir/" 2>/dev/null; then
echo "✅ All test results copied successfully"
echo "✅ All test results copied successfully to $reports_dir/"
# Look for any XML files and use the first one found
if [ -f "$reports_dir/full_report.xml" ]; then
mv "$reports_dir/full_report.xml" "$reports_dir/$result_file"
Expand Down
Loading