Unverified Commit f70e695f authored by ooctipus's avatar ooctipus Committed by GitHub

Fixs isaaclab.sh to detect isaacsim_version accurately 4.5 or >= 5.0 (#3139)

# Description

Current is_isaacsim_version_4_5() sometimes mis-detects 5.0 when running
4.5 (e.g., Docker/symlinked installs), causing the conda bootstrap to
pick Python 3.11 instead of 3.10.

This pr ensures determining the isaacsim version following below steps

1. Read ${ISAACLAB_PATH}/_isaac_sim/VERSION (symlink/binary install).

2. If unknown, import isaacsim and read ../../VERSION next to the
package. (pip installation)

3. If still unknown, fall back to
importlib.metadata.version("isaacsim").

I tested locally to work with 4.5 pip or binary install.

<!-- As you go through the list, delete the ones that are not
applicable. -->

- Bug fix (non-breaking change which fixes an issue)

## Screenshots

Please attach before and after screenshots of the change if applicable.

<!--
Example:

| Before | After |
| ------ | ----- |
| _gif/png before_ | _gif/png after_ |

To upload images to a PR -- simply drag and drop an image while in edit
mode and it should upload the image directly. You can then paste that
source into the above before/after sections.
-->

## Checklist

- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it

For example,
- [x] I have done this task
- [ ] I have not done this task
-->
parent 5f71ff47
...@@ -43,33 +43,48 @@ install_system_deps() { ...@@ -43,33 +43,48 @@ install_system_deps() {
fi fi
} }
# Returns success (exit code 0 / "true") if the detected Isaac Sim version starts with 4.5,
# otherwise returns non-zero ("false"). Works with both symlinked binary installs and pip installs.
is_isaacsim_version_4_5() { is_isaacsim_version_4_5() {
local version=""
local python_exe local python_exe
python_exe=$(extract_python_exe) python_exe=$(extract_python_exe)
# 1) Try the VERSION file # 0) Fast path: read VERSION file from the symlinked _isaac_sim directory (binary install)
local sim_file # If the repository has _isaac_sim → <IsaacSimRoot> symlink, the VERSION file is the simplest source of truth.
sim_file=$("${python_exe}" -c "import isaacsim; print(isaacsim.__file__)" 2>/dev/null) || return 1 if [[ -f "${ISAACLAB_PATH}/_isaac_sim/VERSION" ]]; then
local version_path # Read first line of the VERSION file; don't fail the whole script on errors.
version_path=$(dirname "${sim_file}")/../../VERSION version=$(head -n1 "${ISAACLAB_PATH}/_isaac_sim/VERSION" || true)
if [[ -f "${version_path}" ]]; then
local ver
ver=$(head -n1 "${version_path}")
[[ "${ver}" == 4.5* ]] && return 0
fi fi
# 2) Fallback to importlib.metadata via a here-doc # 1) Package-path probe: import isaacsim and walk up to ../../VERSION (pip or nonstandard layouts)
local ver # If we still don't know the version, ask Python where the isaacsim package lives
ver=$("${python_exe}" <<'PYCODE' 2>/dev/null if [[ -z "$version" ]]; then
local sim_file=""
# Print isaacsim.__file__; suppress errors so set -e won't abort.
sim_file=$("${python_exe}" -c 'import isaacsim, os; print(isaacsim.__file__)' 2>/dev/null || true)
if [[ -n "$sim_file" ]]; then
local version_path
version_path="$(dirname "$sim_file")/../../VERSION"
# If that VERSION file exists, read it.
[[ -f "$version_path" ]] && version=$(head -n1 "$version_path" || true)
fi
fi
# 2) Fallback: use package metadata via importlib.metadata.version("isaacsim")
if [[ -z "$version" ]]; then
version=$("${python_exe}" <<'PY' 2>/dev/null || true
from importlib.metadata import version, PackageNotFoundError from importlib.metadata import version, PackageNotFoundError
try: try:
print(version("isaacsim")) print(version("isaacsim"))
except PackageNotFoundError: except PackageNotFoundError:
import sys; sys.exit(1) pass
PYCODE PY
) || return 1 )
fi
[[ "${ver}" == 4.5* ]] # Final decision: return success if version begins with "4.5", 0 if match, 1 otherwise.
[[ "$version" == 4.5* ]]
} }
# check if running in docker # check if running in docker
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment