pixi-ros 0.2.0__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/.github/workflows/ci.yml +1 -1
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/PKG-INFO +118 -25
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/README.md +116 -24
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/pixi.lock +134 -1
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/pixi.toml +2 -1
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/pyproject.toml +2 -1
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/src/pixi_ros/cli.py +44 -31
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/src/pixi_ros/data/conda-forge.yaml +6 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/src/pixi_ros/init.py +395 -206
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/src/pixi_ros/mappings.py +39 -26
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/src/pixi_ros/package_xml.py +69 -8
- pixi_ros-0.4.0/src/pixi_ros/validator.py +245 -0
- pixi_ros-0.4.0/tests/examples/ws1/README_PIXI.md +125 -0
- pixi_ros-0.4.0/tests/examples/ws1/pixi.toml +37 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-a/package.xml +4 -2
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/package.xml +3 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/test_init.py +206 -2
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/test_mappings.py +54 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/test_package_xml.py +92 -0
- pixi_ros-0.4.0/tests/test_validator.py +324 -0
- pixi_ros-0.2.0/tests/examples/ws1/pixi.toml +0 -39
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/.gitattributes +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/.github/workflows/publish-pypi.yml +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/.gitignore +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/LICENSE +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/src/pixi_ros/__init__.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/src/pixi_ros/config.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/src/pixi_ros/data/README.md +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/src/pixi_ros/data/README_PIXI.md.template +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/src/pixi_ros/utils.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/src/pixi_ros/workspace.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/examples/ws1/pixi.lock +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-a/CMakeLists.txt +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-a/LICENSE +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/package-b/__init__.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/setup.cfg +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/setup.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/test/test_copyright.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/test/test_flake8.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/examples/ws1/src/package-b/test/test_pep257.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/README.md +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/legacy_pkg/package.xml +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/my_cpp_pkg/CMakeLists.txt +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/my_cpp_pkg/package.xml +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/my_mixed_pkg/package.xml +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/my_python_pkg/package.xml +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/fixtures/mock_workspace/src/my_python_pkg/setup.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/test_cli.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/test_config.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/test_gateway_availability.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/test_utils.py +0 -0
- {pixi_ros-0.2.0 → pixi_ros-0.4.0}/tests/test_workspace.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pixi-ros
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Pixi extension for ROS package management
|
|
5
5
|
Project-URL: Homepage, https://github.com/ruben-arts/pixi-ros
|
|
6
6
|
Project-URL: Repository, https://github.com/ruben-arts/pixi-ros
|
|
@@ -13,6 +13,7 @@ Requires-Dist: pathspec>=0.11.0
|
|
|
13
13
|
Requires-Dist: py-rattler>=0.6.0
|
|
14
14
|
Requires-Dist: pyyaml>=6.0
|
|
15
15
|
Requires-Dist: rich>=13.0.0
|
|
16
|
+
Requires-Dist: rosdistro>=0.9.0
|
|
16
17
|
Requires-Dist: tomlkit>=0.12.0
|
|
17
18
|
Requires-Dist: typer>=0.12.0
|
|
18
19
|
Description-Content-Type: text/markdown
|
|
@@ -63,10 +64,16 @@ pixi-ros init --distro humble
|
|
|
63
64
|
This will:
|
|
64
65
|
1. Discover all ROS packages in your workspace (by finding `package.xml` files)
|
|
65
66
|
2. Read dependencies from each `package.xml`
|
|
66
|
-
3.
|
|
67
|
+
3. **Validate and resolve** each dependency using the priority system:
|
|
68
|
+
- Skip workspace packages (built locally)
|
|
69
|
+
- Use custom mappings from YAML files
|
|
70
|
+
- Query ROS distro index for ROS packages
|
|
71
|
+
- Auto-detect packages on conda-forge
|
|
72
|
+
- Flag packages that can't be found
|
|
67
73
|
4. Generate/update `pixi.toml` with proper channels and dependencies
|
|
68
|
-
5. Check package availability
|
|
74
|
+
5. Check package availability in conda channels for each platform
|
|
69
75
|
6. Create helpful build/test/clean tasks
|
|
76
|
+
7. Display detailed validation results with source information
|
|
70
77
|
|
|
71
78
|
### Install and Build
|
|
72
79
|
|
|
@@ -88,26 +95,66 @@ pixi shell
|
|
|
88
95
|
|
|
89
96
|
## How It Works
|
|
90
97
|
|
|
91
|
-
### Dependency Mapping
|
|
98
|
+
### Dependency Mapping & Validation
|
|
92
99
|
|
|
93
|
-
`pixi-ros` reads all dependency types from `package.xml` files
|
|
94
|
-
It then does a best effort mapping of ROS package names to conda packages.
|
|
100
|
+
`pixi-ros` reads all dependency types from `package.xml` files and intelligently resolves them to conda packages using a **priority-based validation system**.
|
|
95
101
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
102
|
+
#### Validation Priority Order
|
|
103
|
+
|
|
104
|
+
When resolving a ROS package dependency, `pixi-ros` checks sources in this order:
|
|
105
|
+
|
|
106
|
+
1. **Workspace packages** (local source) → Skipped, won't be added to dependencies
|
|
107
|
+
2. **Mapping files** → Use custom conda package mappings from the embedded mapping.
|
|
108
|
+
3. **ROS distribution** → Query the official ROS distro index for `ros-{distro}-{package}` packages
|
|
109
|
+
4. **conda-forge** (auto-detection) → Search conda-forge for packages without ros-distro prefix
|
|
110
|
+
5. **NOT FOUND** → Mark as unavailable and comment out in `pixi.toml`
|
|
111
|
+
|
|
112
|
+
#### Package Sources
|
|
113
|
+
|
|
114
|
+
The dependency tables show where each package comes from:
|
|
115
|
+
|
|
116
|
+
- **ROS {distro}**: Official ROS distribution packages from robostack (e.g., `ros-humble-rclcpp`)
|
|
117
|
+
- **Mapping**: Custom mappings from YAML files (e.g., `cmake` → `cmake`, `udev` → `libusb + libudev`)
|
|
118
|
+
- **conda-forge**: Auto-detected packages available directly on conda-forge
|
|
119
|
+
- **Workspace**: Local packages in your workspace (skipped from dependencies)
|
|
120
|
+
- **NOT FOUND**: Packages that couldn't be resolved (commented out in `pixi.toml`)
|
|
99
121
|
|
|
100
122
|
The mapping rules are defined in YAML files (see `src/pixi_ros/data/conda-forge.yaml`) and can be customized by placing your own mapping files in `pixi-ros/*.yaml` or `~/.pixi-ros/*.yaml`.
|
|
101
123
|
|
|
102
|
-
After
|
|
124
|
+
After dependency resolution, `pixi-ros` validates package availability in the configured channels for each target platform by connecting to `https://prefix.dev`.
|
|
125
|
+
|
|
126
|
+
### Example Output
|
|
103
127
|
|
|
104
|
-
|
|
128
|
+
When you run `pixi-ros init --distro humble`, you'll see validation results:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
Found 2 package(s): my_package, other_package
|
|
132
|
+
Initializing ROS humble distribution validator...
|
|
133
|
+
|
|
134
|
+
╭─────────────────── Package: my_package ───────────────────╮
|
|
135
|
+
│ ROS Dependency │ Type │ Conda Packages │ Source │
|
|
136
|
+
├────────────────┼─────────┼─────────────────────────┼──────────────┤
|
|
137
|
+
│ rclcpp │ Build │ ros-humble-rclcpp │ ROS humble │
|
|
138
|
+
│ std_msgs │ Runtime │ ros-humble-std-msgs │ ROS humble │
|
|
139
|
+
│ cmake │ Build │ cmake │ Mapping │
|
|
140
|
+
│ eigen │ Build │ eigen │ conda-forge │
|
|
141
|
+
╰────────────────┴─────────┴─────────────────────────┴──────────────╯
|
|
142
|
+
|
|
143
|
+
Validation Summary:
|
|
144
|
+
✓ 2 workspace packages (skipped)
|
|
145
|
+
✓ 1 packages from mappings
|
|
146
|
+
✓ 5 packages from ROS humble distro
|
|
147
|
+
✓ 1 packages from conda-forge (auto-detected)
|
|
148
|
+
|
|
149
|
+
Total external dependencies: 7
|
|
150
|
+
```
|
|
105
151
|
|
|
106
152
|
Given a `package.xml` with:
|
|
107
153
|
|
|
108
154
|
```xml
|
|
109
155
|
<depend>rclcpp</depend>
|
|
110
156
|
<build_depend>ament_cmake</build_depend>
|
|
157
|
+
<build_depend>cmake</build_depend>
|
|
111
158
|
<exec_depend>std_msgs</exec_depend>
|
|
112
159
|
```
|
|
113
160
|
|
|
@@ -115,17 +162,57 @@ Given a `package.xml` with:
|
|
|
115
162
|
|
|
116
163
|
```toml
|
|
117
164
|
[dependencies]
|
|
118
|
-
|
|
119
|
-
ros-humble-
|
|
120
|
-
|
|
165
|
+
# Base ROS dependencies
|
|
166
|
+
ros-humble-ros-base = "*"
|
|
167
|
+
pkg-config = "*"
|
|
168
|
+
compilers = "*"
|
|
169
|
+
make = "*"
|
|
170
|
+
ninja = "*"
|
|
171
|
+
|
|
172
|
+
# Build tools
|
|
173
|
+
colcon-common-extensions = "*"
|
|
174
|
+
|
|
175
|
+
# Workspace dependencies
|
|
176
|
+
cmake = "*" # From mapping
|
|
177
|
+
ros-humble-ament-cmake = "*" # From ROS humble
|
|
178
|
+
ros-humble-rclcpp = "*" # From ROS humble
|
|
179
|
+
ros-humble-std-msgs = "*" # From ROS humble
|
|
121
180
|
```
|
|
122
181
|
|
|
123
|
-
|
|
182
|
+
### Version Constraints
|
|
183
|
+
|
|
184
|
+
`pixi-ros` supports version constraints from `package.xml` files and automatically applies them to the generated `pixi.toml`.
|
|
185
|
+
|
|
186
|
+
#### Supported Version Attributes
|
|
124
187
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
188
|
+
You can specify version requirements in your `package.xml` using standard ROS version attributes:
|
|
189
|
+
|
|
190
|
+
| package.xml attribute | pixi.toml constraint | Description |
|
|
191
|
+
|----------------------|----------------------|-------------|
|
|
192
|
+
| `version_eq="X.Y.Z"` | `==X.Y.Z` | Exactly version X.Y.Z |
|
|
193
|
+
| `version_gte="X.Y.Z"` | `>=X.Y.Z` | Version X.Y.Z or newer |
|
|
194
|
+
| `version_gt="X.Y.Z"` | `>X.Y.Z` | Newer than version X.Y.Z |
|
|
195
|
+
| `version_lte="X.Y.Z"` | `<=X.Y.Z` | Version X.Y.Z or older |
|
|
196
|
+
| `version_lt="X.Y.Z"` | `<X.Y.Z` | Older than version X.Y.Z |
|
|
197
|
+
|
|
198
|
+
Multiple constraints can be combined on the same dependency and will be joined with commas in the output.
|
|
199
|
+
|
|
200
|
+
Given a `package.xml` with version constraints:
|
|
201
|
+
|
|
202
|
+
```xml
|
|
203
|
+
<depend version_gte="3.12.4">cmake</depend>
|
|
204
|
+
<build_depend version_gte="3.3.0" version_lt="4.0.0">eigen</build_depend>
|
|
205
|
+
<exec_depend version_eq="1.2.3">boost</exec_depend>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
`pixi-ros init` generates:
|
|
209
|
+
|
|
210
|
+
```toml
|
|
211
|
+
[dependencies]
|
|
212
|
+
cmake = ">=3.12.4"
|
|
213
|
+
eigen = ">=3.3.0,<4.0.0"
|
|
214
|
+
boost = "==1.2.3"
|
|
215
|
+
```
|
|
129
216
|
|
|
130
217
|
## Command Reference
|
|
131
218
|
|
|
@@ -147,13 +234,16 @@ pixi-ros init
|
|
|
147
234
|
|
|
148
235
|
**What it does:**
|
|
149
236
|
- Scans workspace for `package.xml` files
|
|
150
|
-
- Reads all dependency types (build, exec, test)
|
|
237
|
+
- Reads all dependency types (build, exec, test) and version constraints
|
|
238
|
+
- **Validates dependencies** using the priority-based system (workspace → mapping → ROS distro → conda-forge)
|
|
151
239
|
- Maps ROS dependencies to conda packages for each platform
|
|
240
|
+
- Applies version constraints from package.xml to pixi.toml dependencies
|
|
152
241
|
- Configures robostack channels
|
|
153
242
|
- Checks package availability per platform
|
|
154
243
|
- Creates build tasks using colcon
|
|
155
244
|
- Generates helpful `README_PIXI.md`
|
|
156
245
|
- Sets up platform-specific dependencies in `pixi.toml`
|
|
246
|
+
- **Displays validation results** showing where each dependency was found
|
|
157
247
|
|
|
158
248
|
**Running multiple times:**
|
|
159
249
|
The command is idempotent - you can run it multiple times to update dependencies as your workspace changes.
|
|
@@ -261,12 +351,15 @@ workspace/
|
|
|
261
351
|
|
|
262
352
|
### Package Not Found
|
|
263
353
|
|
|
264
|
-
If pixi-ros marks packages as "NOT FOUND":
|
|
354
|
+
If pixi-ros marks packages as "NOT FOUND" (shown in red in the validation output):
|
|
355
|
+
|
|
356
|
+
1. **Check the ROS distro**: Verify the package exists in robostack: https://prefix.dev/channels/robostack-{distro}
|
|
357
|
+
2. **Check for typos**: Review your `package.xml` for spelling errors
|
|
358
|
+
3. **Check conda-forge**: Some packages may be available directly on conda-forge without the `ros-distro-` prefix
|
|
359
|
+
4. **Create a mapping**: Add a custom mapping in `pixi-ros/*.yaml` if the package has a different conda name
|
|
360
|
+
5. **Add to workspace**: Consider including the package source in your workspace instead of depending on it
|
|
265
361
|
|
|
266
|
-
|
|
267
|
-
2. Check for typos in `package.xml`
|
|
268
|
-
3. Some packages may have different names - check mapping files
|
|
269
|
-
4. Consider adding the package to your workspace instead of depending on it
|
|
362
|
+
The validation table shows exactly where each dependency was checked, making it easier to diagnose issues.
|
|
270
363
|
|
|
271
364
|
### Different Package Names
|
|
272
365
|
|
|
@@ -44,10 +44,16 @@ pixi-ros init --distro humble
|
|
|
44
44
|
This will:
|
|
45
45
|
1. Discover all ROS packages in your workspace (by finding `package.xml` files)
|
|
46
46
|
2. Read dependencies from each `package.xml`
|
|
47
|
-
3.
|
|
47
|
+
3. **Validate and resolve** each dependency using the priority system:
|
|
48
|
+
- Skip workspace packages (built locally)
|
|
49
|
+
- Use custom mappings from YAML files
|
|
50
|
+
- Query ROS distro index for ROS packages
|
|
51
|
+
- Auto-detect packages on conda-forge
|
|
52
|
+
- Flag packages that can't be found
|
|
48
53
|
4. Generate/update `pixi.toml` with proper channels and dependencies
|
|
49
|
-
5. Check package availability
|
|
54
|
+
5. Check package availability in conda channels for each platform
|
|
50
55
|
6. Create helpful build/test/clean tasks
|
|
56
|
+
7. Display detailed validation results with source information
|
|
51
57
|
|
|
52
58
|
### Install and Build
|
|
53
59
|
|
|
@@ -69,26 +75,66 @@ pixi shell
|
|
|
69
75
|
|
|
70
76
|
## How It Works
|
|
71
77
|
|
|
72
|
-
### Dependency Mapping
|
|
78
|
+
### Dependency Mapping & Validation
|
|
73
79
|
|
|
74
|
-
`pixi-ros` reads all dependency types from `package.xml` files
|
|
75
|
-
It then does a best effort mapping of ROS package names to conda packages.
|
|
80
|
+
`pixi-ros` reads all dependency types from `package.xml` files and intelligently resolves them to conda packages using a **priority-based validation system**.
|
|
76
81
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
82
|
+
#### Validation Priority Order
|
|
83
|
+
|
|
84
|
+
When resolving a ROS package dependency, `pixi-ros` checks sources in this order:
|
|
85
|
+
|
|
86
|
+
1. **Workspace packages** (local source) → Skipped, won't be added to dependencies
|
|
87
|
+
2. **Mapping files** → Use custom conda package mappings from the embedded mapping.
|
|
88
|
+
3. **ROS distribution** → Query the official ROS distro index for `ros-{distro}-{package}` packages
|
|
89
|
+
4. **conda-forge** (auto-detection) → Search conda-forge for packages without ros-distro prefix
|
|
90
|
+
5. **NOT FOUND** → Mark as unavailable and comment out in `pixi.toml`
|
|
91
|
+
|
|
92
|
+
#### Package Sources
|
|
93
|
+
|
|
94
|
+
The dependency tables show where each package comes from:
|
|
95
|
+
|
|
96
|
+
- **ROS {distro}**: Official ROS distribution packages from robostack (e.g., `ros-humble-rclcpp`)
|
|
97
|
+
- **Mapping**: Custom mappings from YAML files (e.g., `cmake` → `cmake`, `udev` → `libusb + libudev`)
|
|
98
|
+
- **conda-forge**: Auto-detected packages available directly on conda-forge
|
|
99
|
+
- **Workspace**: Local packages in your workspace (skipped from dependencies)
|
|
100
|
+
- **NOT FOUND**: Packages that couldn't be resolved (commented out in `pixi.toml`)
|
|
80
101
|
|
|
81
102
|
The mapping rules are defined in YAML files (see `src/pixi_ros/data/conda-forge.yaml`) and can be customized by placing your own mapping files in `pixi-ros/*.yaml` or `~/.pixi-ros/*.yaml`.
|
|
82
103
|
|
|
83
|
-
After
|
|
104
|
+
After dependency resolution, `pixi-ros` validates package availability in the configured channels for each target platform by connecting to `https://prefix.dev`.
|
|
105
|
+
|
|
106
|
+
### Example Output
|
|
84
107
|
|
|
85
|
-
|
|
108
|
+
When you run `pixi-ros init --distro humble`, you'll see validation results:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
Found 2 package(s): my_package, other_package
|
|
112
|
+
Initializing ROS humble distribution validator...
|
|
113
|
+
|
|
114
|
+
╭─────────────────── Package: my_package ───────────────────╮
|
|
115
|
+
│ ROS Dependency │ Type │ Conda Packages │ Source │
|
|
116
|
+
├────────────────┼─────────┼─────────────────────────┼──────────────┤
|
|
117
|
+
│ rclcpp │ Build │ ros-humble-rclcpp │ ROS humble │
|
|
118
|
+
│ std_msgs │ Runtime │ ros-humble-std-msgs │ ROS humble │
|
|
119
|
+
│ cmake │ Build │ cmake │ Mapping │
|
|
120
|
+
│ eigen │ Build │ eigen │ conda-forge │
|
|
121
|
+
╰────────────────┴─────────┴─────────────────────────┴──────────────╯
|
|
122
|
+
|
|
123
|
+
Validation Summary:
|
|
124
|
+
✓ 2 workspace packages (skipped)
|
|
125
|
+
✓ 1 packages from mappings
|
|
126
|
+
✓ 5 packages from ROS humble distro
|
|
127
|
+
✓ 1 packages from conda-forge (auto-detected)
|
|
128
|
+
|
|
129
|
+
Total external dependencies: 7
|
|
130
|
+
```
|
|
86
131
|
|
|
87
132
|
Given a `package.xml` with:
|
|
88
133
|
|
|
89
134
|
```xml
|
|
90
135
|
<depend>rclcpp</depend>
|
|
91
136
|
<build_depend>ament_cmake</build_depend>
|
|
137
|
+
<build_depend>cmake</build_depend>
|
|
92
138
|
<exec_depend>std_msgs</exec_depend>
|
|
93
139
|
```
|
|
94
140
|
|
|
@@ -96,17 +142,57 @@ Given a `package.xml` with:
|
|
|
96
142
|
|
|
97
143
|
```toml
|
|
98
144
|
[dependencies]
|
|
99
|
-
|
|
100
|
-
ros-humble-
|
|
101
|
-
|
|
145
|
+
# Base ROS dependencies
|
|
146
|
+
ros-humble-ros-base = "*"
|
|
147
|
+
pkg-config = "*"
|
|
148
|
+
compilers = "*"
|
|
149
|
+
make = "*"
|
|
150
|
+
ninja = "*"
|
|
151
|
+
|
|
152
|
+
# Build tools
|
|
153
|
+
colcon-common-extensions = "*"
|
|
154
|
+
|
|
155
|
+
# Workspace dependencies
|
|
156
|
+
cmake = "*" # From mapping
|
|
157
|
+
ros-humble-ament-cmake = "*" # From ROS humble
|
|
158
|
+
ros-humble-rclcpp = "*" # From ROS humble
|
|
159
|
+
ros-humble-std-msgs = "*" # From ROS humble
|
|
102
160
|
```
|
|
103
161
|
|
|
104
|
-
|
|
162
|
+
### Version Constraints
|
|
163
|
+
|
|
164
|
+
`pixi-ros` supports version constraints from `package.xml` files and automatically applies them to the generated `pixi.toml`.
|
|
165
|
+
|
|
166
|
+
#### Supported Version Attributes
|
|
105
167
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
168
|
+
You can specify version requirements in your `package.xml` using standard ROS version attributes:
|
|
169
|
+
|
|
170
|
+
| package.xml attribute | pixi.toml constraint | Description |
|
|
171
|
+
|----------------------|----------------------|-------------|
|
|
172
|
+
| `version_eq="X.Y.Z"` | `==X.Y.Z` | Exactly version X.Y.Z |
|
|
173
|
+
| `version_gte="X.Y.Z"` | `>=X.Y.Z` | Version X.Y.Z or newer |
|
|
174
|
+
| `version_gt="X.Y.Z"` | `>X.Y.Z` | Newer than version X.Y.Z |
|
|
175
|
+
| `version_lte="X.Y.Z"` | `<=X.Y.Z` | Version X.Y.Z or older |
|
|
176
|
+
| `version_lt="X.Y.Z"` | `<X.Y.Z` | Older than version X.Y.Z |
|
|
177
|
+
|
|
178
|
+
Multiple constraints can be combined on the same dependency and will be joined with commas in the output.
|
|
179
|
+
|
|
180
|
+
Given a `package.xml` with version constraints:
|
|
181
|
+
|
|
182
|
+
```xml
|
|
183
|
+
<depend version_gte="3.12.4">cmake</depend>
|
|
184
|
+
<build_depend version_gte="3.3.0" version_lt="4.0.0">eigen</build_depend>
|
|
185
|
+
<exec_depend version_eq="1.2.3">boost</exec_depend>
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
`pixi-ros init` generates:
|
|
189
|
+
|
|
190
|
+
```toml
|
|
191
|
+
[dependencies]
|
|
192
|
+
cmake = ">=3.12.4"
|
|
193
|
+
eigen = ">=3.3.0,<4.0.0"
|
|
194
|
+
boost = "==1.2.3"
|
|
195
|
+
```
|
|
110
196
|
|
|
111
197
|
## Command Reference
|
|
112
198
|
|
|
@@ -128,13 +214,16 @@ pixi-ros init
|
|
|
128
214
|
|
|
129
215
|
**What it does:**
|
|
130
216
|
- Scans workspace for `package.xml` files
|
|
131
|
-
- Reads all dependency types (build, exec, test)
|
|
217
|
+
- Reads all dependency types (build, exec, test) and version constraints
|
|
218
|
+
- **Validates dependencies** using the priority-based system (workspace → mapping → ROS distro → conda-forge)
|
|
132
219
|
- Maps ROS dependencies to conda packages for each platform
|
|
220
|
+
- Applies version constraints from package.xml to pixi.toml dependencies
|
|
133
221
|
- Configures robostack channels
|
|
134
222
|
- Checks package availability per platform
|
|
135
223
|
- Creates build tasks using colcon
|
|
136
224
|
- Generates helpful `README_PIXI.md`
|
|
137
225
|
- Sets up platform-specific dependencies in `pixi.toml`
|
|
226
|
+
- **Displays validation results** showing where each dependency was found
|
|
138
227
|
|
|
139
228
|
**Running multiple times:**
|
|
140
229
|
The command is idempotent - you can run it multiple times to update dependencies as your workspace changes.
|
|
@@ -242,12 +331,15 @@ workspace/
|
|
|
242
331
|
|
|
243
332
|
### Package Not Found
|
|
244
333
|
|
|
245
|
-
If pixi-ros marks packages as "NOT FOUND":
|
|
334
|
+
If pixi-ros marks packages as "NOT FOUND" (shown in red in the validation output):
|
|
335
|
+
|
|
336
|
+
1. **Check the ROS distro**: Verify the package exists in robostack: https://prefix.dev/channels/robostack-{distro}
|
|
337
|
+
2. **Check for typos**: Review your `package.xml` for spelling errors
|
|
338
|
+
3. **Check conda-forge**: Some packages may be available directly on conda-forge without the `ros-distro-` prefix
|
|
339
|
+
4. **Create a mapping**: Add a custom mapping in `pixi-ros/*.yaml` if the package has a different conda name
|
|
340
|
+
5. **Add to workspace**: Consider including the package source in your workspace instead of depending on it
|
|
246
341
|
|
|
247
|
-
|
|
248
|
-
2. Check for typos in `package.xml`
|
|
249
|
-
3. Some packages may have different names - check mapping files
|
|
250
|
-
4. Consider adding the package to your workspace instead of depending on it
|
|
342
|
+
The validation table shows exactly where each dependency was checked, making it easier to diagnose issues.
|
|
251
343
|
|
|
252
344
|
### Different Package Names
|
|
253
345
|
|