@@ -107,6 +107,13 @@ inputs:
107107 post-merge a cumulative writeback; only warm-warp-cache uses it.
108108 default : ' '
109109 required : false
110+ renderer-cache :
111+ description : >-
112+ Kit, RTX, and NVIDIA compute cache mode. Empty disables the cache,
113+ 'restore' reads the newest compatible snapshot, and 'save' additionally
114+ publishes a cumulative snapshot. PR jobs must use restore only.
115+ default : ' '
116+ required : false
110117 standalone-script-scope :
111118 description : ' Enable standalone script smoke tests for this scripts/ subdirectory'
112119 default : ' '
@@ -192,6 +199,14 @@ runs:
192199 id : warp-cache-key
193200 uses : ./.github/actions/warp-cache-key
194201
202+ - name : Resolve renderer cache key
203+ if : inputs.renderer-cache != ''
204+ id : renderer-cache-key
205+ uses : ./.github/actions/renderer-cache-key
206+ with :
207+ isaacsim-base-image : ${{ inputs.isaacsim-base-image }}
208+ isaacsim-version : ${{ inputs.isaacsim-version }}
209+
195210 # Both modes restore. 'save' additionally writes the result back, so a
196211 # post-merge run gets the same speedup as a pull request and the collection
197212 # accumulates whatever was missing instead of restarting from empty.
@@ -237,6 +252,45 @@ runs:
237252 echo "WARP_CACHE_FINGERPRINT_BEFORE=$fingerprint" >> "$GITHUB_ENV"
238253 fi
239254
255+ - name : Restore renderer cache
256+ if : inputs.renderer-cache != ''
257+ id : renderer-cache-restore
258+ uses : actions/cache/restore@v4
259+ with :
260+ path : ${{ steps.renderer-cache-key.outputs.host-dir }}
261+ key : ${{ steps.renderer-cache-key.outputs.key }}
262+ restore-keys : ${{ steps.renderer-cache-key.outputs.restore-keys }}
263+
264+ - name : Report restored renderer cache
265+ if : inputs.renderer-cache != ''
266+ shell : bash
267+ env :
268+ HOST_DIR : ${{ steps.renderer-cache-key.outputs.host-dir }}
269+ MATCHED_KEY : ${{ steps.renderer-cache-restore.outputs.cache-matched-key }}
270+ COLLECTION : ${{ steps.renderer-cache-key.outputs.collection }}
271+ CACHE_MODE : ${{ inputs.renderer-cache }}
272+ run : |
273+ set -euo pipefail
274+ mkdir -p "$HOST_DIR"
275+ if [ ! -w "$HOST_DIR" ]; then
276+ echo "::error::Renderer cache directory is not writable: $HOST_DIR"
277+ exit 1
278+ fi
279+
280+ if [ -z "$MATCHED_KEY" ]; then
281+ echo "::warning::Renderer cache miss - no entry in collection ${COLLECTION}"
282+ echo "RENDERER_CACHE_HIT=miss" >> "$GITHUB_ENV"
283+ else
284+ echo "Renderer cache hit: ${MATCHED_KEY}"
285+ echo "RENDERER_CACHE_HIT=${MATCHED_KEY}" >> "$GITHUB_ENV"
286+ fi
287+ echo "RENDERER_CACHE_BYTES_BEFORE=$(du -sb "$HOST_DIR" | cut -f1)" >> "$GITHUB_ENV"
288+ python3 .github/actions/run-package-tests/renderer_cache_inventory.py "$HOST_DIR" "Renderer cache restored"
289+ if [ "$CACHE_MODE" = "save" ]; then
290+ fingerprint="$(python3 .github/actions/run-package-tests/renderer_cache_inventory.py "$HOST_DIR" --fingerprint)"
291+ echo "RENDERER_CACHE_FINGERPRINT_BEFORE=$fingerprint" >> "$GITHUB_ENV"
292+ fi
293+
240294 - name : Setup wheelhouse registry authentication
241295 if : inputs.wheelhouse-image != ''
242296 uses : ./.github/actions/_lib/setup-docker-config
@@ -318,6 +372,7 @@ runs:
318372 wheelhouse-packages : ${{ inputs.wheelhouse-packages }}
319373 omni-github-test-type : ${{ inputs.omni-github-test-type }}
320374 warp-cache-host-dir : ${{ steps.warp-cache-key.outputs.host-dir }}
375+ renderer-cache-host-dir : ${{ steps.renderer-cache-key.outputs.host-dir }}
321376 standalone-script-scope : ${{ inputs.standalone-script-scope }}
322377 standalone-script-visualizer : ${{ inputs.standalone-script-visualizer }}
323378 standalone-script-runtime-group : ${{ inputs.standalone-script-runtime-group }}
@@ -407,6 +462,60 @@ runs:
407462 path : ${{ steps.warp-cache-key.outputs.host-dir }}
408463 key : ${{ steps.warp-cache-key.outputs.key }}
409464
465+ - name : Report renderer cache growth
466+ if : always() && inputs.renderer-cache != ''
467+ id : renderer-cache-growth
468+ shell : bash
469+ env :
470+ HOST_DIR : ${{ steps.renderer-cache-key.outputs.host-dir }}
471+ CACHE_MODE : ${{ inputs.renderer-cache }}
472+ run : |
473+ set -euo pipefail
474+
475+ if [ ! -d "$HOST_DIR" ]; then
476+ echo "Renderer cache directory is missing; nothing to report"
477+ echo "empty=true" >> "$GITHUB_OUTPUT"
478+ exit 0
479+ fi
480+
481+ before="${RENDERER_CACHE_BYTES_BEFORE:-0}"
482+ after="$(du -sb "$HOST_DIR" | cut -f1)"
483+ grew=$(( after - before ))
484+ echo "Renderer cache: restored $(( before / 1000000 )) MB, ended at $(( after / 1000000 )) MB (+$(( grew / 1000000 )) MB)"
485+ python3 .github/actions/run-package-tests/renderer_cache_inventory.py "$HOST_DIR" "Renderer cache final"
486+
487+ if [ -z "$(find "$HOST_DIR" -type f -print -quit)" ]; then
488+ echo "::warning::Renderer cache contains no files; skipping publish"
489+ echo "empty=true" >> "$GITHUB_OUTPUT"
490+ echo "changed=false" >> "$GITHUB_OUTPUT"
491+ elif [ "$after" -gt 8000000000 ]; then
492+ echo "::warning::Renderer cache exceeds 8 GB; skipping publish"
493+ echo "empty=false" >> "$GITHUB_OUTPUT"
494+ echo "too-large=true" >> "$GITHUB_OUTPUT"
495+ echo "changed=false" >> "$GITHUB_OUTPUT"
496+ else
497+ echo "empty=false" >> "$GITHUB_OUTPUT"
498+ echo "too-large=false" >> "$GITHUB_OUTPUT"
499+ if [ "$CACHE_MODE" = "save" ] && [ "${RENDERER_CACHE_HIT:-miss}" != "miss" ]; then
500+ fingerprint="$(python3 .github/actions/run-package-tests/renderer_cache_inventory.py "$HOST_DIR" --fingerprint)"
501+ if [ "$fingerprint" = "${RENDERER_CACHE_FINGERPRINT_BEFORE:-}" ]; then
502+ echo "Renderer cache contents are unchanged; skipping duplicate snapshot"
503+ echo "changed=false" >> "$GITHUB_OUTPUT"
504+ else
505+ echo "changed=true" >> "$GITHUB_OUTPUT"
506+ fi
507+ else
508+ echo "changed=true" >> "$GITHUB_OUTPUT"
509+ fi
510+ fi
511+
512+ - name : Save renderer cache
513+ if : ' !cancelled() && inputs.renderer-cache == '' save'' && steps.renderer-cache-growth.outputs.empty != '' true'' && steps.renderer-cache-growth.outputs.too-large != '' true'' && steps.renderer-cache-growth.outputs.changed == '' true'' '
514+ uses : actions/cache/save@v4
515+ with :
516+ path : ${{ steps.renderer-cache-key.outputs.host-dir }}
517+ key : ${{ steps.renderer-cache-key.outputs.key }}
518+
410519 - name : Cleanup wheelhouse artifacts
411520 if : always() && steps.extract-wheelhouse.outputs.wheelhouse_host_dir != ''
412521 shell : bash
0 commit comments