Repository navigation
Conversation
|
| uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0 | ||
|
|
||
| - name: Download validated wheel | ||
| uses: actions/download-artifact@v7 |
There was a problem hiding this comment.
Mutable release artifact action
The new PyPI publishing job runs actions/download-artifact@v7 with id-token: write, then publishes the wheel it places in dist/ without checking its integrity. If the mutable v7 reference is repointed, that action could replace the validated wheel before publication. Pin the artifact action in this publishing path to an immutable commit.
How this was verified: The credentialed publish job downloads the artifact through the mutable action and immediately passes the resulting wheel to uv publish.
| uv run --no-project python tools/qa_uvx.py --examples --output /tmp/uvx-qa-pypi-default \ | ||
| --uvx-arg=--default-index=https://pypi.org/simple |
There was a problem hiding this comment.
Default check may verify wrong version
If a future release is a prerelease, this unpinned PyPI check can install an earlier stable version instead of the wheel just published. That version could pass the catalog checks, leaving the release job green without confirming that the bare uvx isaaclab command selects this release. Compare the installed version in the QA report with RELEASE_VERSION.
| monkeypatch.setattr(qa.shutil, "which", lambda name: sys.executable if name == "uvx" else None) | ||
| output = tmp_path / "results" | ||
| assert qa.main(["--output", str(output)]) == 1 | ||
| report = json.loads((output / "report.json").read_text()) | ||
| assert report["passed"] is False | ||
| assert report["counts"]["failed"] >= 1 | ||
| assert any(check["name"] == "demo-list" and check["status"] == "failed" for check in report["checks"]) |
There was a problem hiding this comment.
Successful QA path lacks coverage
These runner tests cover command failures and timeouts, but none exercises a successful catalog, probe, and help check or --run argument forwarding. Since the release gate depends on those paths, a regression that skips a check or builds the wrong successful command could go unnoticed. Add a controlled successful-path test.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
|
run-ci |
There was a problem hiding this comment.
Isaac Lab Review Bot
All reviewed code categories look good.
- PR description: Remove the unrelated prior GPU demo runs and qualify “every platform” as the device-selection path evaluating
sys.platform; the focused test result is relevant, and no performance evidence is needed. - Design and architecture: Architecture looks good.
- Scope and over-engineering: No over-engineering issues.
- API: API changes look good.
- Compatibility and deprecation: No breaking changes identified.
- Implementation: Implementation looks good.
- Style consistency: Style consistency looks good.
- Test quality: Test quality looks good.
No blocking issues. No inline findings.
Automated review; human maintainers own approval decisions.
|
run-ci |
AntoineRichard
left a comment
There was a problem hiding this comment.
🤖 AI review. Generated with Claude Code and checked by @AntoineRichard before posting.
Summary
The title and description describe a one-line sys import fix, but that fix is already on develop. #8305 (merged Oct 5) added import sys to sim_launcher.py and shipped its own fragment, fix-sim-launcher-sys-import.fixed.rst. This branch's merge base is #8190, so the sim_launcher.py hunk does nothing after merge.
What's left is the docs change from 1f1b1f35 (embedding benchmark snapshots so the downloaded HTML works offline). The description doesn't mention it.
Findings
1. One concern per PR (scope). About 98% of the diff is the docs feature: a Sphinx directive, a JS rewrite, an RST change and a new test. Suggest removing the sim_launcher.py change and retitling to something like [Docs] Embed benchmark snapshots so downloaded HTML works offline, with the description rewritten around that change. Alternatively, close this and open the docs change on its own.
2. Duplicate changelog entry. source/isaaclab/changelog.d/fix-simulation-launcher-platform-check.fixed.rst describes the same fix as #8305's fragment, so the release notes would list it twice. Suggest deleting it. The docs change probably needs only a .skip fragment.
3. The Validation section doesn't match the diff. The five-step GPU runs (Zoo, H1, Block and Tackle, …) are left over from the uvx-demos work. Nothing validates the docs change. Suggest replacing them with the pytest tools/test/test_doc_benchmarks.py command and its pass count, a docs build, and a check that environments.html works when opened from disk (file://).
4. Page weight (docs/_extensions/isaaclab_docs.py, IsaacLabBenchmarkData). The two CSVs (~135 KB develop + ~67 KB release) are inlined as csv.DictReader JSON. That repeats every header name on every row, so the payload is likely about 2× the CSV size, added to every load of environments.html. Suggest embedding the raw CSV text, or a compact {header, rows: [[...]]} shape. If the size is acceptable, a one-line note in the description with the added KB would cover it.
5. Leftover defensive code (environment-browser.js, renderBenchmarks). The try/catch, benchmarkErrors, and the data-benchmark-error UI handled fetch failures. They now only wrap synchronous filters that won't realistically throw. Meanwhile JSON.parse(document.querySelector("[data-environment-benchmark-rows]").textContent), the call that can fail when the directive is missing, sits outside the try. Suggest removing the error path. A missing directive is better caught at build time.
6. Test shape (tools/test/test_doc_benchmarks.py). The test runs two full sphinx -W builds in subprocesses, while sibling tests (test_doc_redirects.py, test_doc_source_links.py) call the extension directly. The </script> / quoted-value escaping case is a real regression guard and worth keeping. The second build mostly re-tests Sphinx's own note_dependency incremental tracking. Suggest dropping it, or adding one line to the description on why stale snapshots after a CSV refresh need their own guard.
Minor: the "release"/"develop" channels and the _static/benchmarks path are hardcoded in the directive, while data-benchmark-*-dates stays in the RST. This is fine as is; passing the channels as directive arguments would keep them in one place. Replacing the hand-written JS CSV parser with Python's csv is a good simplification.
Description
launch_simulationreadssys.platformduring device selection without importingsys, causing simulation startup to fail withNameErroron every platform. Add the missing standard-library import so the launcher can initialize the runtime.Validation
test_launch_simulation_require_kit.pypassed.NameErrorwhen the import is removed.developbaseline.Type of change
Release backport
developChecklist
uv run isaaclab --format