[CI] Publish the kit-less image from the nightly cron - #6820
Conversation
The kit-less container merged into develop in isaac-sim#6355, but the nightly publish workflow only ever built docker/Dockerfile.base, so no kit-less image is pushed to the registry. Add an image dimension to the build matrix. Both images share the Isaac Lab repository and are distinguished by a tag suffix, so no registry-side provisioning is needed and the base image tags are unchanged. The kit-less leg pins linux/amd64 because no arm64 GPU runner validates that build. A Dockerfile-existence guard lets branches cut before the image was introduced skip it rather than failing the run, and the concurrency group now includes the image key so the two legs do not cancel each other.
Greptile SummaryAdds kit-less image publication to the nightly container workflow.
Confidence Score: 5/5The PR appears safe to merge, with no concrete blocking or non-blocking defects identified in the changed workflow. The matrix values produce valid per-image build commands, isolate concurrent and cached image variants, and intentionally skip branches that do not contain the selected Dockerfile. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Resolve nightly branches] --> B{Branch × image matrix}
B --> C[Check out matrix branch]
C --> D{Selected Dockerfile exists?}
D -->|No| E[Skip image leg successfully]
D -->|Yes| F[Generate image-specific tags]
F --> G{Explicit platforms configured?}
G -->|Yes| H[Use configured platforms]
G -->|No| I[Detect base-image architectures]
H --> J[Build and push image]
I --> J
Reviews (1): Last reviewed commit: "Publish the kit-less image from the nigh..." | Re-trigger Greptile |
There was a problem hiding this comment.
Isaac Lab Review Bot
Reviewed the new branch-by-image publish matrix and traced base and kitless behavior through checkout, skip guards, tag generation, platform selection, caching, and push execution. Existing base image publication behavior is preserved while kitless images receive distinct suffixed tags.
- Design and architecture: The per-image matrix metadata is a coherent extension of the branch matrix. Including the image key in concurrency groups and cache scopes prevents cross-image cancellation and cache collisions. Missing Dockerfiles on older branches are handled after checkout by cleanly skipping the affected leg.
- API: No Python, CLI, or public package API changes are introduced. Existing base image tags remain unchanged, while kitless moving and immutable tags use a non-colliding
-kitlesssuffix. No package changelog fragment is required for this CI-only change. - Implementation: Tag construction, immutable-tag skip behavior, Dockerfile selection, per-image home arguments, and explicit amd64 platform selection for kitless are internally consistent. The missing-Dockerfile guard executes only after setup and registry login, which adds some overhead for skipped legs but does not affect correctness. The base-oriented tagging comment could be expanded for kitless, but its current wording does not create a material implementation defect.
No blocking issues. No inline issue met the actionable-evidence threshold; the assessment above records the review feedback.
Automated review; human maintainers own approval decisions.
Dockerfile.kitless declares neither ISAACSIM_BASE_IMAGE_ARG, ISAACSIM_VERSION_ARG nor ISAACSIM_ROOT_PATH_ARG, so passing them left unconsumed build arguments in its build log. Assemble the argument list per image and add the Isaac Sim ones only for the image that builds on that base. ISAACLAB_PATH_ARG and DOCKER_USER_HOME_ARG are declared by both Dockerfiles and still apply to each.
1. Summary
imagedimension to the nightly publish matrix sodocker/Dockerfile.kitlessis built and pushed alongsidedocker/Dockerfile.base.isaaclab_image_namerepository and are distinguished by a-kitlesstag suffix, so no registry-side provisioning is required.2. Background
The kit-less container landed on
developin #6355 — "[Newton] Add a kitless training container". That PR builds and validates the image inkitless-docker.yml, but publishing is owned by this workflow, which only ever builtDockerfile.base. As a result no kit-less image reaches the registry.Scheduled workflows run only from the default branch, which is
release/3.0.0-beta2— every nightly since 2026-07-26 has run from it — so this change belongs here rather than onmain.3. Design
CRON_BRANCHESis unchanged; the matrix cross-product is branch x image.linux/amd64.ubuntu:24.04is multi-arch andovrtxships an aarch64 wheel, but no arm64 GPU runner validates that build, so the published manifest is limited to the architecture CI exercises.Dockerfile.kitlessdoes not exist on this branch or on older releases.concurrency.groupgains the image key. Without it the two legs share a group undercancel-in-progress: trueand cancel each other.DOCKER_USER_HOME_ARGmoves into the matrix (/rootfor base,/home/isaaclabfor kit-less) so the published image matches its Compose profile. TheISAACSIM_*arguments stay inline becausestrategy.matrixcannot reference thestepscontext that supplies them.4. Test plan
develop,release/3.0.0-beta2andmainx both images with a stubbeddocker; confirmed tags, platforms, Dockerfile andDOCKER_USER_HOME_ARGper leg, and that base output is identical to today.mainis still skipped by both legs, as before.uv run isaaclab -fon all files.