Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions .github/workflows/changelog-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,16 @@ jobs:
- name: Verify changelog fragments
run: python3 tools/changelog/cli.py check ${{ steps.base.outputs.ref }}

# The unit tests run the real uv and towncrier (via uvx), as the nightly compile does.
- uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
with:
# Keep equal to the uv in docker/Dockerfile.*.
version: "0.12.9"

- name: Run changelog tool unit tests
# Gates tools/changelog/cli.py itself: regression tests for the
# filename rules, fragment parsing, CHANGELOG_HEADER_RE invariant,
# and cmd_check / cmd_compile orchestration. Without this, a cli.py
# fragment rules, the lock pins, the legacy split, and cmd_check /
# cmd_compile orchestration. Without this, a cli.py
# refactor could silently break the gate above.
#
# Skipped when the PR doesn't touch tools/changelog/ — fragment-only
Expand Down
41 changes: 41 additions & 0 deletions .github/workflows/docs-windows.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

name: Windows Docs

on:
pull_request:
paths:
- '.github/workflows/docs-windows.yaml'
- 'docs/**'
- 'pyproject.toml'
- 'uv.lock'
- 'source/isaaclab/isaaclab/cli/**'

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: true

jobs:
build-docs:
runs-on: windows-latest
timeout-minutes: 45
steps:
- uses: actions/checkout@v6

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Suggestion · Style Consistency — Checkout action not pinned to SHA

Every other workflow pins actions to a commit SHA with a version comment (actions/checkout@de0fac2e... # v6 in changelog-check.yml), and the astral-sh/setup-uv step two lines below in this same file is pinned. Pin actions/checkout the same way instead of the floating @v6 tag so the action cannot drift outside reviewed changes.

- uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
with:
python-version: '3.12'
enable-cache: true
- name: Build current documentation
run: uv run --extra dev isaaclab --docs
- name: Verify output
shell: pwsh
run: |
if (-not (Test-Path docs/_build/current/index.html)) {
throw 'Documentation index was not generated'
}
53 changes: 25 additions & 28 deletions .github/workflows/nightly-changelog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,20 @@
# SPDX-License-Identifier: BSD-3-Clause

# Nightly auto-compile: rolls accumulated fragments under
# ``source/<pkg>/changelog.d/`` into per-package ``CHANGELOG.rst`` entries,
# bumps each ``extension.toml``, deletes consumed fragments, and pushes the
# result back to each branch in the configured list. Keeps every tracked
# ``source/<pkg>/changelog.d/`` into per-package ``CHANGELOG.rst`` entries
# (towncrier), bumps each package's ``pyproject.toml`` version, re-locks their
# ``uv.lock`` pins, deletes consumed fragments, and pushes the result back to
# each branch in the configured list. Keeps every tracked
# branch's changelog current without requiring a maintainer to run
# ``compile`` by hand.
#
# Scheduled workflow — must live on the repository's default branch for the
# cron to register. See ``.github/workflows/README.md``.
#
# Scheduled runs combine ``env.CRON_BRANCHES`` with every remote
# ``release/*`` branch that carries ``tools/changelog/cli.py``. This picks up
# new compiler-enabled release branches automatically while leaving historical
# branches that predate the fragment system untouched.
# ``release/*`` branch that carries ``tools/changelog/towncrier.toml``. This picks
# up release branches as they take the towncrier tooling (by backport) and
# leaves older branches untouched.
#
# The push uses a short-lived GitHub App installation token minted from
# ``CHANGELOG_APP_ID`` + ``CHANGELOG_APP_PRIVATE_KEY`` (repo secrets). The
Expand All @@ -31,7 +32,7 @@
name: Nightly Changelog Compilation

# Static branches the nightly cron compiles. The resolver also discovers every
# remote ``release/*`` branch that carries ``tools/changelog/cli.py``. Every
# remote ``release/*`` branch that carries ``tools/changelog/towncrier.toml``. Every
# resolved branch must allow the isaaclab-bot App to bypass its ruleset.
env:
CRON_BRANCHES: develop
Expand All @@ -46,9 +47,9 @@ on:
# Manual trigger is always a single branch. Free-text on purpose
# — scales to any branch (e.g. a new ``release/*`` cut from
# develop) without needing to update the workflow. A branch
# that lacks ``tools/changelog/cli.py`` fails the verify step
# that lacks ``tools/changelog/towncrier.toml`` fails the verify step
# below with a clear error, which is the desired failure mode.
description: 'Branch to compile (e.g. develop, release/3.0.0). Must carry tools/changelog/cli.py.'
description: 'Branch to compile (e.g. develop, release/3.0.0). Must carry tools/changelog/towncrier.toml.'
required: true
type: string
dry_run:
Expand Down Expand Up @@ -94,10 +95,10 @@ jobs:
--header "Authorization: Bearer $API_TOKEN" \
--header 'Accept: application/vnd.github+json' \
--header 'X-GitHub-Api-Version: 2022-11-28' \
"https://api.github.com/repos/$REPOSITORY/contents/tools/changelog/cli.py?ref=$encoded_branch")
"https://api.github.com/repos/$REPOSITORY/contents/tools/changelog/towncrier.toml?ref=$encoded_branch")
case "$http_status" in
200) branches=$(printf '%s\n%s\n' "$branches" "$branch") ;;
404) echo "::notice::Skipping $branch because it predates the changelog compiler." ;;
404) echo "::notice::Skipping $branch because it predates the towncrier changelog tooling." ;;
*)
echo "::error::GitHub Contents API returned HTTP $http_status for $branch."
exit 1
Expand Down Expand Up @@ -165,8 +166,7 @@ jobs:
# ``isaaclab-bot`` — the bypass identity — and downstream CI
# workflows DO trigger on the resulting commit.
token: ${{ steps.app-token.outputs.token }}
# Full history so the compiler can resolve each fragment's merge
# time via ``git log --diff-filter=A --first-parent``.
# Full history for the rebase before push.
fetch-depth: 0

- name: Verify changelog tooling exists on target branch
Expand All @@ -175,17 +175,19 @@ jobs:
run: |
# Loud-fail this matrix entry (not the whole run — ``fail-fast:
# false`` keeps siblings going) when the target branch lacks
# ``tools/changelog/cli.py``. A red tile is the desired signal:
# ``tools/changelog/towncrier.toml``. A red tile is the desired signal:
# a branch in the nightly set without the compile tooling is a
# configuration error, not a "no-op" condition.
if [ ! -f tools/changelog/cli.py ]; then
echo "::error::Branch '$TARGET_BRANCH' is missing tools/changelog/cli.py — drop it from env.CRON_BRANCHES (or the dispatch input) or restore the tooling on that branch."
if [ ! -f tools/changelog/towncrier.toml ]; then
echo "::error::Branch '$TARGET_BRANCH' is missing tools/changelog/towncrier.toml — drop it from env.CRON_BRANCHES (or the dispatch input) or backport the tooling to that branch."
exit 1
fi

- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
- uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
with:
python-version: "3.12"
# Keep equal to the uv in docker/Dockerfile.*: another uv release can
# re-serialize the whole lockfile, which ``compile`` then refuses.
version: "0.12.9"

- name: Compile fragments
# Capture the compile exit code so the next step can commit/push
Expand All @@ -195,19 +197,16 @@ jobs:
# which is exactly the wedge mode that motivated this design.
id: compile
continue-on-error: true
# A dry run compiles in this throwaway checkout; the commit step below is skipped.
run: |
ARGS="--all"
if [ "${{ inputs.dry_run }}" = "true" ]; then
ARGS="$ARGS --dry-run"
fi
echo "Running: python3 tools/changelog/cli.py compile $ARGS"
python3 tools/changelog/cli.py compile $ARGS
python3 tools/changelog/cli.py compile
git diff HEAD --stat

- name: Commit and push if fragments were compiled
# ``always()`` lets this step run even when the compile step above
# reported partial failure (one package's malformed file fails, the
# rest still wrote their CHANGELOG.rst / deleted fragments / bumped
# extension.toml). The staged-diff check below short-circuits cleanly
# pyproject.toml). The staged-diff check below short-circuits cleanly
# if the failed package was the only one with pending work.
if: ${{ always() && !inputs.dry_run }}
env:
Expand All @@ -223,9 +222,7 @@ jobs:
# them correctly. ID 282401363 is isaaclab-bot[bot]'s user ID.
git config user.name "isaaclab-bot[bot]"
git config user.email "282401363+isaaclab-bot[bot]@users.noreply.github.com"
git add source/*/changelog.d/ \
source/*/docs/CHANGELOG.rst \
source/*/pyproject.toml
# ``compile`` staged exactly its outputs (fragments, CHANGELOG.rst, pyproject.toml, uv.lock).
if git diff --staged --quiet; then
echo "No changelog fragments found — nothing to commit."
else
Expand Down
50 changes: 9 additions & 41 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,60 +3,28 @@
We use [Sphinx](https://www.sphinx-doc.org/en/master/) with the [Book Theme](https://sphinx-book-theme.readthedocs.io/en/stable/) for maintaining and generating our documentation.

Install [uv](https://docs.astral.sh/uv/getting-started/installation/) before continuing.
Run all commands below from the repository root. The `--isolated` option creates
a temporary environment for the `test` extra, which combines test and
documentation requirements, leaving the repository's `.venv` unchanged.
Run the build commands below from the repository root. The Isaac Lab CLI runs
Sphinx in the repository's `.venv` with the `dev` extra, syncing documentation
dependencies into that environment. The project selects Python 3.12.

## Current-Version Documentation

This section describes how to build the documentation for the current version of the project.

<details open>
<summary><strong>Linux</strong></summary>

```bash
# 1. Build the current documentation
uv run --isolated --extra dev -- make -C docs current-docs

# 2. Open the current docs
xdg-open docs/_build/current/index.html
```
</details>

<details> <summary><strong>Windows</strong></summary>

```batch
:: 1. Build the current documentation
uv run --isolated --extra dev -- cmd /c docs\make.bat current-docs

:: 2. Open the current docs
start docs\_build\current\index.html
uv run --extra dev isaaclab --docs
```
</details>

Open `docs/_build/current/index.html` in a browser after the build completes.

## Multi-Version Documentation

This section describes how to build the multi-version documentation, which includes previous tags and the main branch.

<details open> <summary><strong>Linux</strong></summary>

```bash
# 1. Build the multi-version documentation
uv run --isolated --extra dev -- make -C docs multi-docs

# 2. Open the multi-version docs
xdg-open docs/_build/index.html
uv run --extra dev isaaclab --docs_multi
```
</details>

<details> <summary><strong>Windows</strong></summary>

```batch
:: 1. Build the multi-version documentation
uv run --isolated --extra dev -- cmd /c docs\make.bat multi-docs

:: 2. Open the multi-version docs
start docs\_build\index.html
```
</details>
This build requires the Git tags for the versions to include. It checks for
`v3.0.0-EA/index.html` by default; set `DOCS_DEFAULT_REF` to another built ref
if needed. Open `docs/_build/index.html` in a browser after the build completes.
5 changes: 4 additions & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,10 @@ def _read_pinned_versions() -> dict:
# pinned to the release version because /docs/stable/objects.inv currently 404s
"torch": (f"https://docs.pytorch.org/docs/{torch_docs_version}/", None),
# Versioned documentation can lag a newly published Isaac Sim package release.
"isaacsim": ("https://docs.isaacsim.omniverse.nvidia.com/latest/py/", None),
"isaacsim": (
"https://docs.isaacsim.omniverse.nvidia.com/latest/py/",
"https://docs.isaacsim.omniverse.nvidia.com/latest/py/objects.inv",
),
"gymnasium": ("https://gymnasium.farama.org/", None),
# NOTE: pinned to /stable/ because /objects.inv at the root currently 404s
"warp": ("https://nvidia.github.io/warp/stable/", None),
Expand Down
65 changes: 0 additions & 65 deletions docs/make.bat

This file was deleted.

9 changes: 5 additions & 4 deletions docs/source/api/lab/isaaclab.sim.spawners.rst
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,6 @@ Materials
RigidBodyMaterialBaseCfg
RigidBodyMaterialFragment
UsdPhysicsRigidBodyMaterialCfg
RigidBodyMaterialCfg
DeformableMaterialFragment
OmniPhysicsDeformableMaterialCfg
OmniPhysicsSurfaceDeformableMaterialCfg
Expand Down Expand Up @@ -371,9 +370,11 @@ Physical Materials
:show-inheritance:
:exclude-members: __init__, func

.. autoclass:: RigidBodyMaterialCfg
:members:
:exclude-members: __init__, func
.. deprecated:: 3.0.0

``RigidBodyMaterialCfg`` is an alias for
:class:`~isaaclab_physx.sim.spawners.materials.PhysxRigidBodyMaterialCfg`.
Use the PhysX configuration directly.

.. autoclass:: DeformableMaterialFragment
:members:
Expand Down
1 change: 1 addition & 0 deletions docs/source/refs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ framework releases.
* :isaaclab-source:`isaaclab_ppisp <source/isaaclab_ppisp/docs/CHANGELOG.rst>`
* :isaaclab-source:`isaaclab_rl <source/isaaclab_rl/docs/CHANGELOG.rst>`
* :isaaclab-source:`isaaclab_tasks <source/isaaclab_tasks/docs/CHANGELOG.rst>`
* :isaaclab-source:`isaaclab_tasks_experimental <source/isaaclab_tasks_experimental/docs/CHANGELOG.rst>`
* :isaaclab-source:`isaaclab_teleop <source/isaaclab_teleop/docs/CHANGELOG.rst>`
* :isaaclab-source:`isaaclab_visualizers <source/isaaclab_visualizers/docs/CHANGELOG.rst>`
Loading
Loading