Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
9242498
[CI] Add Windows + ARM pytest markers and shared scaffolding
hujc7 May 20, 2026
6811028
[CI] Add Windows CI workflow
hujc7 May 20, 2026
8b52876
TEMP: disable heavy Linux Docker + Tests while iterating Windows CI
hujc7 May 21, 2026
adcf3e5
windows-ci: accept Sim EULA non-interactively at workflow level
hujc7 May 21, 2026
e72524c
windows-ci: install isaacsim[all] for Kit-launching jobs
hujc7 May 21, 2026
6fdab92
windows-ci: narrow path-io job to test/utils
hujc7 May 21, 2026
3c3ba63
windows-ci: install isaacsim[all,extscache]==6.0.0.* (match wheel_bui…
hujc7 May 21, 2026
7345095
windows-ci: install isaaclab_physx editable before isaaclab_tasks
hujc7 May 21, 2026
683c110
windows-ci: install isaaclab_physx with --no-deps (ppisp unsatisfiable)
hujc7 May 21, 2026
e9d4152
windows-ci: path-io needs h5py + CUDA torch, switch to explicit files
hujc7 May 21, 2026
ce5d56c
windows-ci: gate perception-windows off until runner GPU is functional
hujc7 May 21, 2026
04aea18
windows-ci: process-level watchdogs + tight per-job timeouts
hujc7 May 21, 2026
fca5cda
windows-ci: call wheel_builder/build.sh via explicit Git Bash path
hujc7 May 21, 2026
8b03041
wheel_builder: PYTHON override + windows-ci passes PYTHON=python
hujc7 May 21, 2026
319eb8f
windows-ci: ASCII dash in PowerShell Write-Host strings
hujc7 May 21, 2026
bf4c614
windows-ci: seed pip into install-windows uv venv
hujc7 May 21, 2026
79c6d2e
windows-ci: re-enable perception-windows now that runner GPU is fixed
hujc7 May 22, 2026
81f5b9f
windows-ci: PS-5.1-compatible kill in watchdog (Stop-Process -Force)
hujc7 May 22, 2026
7efc11a
windows-ci: pre/post instance state report + minimum cleanup
hujc7 May 22, 2026
94f37c6
windows-ci: align Kit env setup with PR #4018 reference
hujc7 May 22, 2026
36993b3
windows-sim-paths: resolve via 'uv pip show' (uv venv has no pip)
hujc7 May 22, 2026
560a176
windows-sim-paths: capture stdout only from uv pip show
hujc7 May 22, 2026
fe4d04a
windows-ci: add cartpole training smoke (state + perception)
hujc7 May 23, 2026
bd5fe5a
windows-ci: install isaaclab_rl[rsl_rl,rl_games] for training smoke
hujc7 May 23, 2026
b72ddb8
windows-ci: consolidate 6 jobs into 1 windows-ci
hujc7 May 26, 2026
8538627
Disable Windows perception smoke until vGPU is configured
hujc7 May 27, 2026
9bcec05
Add isaaclab_tasks changelog fragment for cartpole training smoke
hujc7 May 27, 2026
6a40fe3
windows-ci: fix install order, add isaaclab_newton, ASCII Aggregate
hujc7 May 27, 2026
9711ab8
test: handle Windows file-lock race in hdf5 test fixture cleanup
hujc7 May 27, 2026
7a347c5
Merge origin/develop into jichuanh/windows-spark-ci-perception
hujc7 May 27, 2026
7fc6750
windows-ci: delegate install to ./isaaclab.bat -i
hujc7 May 27, 2026
ee5dde2
windows-ci: trim in-block comments inside PowerShell run: blocks
hujc7 May 27, 2026
e0df27b
windows-ci: skip cartpole perception subcase in training smoke
hujc7 May 27, 2026
cd1e739
windows-ci: add diagnostic Vulkan probe (nvidia-smi + vulkaninfo)
hujc7 May 28, 2026
966e6d3
windows-ci: probe-only mode, Vulkan probe first, ctypes via tools/
hujc7 May 28, 2026
a26b6a4
Revert "windows-ci: probe-only mode, Vulkan probe first, ctypes via t…
hujc7 May 28, 2026
bae6977
Revert "windows-ci: add diagnostic Vulkan probe (nvidia-smi + vulkani…
hujc7 May 28, 2026
27def39
windows-ci: re-enable perception/rendering steps
hujc7 Jun 1, 2026
a8a98bb
windows-ci: install develop-aligned Isaac Sim on native Windows
hujc7 Jun 1, 2026
de35b92
windows-ci: authenticate internal Isaac Sim index with read-only secrets
hujc7 Jun 9, 2026
bf79b17
ci: TEMP disable heavy non-Windows workflows while iterating
hujc7 Jun 9, 2026
ad92f43
Merge remote-tracking branch 'origin/develop' into jichuanh/windows-s…
hujc7 Jun 9, 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
100 changes: 100 additions & 0 deletions .github/actions/windows-instance-state/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# 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: 'Windows instance state report + minimum cleanup'
description: >-
Print disk + relevant directory sizes on the Windows runner before and after
a job, and (in 'post' phase) wipe non-cache user state so the runner is left
net-zero except for content-addressed wheel caches (uv, pip).
See the per-dir comments below for what's cleaned and why.

inputs:
phase:
description: '"pre" (report only) or "post" (report → cleanup → report).'
required: true

runs:
using: composite
steps:
- name: Report and optionally clean
shell: powershell
run: |
$ErrorActionPreference = "Continue"

# Directories we observe on every run. uv/pip are content-addressed
# wheel caches (safe across runs, big speedup). The rest is user state
# that can chain bad behavior between runs and is cleaned in 'post'.
$observed = [ordered]@{
"uv cache" = "$env:LOCALAPPDATA\uv\cache" # KEEP — content-addressed
"pip cache" = "$env:LOCALAPPDATA\pip\Cache" # KEEP — content-addressed
"Kit shader cache" = "$env:LOCALAPPDATA\NVIDIA\Omniverse" # KEEP — invalidated by Kit on version mismatch
"Kit user state" = "$env:APPDATA\NVIDIA Corporation\Omniverse Kit" # CLEAN — settings + last-used renderer chain
"Kit docs" = "$env:USERPROFILE\Documents\Kit" # CLEAN — recent files / persistent_state
"user site-pkgs" = "$env:APPDATA\Python\Python312\site-packages" # observe — escaped pip --user installs
}

function Show-State($label) {
Write-Host "=== Windows instance state: $label ==="
Get-PSDrive C |
Select-Object @{n='Drive';e={$_.Name}},
@{n='Used GB';e={[math]::Round($_.Used/1GB,1)}},
@{n='Free GB';e={[math]::Round($_.Free/1GB,1)}} |
Format-Table
# GPU presence check via nvidia-smi. Surfaces "is there a GPU at all"
# before any Kit boot, so a Vulkan failure can be classified as
# "no GPU on the runner" vs "GPU present but Vulkan/driver issue".
$nvsmi = & nvidia-smi --query-gpu=name,driver_version,memory.total --format=csv,noheader 2>&1
if ($LASTEXITCODE -eq 0) {
Write-Host "nvidia-smi: $nvsmi"
} else {
Write-Host "nvidia-smi: not available or no GPU detected (exit=$LASTEXITCODE)"
}
foreach ($k in $observed.Keys) {
$p = $observed[$k]
if (Test-Path $p) {
$s = (Get-ChildItem -Recurse -File -ErrorAction SilentlyContinue $p |
Measure-Object -Sum Length -ErrorAction SilentlyContinue).Sum
if ($null -eq $s) { $s = 0 }
"{0,-20} {1,10:N1} MB ({2})" -f $k, ($s/1MB), $p
} else {
"{0,-20} {1,10} ({2})" -f $k, "(absent)", $p
}
}
}

if ("${{ inputs.phase }}" -eq "pre") {
Show-State "BEFORE"
exit 0
}

# phase == post: report → minimum cleanup → report
Show-State "AFTER (pre-cleanup)"

$toRemove = @(
"$env:APPDATA\NVIDIA Corporation\Omniverse Kit",
"$env:USERPROFILE\Documents\Kit"
)
foreach ($p in $toRemove) {
if (Test-Path $p) {
Remove-Item -LiteralPath $p -Recurse -Force -ErrorAction SilentlyContinue
}
}
# Crash-leftover scratch dirs in %TEMP%.
Get-ChildItem -Path $env:TEMP -Filter "Kit*" -ErrorAction SilentlyContinue |
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
Get-ChildItem -Path $env:TEMP -Filter "hub-*" -ErrorAction SilentlyContinue |
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
Get-ChildItem -Path $env:TEMP -Filter "omniverse-*" -ErrorAction SilentlyContinue |
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
# build.sh fallback can leave 'build' / 'wheel' in user site-packages.
$userSite = "$env:APPDATA\Python\Python312\site-packages"
foreach ($pkg in @("build", "wheel")) {
$p = Join-Path $userSite $pkg
if (Test-Path $p) {
Remove-Item -LiteralPath $p -Recurse -Force -ErrorAction SilentlyContinue
}
}

Show-State "AFTER (post-cleanup)"
104 changes: 104 additions & 0 deletions .github/actions/windows-sim-paths/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# 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: 'Resolve Isaac Sim paths and DLL search dirs on Windows'
description: >-
Discover the active Isaac Sim install root (via pip show isaacsim-kernel),
export ISAAC_PATH / CARB_APP_PATH / EXP_PATH / RESOURCE_NAME to subsequent
steps in this job, and prepend Isaac Sim's bin + kit/plugins directories to
PATH so the Vulkan loader can find NVIDIA's ICD DLLs and Kit can find its
plugin DLLs.
Mirrors PR #4018's known-working Windows env setup so Kit's RTX path can
initialise on a self-hosted Windows runner where DLL search defaults are not
pointed at the Sim install.

inputs:
venv-path:
description: 'Path to the uv/python venv whose site-packages contains isaacsim (relative to workspace).'
required: false
default: 'env_isaaclab_uv'

runs:
using: composite
steps:
- name: Resolve Isaac Sim paths
shell: powershell
run: |
$ErrorActionPreference = "Stop"
# Re-activate the caller's venv inside this fresh PowerShell session
# so `python -m pip show isaacsim-kernel` finds the right interpreter.
$activate = Join-Path "${{ inputs.venv-path }}" "Scripts\Activate.ps1"
if (-not (Test-Path $activate)) { throw "venv activate not found at $activate" }
& $activate
# Discover Sim location from pip metadata (avoids `import isaacsim`,
# which would bootstrap the kernel and is the exact thing we are about
# to launch deliberately).
# Use `uv pip show` rather than `python -m pip show` since uv venvs are
# created without pip installed inside the venv by default.
# Capture stdout only; uv writes its banner ("Using Python ...") to
# stderr and merging with 2>&1 trips $ErrorActionPreference=Stop via
# PowerShell's NativeCommandError handling on stderr lines.
$pipShow = (uv pip show isaacsim-kernel) | Out-String
if ($LASTEXITCODE -ne 0) { $pipShow = "" }
$loc = $pipShow -split "`n" | Where-Object { $_ -match "^Location:" } | Select-Object -First 1
if (-not $loc) {
$pipShow = (uv pip show isaacsim) | Out-String
if ($LASTEXITCODE -ne 0) { $pipShow = "" }
$loc = $pipShow -split "`n" | Where-Object { $_ -match "^Location:" } | Select-Object -First 1
}
if (-not $loc) { throw "Could not resolve isaacsim install path from pip" }
$sitePackages = ($loc -split "Location: ", 2)[1].Trim()

# The Sim root is either ${sitePackages}\isaacsim or a versioned
# ${sitePackages}\isaacsim-* dir. Pick whichever holds kit/ or apps/.
$candidates = @()
$candidates += Join-Path $sitePackages "isaacsim"
$candidates += Join-Path $sitePackages "isaacsim_kernel"
Get-ChildItem -Path $sitePackages -Directory -Filter "isaacsim-*" -ErrorAction SilentlyContinue |
ForEach-Object { $candidates += $_.FullName }

$isaacRoot = $null
foreach ($c in $candidates) {
if (Test-Path $c) {
if ((Test-Path (Join-Path $c "kit")) -or (Test-Path (Join-Path $c "apps"))) {
$isaacRoot = $c
break
}
}
}
if (-not $isaacRoot) {
Write-Host "Searched candidates for Sim root:"
$candidates | ForEach-Object { Write-Host " - $_ (exists: $(Test-Path $_))" }
throw "Could not find Isaac Sim install (no kit/ or apps/ under any candidate)"
}

$carb = Join-Path $isaacRoot "kit"
# EXP_PATH should point at IsaacLab's workspace apps dir if present
# (IsaacLab ships its own .kit files there); fall back to Sim's apps.
$workspaceApps = Join-Path $PWD "apps"
$expPath = if (Test-Path $workspaceApps) { $workspaceApps } else { Join-Path $isaacRoot "apps" }

# Export to subsequent steps via $GITHUB_ENV.
"ISAAC_PATH=$isaacRoot" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
"CARB_APP_PATH=$carb" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
"EXP_PATH=$expPath" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
"RESOURCE_NAME=IsaacSim" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

# Prepend Sim DLL search dirs to PATH so the Vulkan loader can find
# NVIDIA's ICD .json + .dll and Kit can resolve plugin DLLs.
$extra = @()
foreach ($d in @((Join-Path $carb "plugins"), (Join-Path $isaacRoot "bin"))) {
if (Test-Path $d) { $extra += $d }
}
if ($extra.Count -gt 0) {
$newPath = ($extra -join ";") + ";" + $env:PATH
"PATH=$newPath" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
}

Write-Host "Resolved:"
Write-Host " ISAAC_PATH = $isaacRoot"
Write-Host " CARB_APP_PATH = $carb"
Write-Host " EXP_PATH = $expPath"
Write-Host " PATH prepend = $($extra -join ';')"
5 changes: 4 additions & 1 deletion .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,10 @@ jobs:
name: Detect Changes
runs-on: ubuntu-latest
outputs:
run_docker_tests: ${{ steps.detect.outputs.run_docker_tests }}
# TEMP (revert before final review): force run_docker_tests=false while
# iterating Windows CI on PR #5700. Saves runner time + cost during the
# back-and-forth.
run_docker_tests: 'false'
steps:
- id: detect
env:
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/install-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,10 @@ jobs:
name: Detect Changes
runs-on: ubuntu-latest
outputs:
run_install_tests: ${{ steps.detect.outputs.run_install_tests }}
# TEMP (revert before final review): force run_install_tests=false while
# iterating Windows CI on PR #5700. Saves runner time + cost during the
# back-and-forth.
run_install_tests: 'false'
steps:
- id: detect
env:
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/license-check.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ concurrency:

jobs:
license-check:
# TEMP (revert before final review): skipped while iterating Windows CI on
# PR #5700. Saves runner time + cost during the back-and-forth.
if: false
runs-on: ubuntu-24.04

steps:
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/test-multi-gpu.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ concurrency:
jobs:
test-multi-gpu:
name: Multi-GPU (${{ matrix.physics }}, ${{ matrix.renderer }})
# TEMP (revert before final review): skipped while iterating Windows CI on
# PR #5700 (this PR touches app_launcher.py, which would otherwise trigger
# the multi-GPU self-hosted runners). Saves runner time + cost.
if: false
# Use dedicated multi-GPU runner to avoid blocking standard CI resources
# Configure this label on a runner with 2+ GPUs (e.g., g5.12xlarge with 4x A10G)
runs-on: [self-hosted, linux, x64, gpu, multi-gpu]
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/wheel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@ jobs:
run: |
set -euo pipefail

# TEMP (revert before final review): force run_build=false while
# iterating Windows CI on PR #5700. The detect step still runs so the
# required check stays green; only the heavy build steps are skipped.
echo "run_build=false" >> "$GITHUB_OUTPUT"
echo "## Wheel build gating" >> "$GITHUB_STEP_SUMMARY"
echo "Skipped: TEMP disabled while iterating Windows CI (PR #5700)." >> "$GITHUB_STEP_SUMMARY"
exit 0

# Keep this workflow unconditionally triggered on PRs so required
# branch-protection checks are always reported. The build steps below
# run only when inputs that can affect the wheel have changed.
Expand Down
Loading
Loading