Skip to content

Skip marker jobs with no marked test file before they start - #8744

Draft
ben-johnston-nv wants to merge 9 commits into
isaac-sim:mainfrom
ben-johnston-nv:ci-marker-skip-jobs
Draft

ben-johnston-nv wants to merge 9 commits into
isaac-sim:mainfrom
ben-johnston-nv:ci-marker-skip-jobs

Conversation

@ben-johnston-nv

@ben-johnston-nv ben-johnston-nv commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Description

Follow-up to #8609, and stacked on it: this branch contains #8609 merged with current develop, so the diff includes its commits until it merges. The change in this PR is the last commit, 365d384.

#8609 leaves this as a follow-up: under a marker run, a job with no marked test file still waits for a GPU runner and pulls the CI image, then passes with an empty report. This PR skips those jobs before they start.

  • Shared selection: test file selection moves from tools/conftest.py into tools/test_selection.py, which imports only the standard library and test_settings. The orchestrator calls it unchanged.
  • Check: tools/ci_marker_jobs.py reads each job's run-package-tests inputs from build.yaml, applies the same selection (including the legacy not <pattern> filter, shards and node-ID subsets), and reports which jobs select a marked file. An input it cannot evaluate keeps the job running.
  • Wiring: Load Config runs the check when marker is set. Every job that forwards the marker gets (!inputs.marker || fromJSON(needs.config.outputs.marker_jobs)['<job>']) in its if:. Runs without a marker are unchanged.
  • Guard: tools/test_ci_marker_jobs.py fails if a job forwards the marker without the matching gate. It runs in Tools Tests, which now also triggers on build.yaml changes.

The empty-report path in the container stays as a backstop.

Expected effect for kitless

The check keeps 9 of the 26 marker jobs. Job by job, it agrees with which jobs ran tests and which passed empty in the kitless run 38775752803 from #8609. File counts differ slightly because develop has moved since. Runners that pull the image slowly gain the most; on ours, each skipped job saves about 10 minutes of runner wait and image pull.

Type of change

  • New feature (non-breaking change which adds functionality)

Release backport

  • Backport this pull request to the active release branch after it merges into develop

Checklist

Docker and GPU tests run on demand. Push the commits you want tested, then
comment run-ci on the pull request.

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks with uv run isaaclab --format
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have validated the changed behavior with focused coverage and applied the test-audit criteria to any test changes
  • I have added a changelog fragment under source/<pkg>/changelog.d/ for every touched package (do not edit CHANGELOG.rst or bump package versions — CI handles that)
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

Not yet run in GitHub Actions: the Load Config sparse checkout and the new if: expressions need a marker=kitless dispatch to confirm.

🤖 Generated with Claude Code

hujc7 and others added 9 commits October 15, 2026 02:22
A workflow_dispatch input forwards one registered marker to every test job. A job with no marked file passes with an empty report, and an unregistered marker fails the job before selection.
Read registered markers from pytest's loaded config instead of re-parsing pyproject.toml, test the rejection and empty-selection exits through pytest_sessionstart, and match the sibling marker order in the Shadow Hand rendering test.
# Conflicts:
#	source/isaaclab_ov/test/test_ovrtx_compat.py
#	source/isaaclab_ov/test/test_ovstage_compat.py
#	source/isaaclab_ov/test/test_runtime_imports.py
A marker run decides in the config job which test jobs select a file carrying
the marker, using the same file selection as tools/conftest.py. Jobs with
nothing to run are skipped instead of waiting for a GPU runner and pulling the
CI image only to pass with an empty report.
@ben-johnston-nv

Copy link
Copy Markdown
Contributor Author

run-ci

@isaaclab-bot isaaclab-bot Bot added ci:run-docker Trigger the on-demand Docker and GPU CI workflow and removed ci:run-docker Trigger the on-demand Docker and GPU CI workflow labels Oct 19, 2026
@ben-johnston-nv

Copy link
Copy Markdown
Contributor Author

Validation:

  • No marker (39328820082): every job ran as before and the run passed.
  • kitless marker (39330427436, from the temporary [DO NOT MERGE] Diagnostic kitless run for #8744 #8746, which made kitless the default): only the 7 GPU test jobs with kitless files that run on pull requests started, and all passed. The other 18 marker jobs, including the 2 cuRobo jobs, were skipped before getting a runner. The run took 20 minutes.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

infrastructure isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants