Splits Tests More Evenly, Only Runs Relevant Ones, Improves Job Cancellation, Adds Reporting#5059
Splits Tests More Evenly, Only Runs Relevant Ones, Improves Job Cancellation, Adds Reporting#5059myurasov-nv wants to merge 68 commits intoisaac-sim:developfrom
Conversation
5ff7ea8 to
349d522
Compare
Greptile SummaryThis PR is a significant CI/CD overhaul for IsaacLab that replaces a single monolithic "run everything" test workflow with a smart, selective system: a Key findings:
Confidence Score: 3/5
Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
PR([Pull Request / workflow_dispatch]) --> DC
DC[detect-changes\nproduces per-package true/false outputs]
DC --> BUILD[build\nBase Docker Image]
DC -->|mimic/tasks/core/infra| BUILDCUROBO[build-curobo\ncuRobo Docker Image]
BUILD -->|always + core/infra| CORE1[test-isaaclab-core 1/3]
BUILD -->|always + core/infra| CORE2[test-isaaclab-core 2/3]
BUILD -->|always + core/infra| CORE3[test-isaaclab-core 3/3]
BUILD -->|always + tasks/core/infra| TASKS1[test-isaaclab-tasks 1/3]
BUILD -->|always + tasks/core/infra| TASKS2[test-isaaclab-tasks 2/3]
BUILD -->|always + tasks/core/infra| TASKS3[test-isaaclab-tasks 3/3]
BUILD -->|always + rl/core/infra| RL[test-isaaclab-rl]
BUILD -->|always + mimic/core/infra| MIMIC[test-isaaclab-mimic]
BUILD -->|always + contrib/core/infra| CONTRIB[test-isaaclab-contrib]
BUILD -->|always + teleop/core/infra| TELEOP[test-isaaclab-teleop]
BUILD -->|always + viz/core/infra| VIZ[test-isaaclab-visualizers]
BUILD -->|always + assets/core/infra| ASSETS[test-isaaclab-assets]
BUILD -->|always + newton/core/infra| NEWTON[test-isaaclab-newton]
BUILD -->|always + physx/core/infra| PHYSX[test-isaaclab-physx]
BUILD -->|always + tasks/core/infra| TRAIN[test-environments-training]
BUILDCUROBO -->|always + mimic/core/infra| CUROBO[test-curobo]
BUILDCUROBO -->|always + mimic/tasks/core/infra| SKILLGEN[test-skillgen]
CORE1 & CORE2 & CORE3 & TASKS1 & TASKS2 & TASKS3 & RL & MIMIC & CONTRIB & TELEOP & VIZ & ASSETS & NEWTON & PHYSX & TRAIN & CUROBO & SKILLGEN --> COMBINE
COMBINE[combine-results\ndownload artifacts\npublish unit-test report]
|
3f69cf3 to
b83016e
Compare
7d2c6ec to
fdec5fc
Compare
2 similar comments
daaf42a to
6b0903b
Compare
…d update related test jobs
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Signed-off-by: myurasov-nv <168484206+myurasov-nv@users.noreply.github.com>
6b0903b to
6209aaa
Compare
Description
Until now every PR ran all GPU test jobs regardless of what changed. That is no-good and needs to change. :)
This PR:
Detailed changes
detect-changesjob that runsgit diff --name-onlyto produce per-packagetrue/falseoutputs; each test job skips itself when its package is untouched. Core/infra changes still trigger everything. Manual "run all" option available via GH UI.test-generalinto per-package jobs:test-isaaclab(2 shards),test-isaaclab-rl,-mimic,-contrib,-teleop,-visualizers,-assets. Each job is independently gated and sharded.include-fileswhitelists with deterministicshard-index % shard-countsharding, fixing 7 silently skippedisaaclab_taskstests.conftest.pyexclude pattern that was matching a comma-separated string as one substring (never matched).actions/checkout@v4,actions/upload-artifact@v4,actions/download-artifact@v4to latest SHA-pinned versions.How test_train_environments.py is split
The test function
test_train_environmentsis parametrized by task_spec (all registered Isaac environments) and workflow (rl_games,rsl_rl,sb3,skrl), so pytest expands it intoN_tasks x 4_workflowsindividual test items. Thepytest_collection_modifyitemshook in conftest.py runs after pytest builds this full list and keeps only every Nth item based onTEST_SHARD_INDEX/TEST_SHARD_COUNTenv vars (e.g. shard 0/3 gets items 0, 3, 6, ...). Each CI runner sees ~1/3 of the parametrized combinations, cutting wall time from ~1.2h to ~24min per shard.Type of change
Checklist
pre-commitchecks with./isaaclab.sh --formatconfig/extension.tomlfileCONTRIBUTORS.mdor my name already exists there