From fe235468313acb69b8561706982af833a6284ad3 Mon Sep 17 00:00:00 2001 From: Peter Verswyvelen Date: Thu, 28 May 2026 16:39:42 +0000 Subject: [PATCH 1/2] feat: log Kit version info on AppLauncher startup Prints Kit version, kernel version, and git hash to stderr after AppLauncher initialization completes. This makes it easy to verify which Kit/Isaac Sim runtime is actually being used in CI logs without needing to add ad-hoc version probes to individual tests. Output is best-effort (wrapped in try/except) so it never breaks existing tests. --- source/isaaclab/isaaclab/app/app_launcher.py | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/source/isaaclab/isaaclab/app/app_launcher.py b/source/isaaclab/isaaclab/app/app_launcher.py index dcc8d1ca53e0..e16cc79ecfe0 100644 --- a/source/isaaclab/isaaclab/app/app_launcher.py +++ b/source/isaaclab/isaaclab/app/app_launcher.py @@ -234,6 +234,9 @@ def __init__(self, launcher_args: argparse.Namespace | dict | None = None, **kwa # use __stderr__ which is never suppressed. print("[ISAACLAB] AppLauncher initialization complete", file=sys.__stderr__, flush=True) + # Log Kit/runtime version information for diagnostics. + self._log_kit_version_info() + # Ensure SimulationApp.close() is called on normal process exit so Kit # shuts down cleanly instead of relying on __del__ (which logs a warning # and can leave GPU resources in a bad state for the next test). @@ -1223,6 +1226,26 @@ def _hide_play_button(self, flag): play_button_group._play_button.visible = not flag # type: ignore play_button_group._play_button.enabled = not flag # type: ignore + def _log_kit_version_info(self): + """Log Kit and runtime version information for CI diagnostics.""" + try: + import carb + import omni.kit.app + + app = omni.kit.app.get_app() + tokens = carb.tokens.get_tokens_interface() + + kit_version = app.get_kit_version() + kernel_version = app.get_kernel_version() + kit_git_hash = tokens.resolve("${kit_git_hash}") + + print(f"[ISAACLAB] Kit version: {kit_version}", file=sys.__stderr__, flush=True) + print(f"[ISAACLAB] Kit kernel: {kernel_version}", file=sys.__stderr__, flush=True) + print(f"[ISAACLAB] Kit hash: {kit_git_hash}", file=sys.__stderr__, flush=True) + except Exception: + # Non-fatal: version logging is best-effort diagnostics. + pass + def _abort_signal_handle_callback(self, signal, frame): """Handle the abort/segmentation/kill signals.""" # close the app From fc42687cc004cca6a25a6aec69cdb2651e75cea3 Mon Sep 17 00:00:00 2001 From: Peter Verswyvelen Date: Thu, 28 May 2026 16:41:57 +0000 Subject: [PATCH 2/2] chore: add changelog fragment for Kit version logging --- .../changelog.d/pv-log-kit-version.rst | 4 +++ source/isaaclab/isaaclab/app/app_launcher.py | 32 ++++++++----------- 2 files changed, 18 insertions(+), 18 deletions(-) create mode 100644 source/isaaclab/changelog.d/pv-log-kit-version.rst diff --git a/source/isaaclab/changelog.d/pv-log-kit-version.rst b/source/isaaclab/changelog.d/pv-log-kit-version.rst new file mode 100644 index 000000000000..a951551cc345 --- /dev/null +++ b/source/isaaclab/changelog.d/pv-log-kit-version.rst @@ -0,0 +1,4 @@ +Added +^^^^^ + +* Added Kit version, kernel version, and git hash logging to :class:`~isaaclab.app.AppLauncher` startup. diff --git a/source/isaaclab/isaaclab/app/app_launcher.py b/source/isaaclab/isaaclab/app/app_launcher.py index e16cc79ecfe0..6b8d635c2d62 100644 --- a/source/isaaclab/isaaclab/app/app_launcher.py +++ b/source/isaaclab/isaaclab/app/app_launcher.py @@ -1227,24 +1227,20 @@ def _hide_play_button(self, flag): play_button_group._play_button.enabled = not flag # type: ignore def _log_kit_version_info(self): - """Log Kit and runtime version information for CI diagnostics.""" - try: - import carb - import omni.kit.app - - app = omni.kit.app.get_app() - tokens = carb.tokens.get_tokens_interface() - - kit_version = app.get_kit_version() - kernel_version = app.get_kernel_version() - kit_git_hash = tokens.resolve("${kit_git_hash}") - - print(f"[ISAACLAB] Kit version: {kit_version}", file=sys.__stderr__, flush=True) - print(f"[ISAACLAB] Kit kernel: {kernel_version}", file=sys.__stderr__, flush=True) - print(f"[ISAACLAB] Kit hash: {kit_git_hash}", file=sys.__stderr__, flush=True) - except Exception: - # Non-fatal: version logging is best-effort diagnostics. - pass + """Log Kit and runtime version information.""" + import carb + import omni.kit.app + + app = omni.kit.app.get_app() + tokens = carb.tokens.get_tokens_interface() + + kit_version = app.get_kit_version() + kernel_version = app.get_kernel_version() + kit_git_hash = tokens.resolve("${kit_git_hash}") or "unknown" + + print(f"[ISAACLAB] Kit version: {kit_version}", file=sys.__stderr__, flush=True) + print(f"[ISAACLAB] Kit kernel: {kernel_version}", file=sys.__stderr__, flush=True) + print(f"[ISAACLAB] Kit hash: {kit_git_hash}", file=sys.__stderr__, flush=True) def _abort_signal_handle_callback(self, signal, frame): """Handle the abort/segmentation/kill signals."""