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
9 changes: 5 additions & 4 deletions .conda/base/recipe.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

package:
name: unilabos
version: 0.11.3
version: 0.12.1

source:
path: ../../unilabos
Expand All @@ -30,12 +30,13 @@ build:

requirements:
host:
- python ==3.11.14
- python ==3.12.13
- pip
- setuptools
- zstd
- zstandard
run:
- python >=3.12,<3.13
- zstd
- zstandard
- networkx
Expand All @@ -54,9 +55,9 @@ requirements:
- pymodbus
- matplotlib
- pylibftdi
- uni-lab::unilabos-env ==0.11.3
- uni-lab::unilabos-env ==0.12.1

about:
repository: https://github.com/deepmodeling/Uni-Lab-OS
license: GPL-3.0-only
description: "UniLabOS - Production package with minimal ROS2 dependencies"
description: "UniLabOS - Production package for ROS 2 Jazzy and CPython 3.12"
35 changes: 19 additions & 16 deletions .conda/environment/recipe.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

package:
name: unilabos-env
version: 0.11.3
version: 0.12.1

build:
noarch: generic
Expand All @@ -12,28 +12,31 @@ requirements:
# Python
- zstd
- zstandard
- conda-forge::python ==3.11.14
- conda-forge::python ==3.12.13
- conda-forge::numpy >=2,<3
- uni-lab::opentrons-shared-data ==9.1.0+unilabos.np2.1 py312_np2_1
- conda-forge::opencv
# ROS2 dependencies (from ci-check.yml)
- robostack-staging::ros-humble-ros-core
- robostack-staging::ros-humble-action-msgs
- robostack-staging::ros-humble-std-msgs
- robostack-staging::ros-humble-geometry-msgs
- robostack-staging::ros-humble-control-msgs
- robostack-staging::ros-humble-nav2-msgs
- robostack-staging::ros-humble-cv-bridge
- robostack-staging::ros-humble-vision-opencv
- robostack-staging::ros-humble-tf-transformations
- robostack-staging::ros-humble-moveit-msgs
- robostack-staging::ros-humble-tf2-ros
- robostack-staging::ros-humble-tf2-ros-py
- robostack-jazzy::ros2-distro-mutex 0.15.* jazzy_*
- robostack-jazzy::ros-jazzy-ros-core
- robostack-jazzy::ros-jazzy-action-msgs
- robostack-jazzy::ros-jazzy-std-msgs
- robostack-jazzy::ros-jazzy-geometry-msgs
- robostack-jazzy::ros-jazzy-control-msgs
- robostack-jazzy::ros-jazzy-nav2-msgs
- robostack-jazzy::ros-jazzy-cv-bridge
- robostack-jazzy::ros-jazzy-vision-opencv
- robostack-jazzy::ros-jazzy-tf-transformations
- robostack-jazzy::ros-jazzy-moveit-msgs
- robostack-jazzy::ros-jazzy-tf2-ros
- robostack-jazzy::ros-jazzy-tf2-ros-py
- conda-forge::transforms3d
- conda-forge::uv

# UniLabOS custom messages
- uni-lab::ros-humble-unilabos-msgs
- uni-lab::ros-jazzy-unilabos-msgs

about:
repository: https://github.com/deepmodeling/Uni-Lab-OS
license: GPL-3.0-only
description: "UniLabOS Environment - ROS2 and conda dependencies"
description: "UniLabOS Environment - ROS 2 Jazzy, CPython 3.12, and conda dependencies"
22 changes: 11 additions & 11 deletions .conda/full/recipe.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@

package:
name: unilabos-full
version: 0.11.3
version: 0.12.1

build:
noarch: generic

requirements:
run:
# Base unilabos package (includes unilabos-env)
- uni-lab::unilabos ==0.11.3
- uni-lab::unilabos ==0.12.1
# Documentation tools
- sphinx
- sphinx_rtd_theme
Expand All @@ -24,19 +24,19 @@ requirements:
- jupyros
- colcon-common-extensions
# ROS2 full desktop (includes rviz2, gazebo, etc.)
- robostack-staging::ros-humble-desktop-full
- robostack-jazzy::ros-jazzy-desktop-full
# Navigation and motion control
- ros-humble-navigation2
- ros-humble-ros2-control
- ros-humble-robot-state-publisher
- ros-humble-joint-state-publisher
- ros-jazzy-navigation2
- ros-jazzy-ros2-control
- ros-jazzy-robot-state-publisher
- ros-jazzy-joint-state-publisher
# MoveIt motion planning
- ros-humble-moveit
- ros-humble-moveit-servo
- ros-jazzy-moveit
- ros-jazzy-moveit-servo
# Simulation
- ros-humble-simulation
- ros-jazzy-simulation

about:
repository: https://github.com/deepmodeling/Uni-Lab-OS
license: GPL-3.0-only
description: "UniLabOS Full - Complete package with ROS2 Desktop, MoveIt, Navigation2, Gazebo, Jupyter"
description: "UniLabOS Full - ROS 2 Jazzy Desktop, MoveIt, Navigation2, Gazebo, and Jupyter"
28 changes: 22 additions & 6 deletions .github/workflows/ci-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:

jobs:
registry-check:
runs-on: windows-latest
runs-on: windows-2022

env:
# Fix Unicode encoding issue on Windows runner (cp1252 -> utf-8)
Expand All @@ -33,20 +33,34 @@ jobs:
with:
miniforge-version: latest
use-mamba: true
channels: robostack-staging,conda-forge,uni-lab
channel-priority: flexible
python-version: '3.12.13'
channels: conda-forge,robostack-jazzy
channel-priority: strict
activate-environment: check-env
auto-update-conda: false
show-channel-urls: true

- name: Install ROS dependencies, uv and unilabos-msgs
- name: Install ROS 2 Jazzy dependencies and build tools
run: |
echo Installing ROS dependencies...
mamba install -n check-env --override-channels -c robostack-staging -c conda-forge -c uni-lab conda-forge::uv conda-forge::opencv robostack-staging::ros-humble-ros-core robostack-staging::ros-humble-action-msgs robostack-staging::ros-humble-std-msgs robostack-staging::ros-humble-geometry-msgs robostack-staging::ros-humble-control-msgs robostack-staging::ros-humble-nav2-msgs uni-lab::ros-humble-unilabos-msgs robostack-staging::ros-humble-cv-bridge robostack-staging::ros-humble-vision-opencv robostack-staging::ros-humble-tf-transformations robostack-staging::ros-humble-moveit-msgs robostack-staging::ros-humble-tf2-ros robostack-staging::ros-humble-tf2-ros-py conda-forge::transforms3d -y
echo Installing ROS 2 Jazzy dependencies...
mamba install -n check-env --override-channels -c conda-forge -c robostack-jazzy conda-forge::numpy=2 conda-forge::uv conda-forge::opencv conda-forge::colcon-common-extensions robostack-jazzy::ros2-distro-mutex=0.15 robostack-jazzy::ros-jazzy-ros-core robostack-jazzy::ros-jazzy-action-msgs robostack-jazzy::ros-jazzy-std-msgs robostack-jazzy::ros-jazzy-geometry-msgs robostack-jazzy::ros-jazzy-control-msgs robostack-jazzy::ros-jazzy-nav2-msgs robostack-jazzy::ros-jazzy-cv-bridge robostack-jazzy::ros-jazzy-vision-opencv robostack-jazzy::ros-jazzy-tf-transformations robostack-jazzy::ros-jazzy-moveit-msgs robostack-jazzy::ros-jazzy-tf2-ros robostack-jazzy::ros-jazzy-tf2-ros-py conda-forge::transforms3d -y

- name: Initialize MSVC x64 toolchain
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64

- name: Build unilabos_msgs for Jazzy/cp312
run: |
call conda activate check-env
colcon build --base-paths unilabos_msgs --build-base build\unilabos_msgs --install-base install\unilabos_msgs --merge-install --packages-select unilabos_msgs --cmake-args -DBUILD_TESTING=OFF
call install\unilabos_msgs\setup.bat
python -c "from unilabos_msgs.msg import Resource; print('unilabos_msgs Jazzy/cp312: OK')"

- name: Install pip dependencies and unilabos
run: |
call conda activate check-env
call install\unilabos_msgs\setup.bat
echo Installing pip dependencies...
uv pip install -r unilabos/utils/requirements.txt
uv pip install pywinauto git+https://github.com/Xuwznln/pylabrobot.git
Expand All @@ -57,6 +71,7 @@ jobs:
- name: Run HostLink networking tests
run: |
call conda activate check-env
call install\unilabos_msgs\setup.bat
echo Running HostLink, ROS2 domain and networking runtime tests...
python -m pytest -q tests\hostlink tests\networking tests\ros\test_domain_init.py -p no:launch_testing -p no:launch_ros

Expand All @@ -68,6 +83,7 @@ jobs:
# 不能用 "if errorlevel 1"(它对负数退出码会误判为成功)。
run: |
call conda activate check-env
call install\unilabos_msgs\setup.bat
echo Running check mode...
set ATTEMPTS=4
set COUNT=0
Expand Down
76 changes: 43 additions & 33 deletions .github/workflows/conda-pack-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ jobs:
platform: osx-arm64
env_file: unilabos-osx-arm64.yaml
script_ext: sh
- os: windows-latest
- os: windows-2022
platform: win-64
env_file: unilabos-win64.yaml
script_ext: bat
Expand Down Expand Up @@ -84,14 +84,24 @@ jobs:
ref: ${{ github.event.inputs.branch || github.event.workflow_run.head_sha || github.ref }}
fetch-depth: 0

- name: Create artifact label
if: steps.should_build.outputs.should_build == 'true'
id: artifact_label
shell: bash
env:
RAW_PACKAGE_REF: ${{ env.PACKAGE_REF }}
run: |
SAFE_REF="${RAW_PACKAGE_REF//\//-}"
echo "value=$SAFE_REF" >> "$GITHUB_OUTPUT"

- name: Setup Miniforge (with mamba)
if: steps.should_build.outputs.should_build == 'true'
uses: conda-incubator/setup-miniconda@v4
with:
miniforge-version: latest
use-mamba: true
python-version: '3.11.14'
channels: conda-forge,robostack-staging,uni-lab
python-version: '3.12.13'
channels: conda-forge,robostack-jazzy,uni-lab
channel-priority: flexible
activate-environment: unilab
auto-update-conda: false
Expand All @@ -105,10 +115,10 @@ jobs:
echo Build full: ${{ env.BUILD_FULL }}
if "${{ env.BUILD_FULL }}"=="true" (
echo Installing unilabos-full ^(complete package^)...
mamba install -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge uni-lab::unilabos-full conda-pack zstandard -y
mamba install -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy uni-lab::unilabos-full conda-pack zstandard -y
) else (
echo Installing unilabos ^(minimal package^)...
mamba install -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge uni-lab::unilabos conda-pack zstandard -y
mamba install -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy uni-lab::unilabos conda-pack zstandard -y
)

- name: Install conda-pack, unilabos and dependencies (Unix)
Expand All @@ -120,50 +130,50 @@ jobs:
echo "Build full: ${{ env.BUILD_FULL }}"
if [[ "${{ env.BUILD_FULL }}" == "true" ]]; then
echo "Installing unilabos-full (complete package)..."
mamba install -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge uni-lab::unilabos-full conda-pack zstandard -y
mamba install -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy uni-lab::unilabos-full conda-pack zstandard -y
else
echo "Installing unilabos (minimal package)..."
mamba install -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge uni-lab::unilabos conda-pack zstandard -y
mamba install -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy uni-lab::unilabos conda-pack zstandard -y
fi

- name: Get latest ros-humble-unilabos-msgs version (Windows)
- name: Get latest ros-jazzy-unilabos-msgs version (Windows)
if: steps.should_build.outputs.should_build == 'true' && matrix.platform == 'win-64'
id: msgs_version_win
run: |
echo Checking installed ros-humble-unilabos-msgs version...
conda list -n unilab ros-humble-unilabos-msgs
for /f "tokens=2" %%i in ('conda list -n unilab ros-humble-unilabos-msgs --json ^| python -c "import sys, json; pkgs=json.load(sys.stdin); print(pkgs[0]['version'] if pkgs else 'not-found')"') do set VERSION=%%i
echo Checking installed ros-jazzy-unilabos-msgs version...
conda list -n unilab ros-jazzy-unilabos-msgs
for /f "tokens=2" %%i in ('conda list -n unilab ros-jazzy-unilabos-msgs --json ^| python -c "import sys, json; pkgs=json.load(sys.stdin); print(pkgs[0]['version'] if pkgs else 'not-found')"') do set VERSION=%%i
echo installed_version=%VERSION% >> %GITHUB_OUTPUT%
echo Installed ros-humble-unilabos-msgs version: %VERSION%
echo Installed ros-jazzy-unilabos-msgs version: %VERSION%

- name: Get latest ros-humble-unilabos-msgs version (Unix)
- name: Get latest ros-jazzy-unilabos-msgs version (Unix)
if: steps.should_build.outputs.should_build == 'true' && matrix.platform != 'win-64'
id: msgs_version_unix
shell: bash
run: |
echo "Checking installed ros-humble-unilabos-msgs version..."
VERSION=$(conda list -n unilab ros-humble-unilabos-msgs --json | python -c "import sys, json; pkgs=json.load(sys.stdin); print(pkgs[0]['version'] if pkgs else 'not-found')")
echo "Checking installed ros-jazzy-unilabos-msgs version..."
VERSION=$(conda list -n unilab ros-jazzy-unilabos-msgs --json | python -c "import sys, json; pkgs=json.load(sys.stdin); print(pkgs[0]['version'] if pkgs else 'not-found')")
echo "installed_version=$VERSION" >> $GITHUB_OUTPUT
echo "Installed ros-humble-unilabos-msgs version: $VERSION"
echo "Installed ros-jazzy-unilabos-msgs version: $VERSION"

- name: Check for newer ros-humble-unilabos-msgs (Windows)
- name: Check for newer ros-jazzy-unilabos-msgs (Windows)
if: steps.should_build.outputs.should_build == 'true' && matrix.platform == 'win-64'
run: |
echo Checking for available ros-humble-unilabos-msgs versions...
mamba search --override-channels -c uni-lab -c robostack-staging -c conda-forge ros-humble-unilabos-msgs || echo Search completed
echo Checking for available ros-jazzy-unilabos-msgs versions...
mamba search --override-channels -c uni-lab -c conda-forge -c robostack-jazzy ros-jazzy-unilabos-msgs || echo Search completed
echo.
echo Updating ros-humble-unilabos-msgs to latest version...
mamba update -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge ros-humble-unilabos-msgs -y || echo Already at latest version
echo Updating ros-jazzy-unilabos-msgs to latest version...
mamba update -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy ros-jazzy-unilabos-msgs -y || echo Already at latest version

- name: Check for newer ros-humble-unilabos-msgs (Unix)
- name: Check for newer ros-jazzy-unilabos-msgs (Unix)
if: steps.should_build.outputs.should_build == 'true' && matrix.platform != 'win-64'
shell: bash
run: |
echo "Checking for available ros-humble-unilabos-msgs versions..."
mamba search --override-channels -c uni-lab -c robostack-staging -c conda-forge ros-humble-unilabos-msgs || echo "Search completed"
echo "Checking for available ros-jazzy-unilabos-msgs versions..."
mamba search --override-channels -c uni-lab -c conda-forge -c robostack-jazzy ros-jazzy-unilabos-msgs || echo "Search completed"
echo ""
echo "Updating ros-humble-unilabos-msgs to latest version..."
mamba update -n unilab --override-channels -c uni-lab -c robostack-staging -c conda-forge ros-humble-unilabos-msgs -y || echo "Already at latest version"
echo "Updating ros-jazzy-unilabos-msgs to latest version..."
mamba update -n unilab --override-channels -c uni-lab -c conda-forge -c robostack-jazzy ros-jazzy-unilabos-msgs -y || echo "Already at latest version"

- name: Install latest unilabos from source (Windows)
if: steps.should_build.outputs.should_build == 'true' && matrix.platform == 'win-64'
Expand Down Expand Up @@ -193,7 +203,7 @@ jobs:
mamba env list
echo.
echo === Installed Packages ===
mamba list -n unilab | findstr /C:"unilabos" /C:"ros-humble-unilabos-msgs" || mamba list -n unilab
mamba list -n unilab | findstr /C:"unilabos" /C:"ros-jazzy-unilabos-msgs" || mamba list -n unilab
echo.
echo === Python Packages ===
mamba run -n unilab pip list | findstr unilabos || mamba run -n unilab pip list
Expand All @@ -206,7 +216,7 @@ jobs:
mamba env list
echo ""
echo "=== Installed Packages ==="
mamba list -n unilab | grep -E "(unilabos|ros-humble-unilabos-msgs)" || mamba list -n unilab
mamba list -n unilab | grep -E "(unilabos|ros-jazzy-unilabos-msgs)" || mamba list -n unilab
echo ""
echo "=== Python Packages ==="
mamba run -n unilab pip list | grep unilabos || mamba run -n unilab pip list
Expand Down Expand Up @@ -333,7 +343,7 @@ jobs:
if: steps.should_build.outputs.should_build == 'true'
uses: actions/upload-artifact@v6
with:
name: unilab-pack-${{ matrix.platform }}-${{ env.PACKAGE_REF }}
name: unilab-pack-${{ matrix.platform }}-${{ steps.artifact_label.outputs.value }}
path: dist-package/
retention-days: 90
if-no-files-found: error
Expand All @@ -346,7 +356,7 @@ jobs:
echo ==========================================
echo Platform: ${{ matrix.platform }}
echo Branch: ${{ env.PACKAGE_REF }}
echo Python version: 3.11.14
echo Python version: 3.12.13
if "${{ env.BUILD_FULL }}"=="true" (
echo Package: unilabos-full ^(complete^)
) else (
Expand All @@ -356,7 +366,7 @@ jobs:
echo Distribution package contents:
dir dist-package
echo.
echo Artifact name: unilab-pack-${{ matrix.platform }}-${{ env.PACKAGE_REF }}
echo Artifact name: unilab-pack-${{ matrix.platform }}-${{ steps.artifact_label.outputs.value }}
echo.
echo After download, extract the ZIP and run:
echo install_unilab.bat
Expand All @@ -371,7 +381,7 @@ jobs:
echo "=========================================="
echo "Platform: ${{ matrix.platform }}"
echo "Branch: ${{ env.PACKAGE_REF }}"
echo "Python version: 3.11.14"
echo "Python version: 3.12.13"
if [[ "${{ env.BUILD_FULL }}" == "true" ]]; then
echo "Package: unilabos-full (complete)"
else
Expand All @@ -381,7 +391,7 @@ jobs:
echo "Distribution package contents:"
ls -lh dist-package/
echo ""
echo "Artifact name: unilab-pack-${{ matrix.platform }}-${{ env.PACKAGE_REF }}"
echo "Artifact name: unilab-pack-${{ matrix.platform }}-${{ steps.artifact_label.outputs.value }}"
echo ""
echo "After download:"
echo " install_unilab.sh"
Expand Down
Loading
Loading