pixi-ros 0.1.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.
Files changed (47) hide show
  1. pixi_ros-0.1.0/.gitattributes +2 -0
  2. pixi_ros-0.1.0/.github/workflows/ci.yml +23 -0
  3. pixi_ros-0.1.0/.github/workflows/publish-pypi.yml +27 -0
  4. pixi_ros-0.1.0/.gitignore +13 -0
  5. pixi_ros-0.1.0/PKG-INFO +212 -0
  6. pixi_ros-0.1.0/README.md +195 -0
  7. pixi_ros-0.1.0/pixi.lock +1672 -0
  8. pixi_ros-0.1.0/pixi.toml +22 -0
  9. pixi_ros-0.1.0/pyproject.toml +64 -0
  10. pixi_ros-0.1.0/src/pixi_ros/__init__.py +3 -0
  11. pixi_ros-0.1.0/src/pixi_ros/cli.py +77 -0
  12. pixi_ros-0.1.0/src/pixi_ros/config.py +34 -0
  13. pixi_ros-0.1.0/src/pixi_ros/data/README.md +56 -0
  14. pixi_ros-0.1.0/src/pixi_ros/data/README_PIXI.md.template +125 -0
  15. pixi_ros-0.1.0/src/pixi_ros/data/conda-forge.yaml +1049 -0
  16. pixi_ros-0.1.0/src/pixi_ros/init.py +548 -0
  17. pixi_ros-0.1.0/src/pixi_ros/mappings.py +298 -0
  18. pixi_ros-0.1.0/src/pixi_ros/package_xml.py +183 -0
  19. pixi_ros-0.1.0/src/pixi_ros/utils.py +80 -0
  20. pixi_ros-0.1.0/src/pixi_ros/workspace.py +213 -0
  21. pixi_ros-0.1.0/tests/examples/ws1/pixi.lock +6499 -0
  22. pixi_ros-0.1.0/tests/examples/ws1/pixi.toml +39 -0
  23. pixi_ros-0.1.0/tests/examples/ws1/src/package-a/CMakeLists.txt +26 -0
  24. pixi_ros-0.1.0/tests/examples/ws1/src/package-a/LICENSE +17 -0
  25. pixi_ros-0.1.0/tests/examples/ws1/src/package-a/package.xml +18 -0
  26. pixi_ros-0.1.0/tests/examples/ws1/src/package-b/package-b/__init__.py +0 -0
  27. pixi_ros-0.1.0/tests/examples/ws1/src/package-b/package.xml +20 -0
  28. pixi_ros-0.1.0/tests/examples/ws1/src/package-b/setup.cfg +4 -0
  29. pixi_ros-0.1.0/tests/examples/ws1/src/package-b/setup.py +29 -0
  30. pixi_ros-0.1.0/tests/examples/ws1/src/package-b/test/test_copyright.py +25 -0
  31. pixi_ros-0.1.0/tests/examples/ws1/src/package-b/test/test_flake8.py +25 -0
  32. pixi_ros-0.1.0/tests/examples/ws1/src/package-b/test/test_pep257.py +23 -0
  33. pixi_ros-0.1.0/tests/fixtures/mock_workspace/README.md +41 -0
  34. pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/legacy_pkg/package.xml +23 -0
  35. pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/my_cpp_pkg/CMakeLists.txt +19 -0
  36. pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/my_cpp_pkg/package.xml +27 -0
  37. pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/my_mixed_pkg/package.xml +40 -0
  38. pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/my_python_pkg/package.xml +23 -0
  39. pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/my_python_pkg/setup.py +15 -0
  40. pixi_ros-0.1.0/tests/test_cli.py +32 -0
  41. pixi_ros-0.1.0/tests/test_config.py +41 -0
  42. pixi_ros-0.1.0/tests/test_gateway_availability.py +53 -0
  43. pixi_ros-0.1.0/tests/test_init.py +144 -0
  44. pixi_ros-0.1.0/tests/test_mappings.py +287 -0
  45. pixi_ros-0.1.0/tests/test_package_xml.py +238 -0
  46. pixi_ros-0.1.0/tests/test_utils.py +26 -0
  47. pixi_ros-0.1.0/tests/test_workspace.py +182 -0
@@ -0,0 +1,2 @@
1
+ # SCM syntax highlighting & preventing 3-way merges
2
+ pixi.lock merge=binary linguist-language=YAML linguist-generated=true -diff
@@ -0,0 +1,23 @@
1
+ on:
2
+ push:
3
+ pull_request:
4
+ workflow_dispatch:
5
+
6
+ jobs:
7
+ test:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - name: Checkout repository
11
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
12
+
13
+ - uses: prefix-dev/setup-pixi@82d477f15f3a381dbcc8adc1206ce643fe110fb7 # v0.9.3
14
+
15
+ - name: Format
16
+ run: pixi run format --check
17
+ - name: Lint
18
+ run: pixi run lint
19
+ - name: Test
20
+ run: pixi run test
21
+ - name: Build
22
+ run: pixi build
23
+
@@ -0,0 +1,27 @@
1
+ name: "Publish"
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ # Publish on any tag starting with a `v`, e.g., v0.1.0
7
+ - v*
8
+
9
+ jobs:
10
+ run:
11
+ runs-on: ubuntu-latest
12
+ environment:
13
+ name: pypi
14
+ permissions:
15
+ id-token: write
16
+ contents: read
17
+ steps:
18
+ - name: Checkout
19
+ uses: actions/checkout@v6
20
+ - name: Install uv
21
+ uses: astral-sh/setup-uv@v7
22
+ - name: Install Python 3.13
23
+ run: uv python install 3.13
24
+ - name: Build
25
+ run: uv build
26
+ - name: Publish
27
+ run: uv publish
@@ -0,0 +1,13 @@
1
+ # pixi environments
2
+ .pixi/*
3
+ !.pixi/config.toml
4
+
5
+ # Python
6
+ __pycache__/
7
+
8
+ # ROS
9
+ build/
10
+ devel/
11
+ install/
12
+ log/
13
+ resource/
@@ -0,0 +1,212 @@
1
+ Metadata-Version: 2.4
2
+ Name: pixi-ros
3
+ Version: 0.1.0
4
+ Summary: Pixi extension for ROS package management
5
+ Project-URL: Homepage, https://github.com/ruben-arts/pixi-ros
6
+ Project-URL: Repository, https://github.com/ruben-arts/pixi-ros
7
+ Author-email: Ruben Arts <ruben@prefix.dev>
8
+ Requires-Python: >=3.10
9
+ Requires-Dist: lxml>=5.0.0
10
+ Requires-Dist: pathspec>=0.11.0
11
+ Requires-Dist: py-rattler>=0.6.0
12
+ Requires-Dist: pyyaml>=6.0
13
+ Requires-Dist: rich>=13.0.0
14
+ Requires-Dist: tomlkit>=0.12.0
15
+ Requires-Dist: typer>=0.12.0
16
+ Description-Content-Type: text/markdown
17
+
18
+ # pixi-ros
19
+
20
+ **Bridge your ROS workspace to the modern conda/Pixi ecosystem**
21
+
22
+ pixi-ros helps ROS developers transition from `rosdep` to [Pixi](https://pixi.sh) for package management.
23
+ It automatically reads your ROS workspace's `package.xml` files and generates a `pixi.toml` manifest with all dependencies resolved from conda channels (primarily [robostack](https://robostack.org/)).
24
+
25
+ ## Why pixi-ros?
26
+
27
+ If you're a ROS developer, you're probably familiar with `rosdep` managing dependencies.
28
+ `pixi-ros` gives you access to a more modern package management ecosystem:
29
+
30
+ - **Reproducible environments**: Lock files ensure everyone on your team has identical dependencies
31
+ - **Cross-platform**: Works seamlessly on Linux, macOS, and Windows
32
+ - **Fast and reliable**: Uses rattler (Rust implementation of conda) for speed
33
+ - **No system dependencies**: Everything isolated in project environments
34
+
35
+ ## Quick Start
36
+
37
+ ### Installation
38
+
39
+ Install pixi first if you haven't already:
40
+
41
+ ```bash
42
+ curl -fsSL https://pixi.sh/install.sh | bash
43
+ ```
44
+
45
+ Or follow instructions at https://pixi.sh/latest/installation/
46
+
47
+ Install pixi-ros globally using pixi:
48
+
49
+ ```bash
50
+ pixi global install pixi-ros
51
+ ```
52
+
53
+ ### Initialize Your ROS Workspace
54
+
55
+ Navigate to your ROS workspace and run:
56
+
57
+ ```bash
58
+ pixi-ros init --distro humble
59
+ ```
60
+
61
+ This will:
62
+ 1. Discover all ROS packages in your workspace (by finding `package.xml` files)
63
+ 2. Read dependencies from each `package.xml`
64
+ 3. Map ROS package names to conda packages
65
+ 4. Generate/update `pixi.toml` with proper channels and dependencies
66
+ 5. Check package availability and warn about missing packages
67
+ 6. Create helpful build/test/clean tasks
68
+
69
+ ### Install and Build
70
+
71
+ After initialization, use standard pixi commands:
72
+
73
+ ```bash
74
+ # Install all dependencies
75
+ pixi install
76
+
77
+ # Build your workspace
78
+ pixi run build
79
+
80
+ # Run tests
81
+ pixi run test
82
+
83
+ # Activate environment for direct ROS commands
84
+ pixi shell
85
+ ```
86
+
87
+ ## How It Works
88
+
89
+ ### Dependency Mapping
90
+
91
+ `pixi-ros` reads all dependency types from `package.xml` files.
92
+ It then does a best effort mapping of ROS package names to conda packages.
93
+
94
+ - **ROS packages**: `ros-{distro}-{package}` from robostack channels (e.g., `ros-humble-rclcpp`)
95
+ - **System packages**: Mapped to conda-forge equivalents (e.g., `cmake`, `eigen`)
96
+
97
+ After the mapping, it validates package availability in the configured channels. This starts a connection with `https://prefix.dev` to check if packages exist.
98
+
99
+ ### Example
100
+
101
+ Given a `package.xml` with:
102
+
103
+ ```xml
104
+ <depend>rclcpp</depend>
105
+ <build_depend>ament_cmake</build_depend>
106
+ <exec_depend>std_msgs</exec_depend>
107
+ ```
108
+
109
+ `pixi-ros init --distro humble` generates a `pixi.toml` with:
110
+
111
+ ```toml
112
+ [dependencies]
113
+ ros-humble-ament-cmake = "*"
114
+ ros-humble-rclcpp = "*"
115
+ ros-humble-std-msgs = "*"
116
+ ```
117
+
118
+ ## Supported ROS Distributions
119
+
120
+ - ROS 2 Humble: https://prefix.dev/robostack-humble
121
+ - ROS 2 Iron: https://prefix.dev/robostack-iron
122
+ - ROS 2 Jazzy: https://prefix.dev/robostack-jazzy
123
+ - ROS 2 Rolling: https://prefix.dev/robostack-rolling
124
+
125
+ ## Command Reference
126
+
127
+ ### `pixi-ros init`
128
+
129
+ Initialize or update a ROS workspace's `pixi.toml`.
130
+
131
+ ```bash
132
+ pixi-ros init --distro <ros_distro>
133
+ pixi-ros init
134
+ ```
135
+
136
+ **Options:**
137
+ - `--distro`, `-d`: ROS distribution (optional)
138
+
139
+ **What it does:**
140
+ - Scans workspace for `package.xml` files
141
+ - Reads all dependency types (build, exec, test)
142
+ - Maps ROS dependencies to conda packages
143
+ - Configures robostack channels
144
+ - Checks package availability
145
+ - Creates build tasks using colcon
146
+ - Generates helpful `README_PIXI.md`
147
+
148
+ **Running multiple times:**
149
+ The command is idempotent - you can run it multiple times to update dependencies as your workspace changes.
150
+
151
+ ## Philosophy
152
+
153
+ `pixi-ros` aims to be a quick **gateway drug**. It:
154
+
155
+ - Respects existing ROS conventions (package.xml as source of truth)
156
+ - Uses standard ROS build tools (colcon)
157
+ - Focuses only on dependency management and environment setup
158
+ - Doesn't replace `ros2` CLI or other ROS tooling
159
+ - Should eventually become unnecessary as the ecosystem matures
160
+
161
+ Think of it as a "gateway" to help ROS developers benefit from modern package management while keeping familiar workflows.
162
+
163
+ ## Project Structure
164
+
165
+ After initialization, your workspace will have:
166
+
167
+ ```
168
+ workspace/
169
+ ├── src/ # Your ROS packages
170
+ │ └── my_package/
171
+ │ ├── package.xml # ROS package manifest (source of truth)
172
+ │ └── ...
173
+ ├── pixi.toml # Generated pixi manifest
174
+ ├── pixi.lock # Locked dependencies (commit this!)
175
+ └── README_PIXI.md # Generated usage guide
176
+ ```
177
+
178
+ ## Troubleshooting
179
+
180
+ ### Package Not Found
181
+
182
+ If pixi-ros marks packages as "NOT FOUND":
183
+
184
+ 1. Check if the package exists in robostack: https://prefix.dev/channels/robostack-{distro}
185
+ 2. Check for typos in `package.xml`
186
+ 3. Some packages may have different names - check mapping files
187
+ 4. Consider adding the package to your workspace instead of depending on it
188
+
189
+ ### Different Package Names
190
+
191
+ pixi-ros includes mapping files for system packages (e.g., `cmake` → `cmake`, `eigen` → `eigen`). You can override mappings by creating `pixi-ros/*.yaml` files in your workspace or `~/.pixi-ros/`.
192
+
193
+ ### Platform-Specific Issues
194
+
195
+ Some packages have platform-specific mappings. pixi-ros handles this automatically, but you can test different platforms using the internal API with `platform_override`.
196
+
197
+ ## Contributing
198
+
199
+ Contributions welcome! Feel free to open issues or PRs on GitHub.
200
+
201
+ ## Learn More
202
+
203
+ - **Pixi**: https://pixi.sh
204
+ - **RoboStack**: https://robostack.org/
205
+ - **Conda**: https://docs.conda.io/
206
+ - **ROS 2**: https://docs.ros.org/
207
+
208
+ ## Disclaimer
209
+
210
+ This tool is build with heavy use of AI assistance and is under active development. Please report issues or contribute on GitHub!
211
+
212
+ I (Ruben) hope `pixi-ros` can die ASAP, as all of the workflows this tool provides should ideally be native to Pixi itself. But until then, I hope this initialization tool helps you get started!
@@ -0,0 +1,195 @@
1
+ # pixi-ros
2
+
3
+ **Bridge your ROS workspace to the modern conda/Pixi ecosystem**
4
+
5
+ pixi-ros helps ROS developers transition from `rosdep` to [Pixi](https://pixi.sh) for package management.
6
+ It automatically reads your ROS workspace's `package.xml` files and generates a `pixi.toml` manifest with all dependencies resolved from conda channels (primarily [robostack](https://robostack.org/)).
7
+
8
+ ## Why pixi-ros?
9
+
10
+ If you're a ROS developer, you're probably familiar with `rosdep` managing dependencies.
11
+ `pixi-ros` gives you access to a more modern package management ecosystem:
12
+
13
+ - **Reproducible environments**: Lock files ensure everyone on your team has identical dependencies
14
+ - **Cross-platform**: Works seamlessly on Linux, macOS, and Windows
15
+ - **Fast and reliable**: Uses rattler (Rust implementation of conda) for speed
16
+ - **No system dependencies**: Everything isolated in project environments
17
+
18
+ ## Quick Start
19
+
20
+ ### Installation
21
+
22
+ Install pixi first if you haven't already:
23
+
24
+ ```bash
25
+ curl -fsSL https://pixi.sh/install.sh | bash
26
+ ```
27
+
28
+ Or follow instructions at https://pixi.sh/latest/installation/
29
+
30
+ Install pixi-ros globally using pixi:
31
+
32
+ ```bash
33
+ pixi global install pixi-ros
34
+ ```
35
+
36
+ ### Initialize Your ROS Workspace
37
+
38
+ Navigate to your ROS workspace and run:
39
+
40
+ ```bash
41
+ pixi-ros init --distro humble
42
+ ```
43
+
44
+ This will:
45
+ 1. Discover all ROS packages in your workspace (by finding `package.xml` files)
46
+ 2. Read dependencies from each `package.xml`
47
+ 3. Map ROS package names to conda packages
48
+ 4. Generate/update `pixi.toml` with proper channels and dependencies
49
+ 5. Check package availability and warn about missing packages
50
+ 6. Create helpful build/test/clean tasks
51
+
52
+ ### Install and Build
53
+
54
+ After initialization, use standard pixi commands:
55
+
56
+ ```bash
57
+ # Install all dependencies
58
+ pixi install
59
+
60
+ # Build your workspace
61
+ pixi run build
62
+
63
+ # Run tests
64
+ pixi run test
65
+
66
+ # Activate environment for direct ROS commands
67
+ pixi shell
68
+ ```
69
+
70
+ ## How It Works
71
+
72
+ ### Dependency Mapping
73
+
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.
76
+
77
+ - **ROS packages**: `ros-{distro}-{package}` from robostack channels (e.g., `ros-humble-rclcpp`)
78
+ - **System packages**: Mapped to conda-forge equivalents (e.g., `cmake`, `eigen`)
79
+
80
+ After the mapping, it validates package availability in the configured channels. This starts a connection with `https://prefix.dev` to check if packages exist.
81
+
82
+ ### Example
83
+
84
+ Given a `package.xml` with:
85
+
86
+ ```xml
87
+ <depend>rclcpp</depend>
88
+ <build_depend>ament_cmake</build_depend>
89
+ <exec_depend>std_msgs</exec_depend>
90
+ ```
91
+
92
+ `pixi-ros init --distro humble` generates a `pixi.toml` with:
93
+
94
+ ```toml
95
+ [dependencies]
96
+ ros-humble-ament-cmake = "*"
97
+ ros-humble-rclcpp = "*"
98
+ ros-humble-std-msgs = "*"
99
+ ```
100
+
101
+ ## Supported ROS Distributions
102
+
103
+ - ROS 2 Humble: https://prefix.dev/robostack-humble
104
+ - ROS 2 Iron: https://prefix.dev/robostack-iron
105
+ - ROS 2 Jazzy: https://prefix.dev/robostack-jazzy
106
+ - ROS 2 Rolling: https://prefix.dev/robostack-rolling
107
+
108
+ ## Command Reference
109
+
110
+ ### `pixi-ros init`
111
+
112
+ Initialize or update a ROS workspace's `pixi.toml`.
113
+
114
+ ```bash
115
+ pixi-ros init --distro <ros_distro>
116
+ pixi-ros init
117
+ ```
118
+
119
+ **Options:**
120
+ - `--distro`, `-d`: ROS distribution (optional)
121
+
122
+ **What it does:**
123
+ - Scans workspace for `package.xml` files
124
+ - Reads all dependency types (build, exec, test)
125
+ - Maps ROS dependencies to conda packages
126
+ - Configures robostack channels
127
+ - Checks package availability
128
+ - Creates build tasks using colcon
129
+ - Generates helpful `README_PIXI.md`
130
+
131
+ **Running multiple times:**
132
+ The command is idempotent - you can run it multiple times to update dependencies as your workspace changes.
133
+
134
+ ## Philosophy
135
+
136
+ `pixi-ros` aims to be a quick **gateway drug**. It:
137
+
138
+ - Respects existing ROS conventions (package.xml as source of truth)
139
+ - Uses standard ROS build tools (colcon)
140
+ - Focuses only on dependency management and environment setup
141
+ - Doesn't replace `ros2` CLI or other ROS tooling
142
+ - Should eventually become unnecessary as the ecosystem matures
143
+
144
+ Think of it as a "gateway" to help ROS developers benefit from modern package management while keeping familiar workflows.
145
+
146
+ ## Project Structure
147
+
148
+ After initialization, your workspace will have:
149
+
150
+ ```
151
+ workspace/
152
+ ├── src/ # Your ROS packages
153
+ │ └── my_package/
154
+ │ ├── package.xml # ROS package manifest (source of truth)
155
+ │ └── ...
156
+ ├── pixi.toml # Generated pixi manifest
157
+ ├── pixi.lock # Locked dependencies (commit this!)
158
+ └── README_PIXI.md # Generated usage guide
159
+ ```
160
+
161
+ ## Troubleshooting
162
+
163
+ ### Package Not Found
164
+
165
+ If pixi-ros marks packages as "NOT FOUND":
166
+
167
+ 1. Check if the package exists in robostack: https://prefix.dev/channels/robostack-{distro}
168
+ 2. Check for typos in `package.xml`
169
+ 3. Some packages may have different names - check mapping files
170
+ 4. Consider adding the package to your workspace instead of depending on it
171
+
172
+ ### Different Package Names
173
+
174
+ pixi-ros includes mapping files for system packages (e.g., `cmake` → `cmake`, `eigen` → `eigen`). You can override mappings by creating `pixi-ros/*.yaml` files in your workspace or `~/.pixi-ros/`.
175
+
176
+ ### Platform-Specific Issues
177
+
178
+ Some packages have platform-specific mappings. pixi-ros handles this automatically, but you can test different platforms using the internal API with `platform_override`.
179
+
180
+ ## Contributing
181
+
182
+ Contributions welcome! Feel free to open issues or PRs on GitHub.
183
+
184
+ ## Learn More
185
+
186
+ - **Pixi**: https://pixi.sh
187
+ - **RoboStack**: https://robostack.org/
188
+ - **Conda**: https://docs.conda.io/
189
+ - **ROS 2**: https://docs.ros.org/
190
+
191
+ ## Disclaimer
192
+
193
+ This tool is build with heavy use of AI assistance and is under active development. Please report issues or contribute on GitHub!
194
+
195
+ I (Ruben) hope `pixi-ros` can die ASAP, as all of the workflows this tool provides should ideally be native to Pixi itself. But until then, I hope this initialization tool helps you get started!