-
Notifications
You must be signed in to change notification settings - Fork 100
180 lines (157 loc) · 5.87 KB
/
Copy pathuv-ci.yml
File metadata and controls
180 lines (157 loc) · 5.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
# Copyright (c) 2026, The Isaac Lab Arena Project Developers (https://github.com/isaac-sim/IsaacLab-Arena/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
name: Native uv CI
on:
pull_request:
push:
branches: [ "main" ]
schedule:
# Nightly at 06:00 UTC.
- cron: '0 6 * * *'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
pull-requests: read
jobs:
uv_changes:
name: Detect uv-related changes
runs-on: [self-hosted, gpu-arena]
timeout-minutes: 5
# Only meaningful on PRs; other events always run the uv tests.
if: github.event_name == 'pull_request'
outputs:
uv: ${{ steps.filter.outputs.uv }}
steps:
# Queries the PR's changed files via the GitHub API; no checkout needed.
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
uv:
- '.github/workflows/uv-ci.yml'
- 'pyproject.toml'
- 'uv.lock'
- 'submodules/IsaacLab'
- 'submodules/IsaacLab/**'
- 'submodules/Isaac-GR00T'
- 'submodules/Isaac-GR00T/**'
uv_test:
name: Run tests (native uv, source)
runs-on: [self-hosted, gpu-arena]
timeout-minutes: 120
needs: [uv_changes]
# Runs nightly, on push to main, and on manual dispatch; on pull requests
# only when the PR touches the uv-managed dependency files or this workflow.
# The !cancelled() guard keeps the job alive when uv_changes is skipped on
# non-PR events.
if: >-
!cancelled() &&
(github.event_name != 'pull_request' ||
needs.uv_changes.outputs.uv == 'true')
env:
ARENA_INFERENCE_ENDPOINT: public
NVIDIA_API_KEY: ${{ secrets.ARENA_NVIDIA_API_KEY }}
# Accept the Isaac Sim EULA so the first launch is non-interactive.
OMNI_KIT_ACCEPT_EULA: "YES"
ACCEPT_EULA: "Y"
# Large CUDA wheels (e.g. nvidia-cublas-cu12) can exceed uv's 30s default.
UV_HTTP_TIMEOUT: "300"
# Validates the native workflow in a clean ubuntu:24.04 container.
container:
image: nvidia/cuda:12.8.2-base-ubuntu24.04
env:
# Needed to give the container access to the driver's graphics libraries.
NVIDIA_DRIVER_CAPABILITIES: all
steps:
- name: nvidia-smi
run: nvidia-smi
- name: Install git (and tools needed by hooks)
run: |
apt-get update
apt-get install -y --no-install-recommends git git-lfs clang-format ca-certificates make
git --version
git lfs version
# Clean up residual stuff due to symlinks in the submodules directory.
- name: Clean up symlinks in submodules directory
run: |
rm -f .git/modules/submodules/IsaacLab/index.lock || true
rm -rf submodules/* || true
- name: Mark repo as safe for git
run: git config --global --add safe.directory "$PWD"
- name: Checkout Code
uses: actions/checkout@v4
with:
submodules: true
- name: Git LFS
run: |
git lfs update --force
git lfs install --local
git lfs pull
- name: Install graphics loader and build tools
run: |
apt-get update
apt-get install -y --no-install-recommends \
libegl1 libgl1 libglu1-mesa libglx0 libxi6 libxrandr2 libxt6 libsm6 libvulkan1 \
cmake build-essential bash
- name: Install uv
run: |
apt-get update
apt-get install -y --no-install-recommends curl ca-certificates
curl -LsSf https://astral.sh/uv/0.9.27/install.sh | sh
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: Validate uv lock
run: |
uv python install 3.12
uv lock --check --no-python-downloads
# Out-of-source packaging check: validates the lockfile via the
# packaging tests, run in an out of source directory.
- name: Validate editable package
run: |
uv venv --python 3.12 /tmp/arena-package-venv
uv pip install --python /tmp/arena-package-venv/bin/python --no-deps --editable .
uv pip install --python /tmp/arena-package-venv/bin/python pytest
REPO_DIR="$PWD"
cd /tmp
/tmp/arena-package-venv/bin/python -m pytest -v "${REPO_DIR}/isaaclab_arena/tests/test_packaging.py"
# In-source full environment: sync the locked deps and run the sim suite.
- name: Sync the locked environment
run: |
# Fix dubious ownership issues in cache
git config --global --add safe.directory '*'
uv sync --group gr00t-client --extra dev
- name: Run in-process Newton tests
shell: bash
run: |
source .venv/bin/activate
pytest -sv --durations=0 -m with_newton \
isaaclab_arena/tests/
- name: Run in-process PhysX tests without cameras
shell: bash
run: |
source .venv/bin/activate
pytest -sv --durations=0 -m "not with_cameras and not with_subprocess and not with_newton" \
isaaclab_arena/tests/
- name: Run in-process PhysX tests with cameras
shell: bash
run: |
source .venv/bin/activate
pytest -sv --durations=0 -m "with_cameras and not with_subprocess" \
isaaclab_arena/tests/
- name: Run subprocess-spawning PhysX tests
shell: bash
run: |
source .venv/bin/activate
ISAACLAB_ARENA_SUBPROCESS_TIMEOUT=900 \
pytest -sv --durations=0 -m with_subprocess \
isaaclab_arena/tests/
- name: Run GR00T remote policy client tests
shell: bash
run: |
source .venv/bin/activate
pytest -sv --durations=0 \
isaaclab_arena_gr00t/tests/test_gr00t_remote_closedloop_policy.py