Skip to content
Open
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
5 changes: 5 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ to read without Claude):
into `distros/<d>/`.
- Run everything per distribution with `pixi run rs <distro> <task>`, from the
repository root. Package names are `ros2-<pkg>` (dashes), e.g. `ros2-rsl`.
- lyrical builds packages with Python content for Python 3.12-3.14 and the others once
(`conditional_python_dependency`, see README "Python versions"). A built-once package
that fails its `package_contents` test ships Python after all: add `python` to its
`add_host` in `patch/dependencies.yaml`.
- Never edit `conda_build_config.yaml` by hand: change `shared/pinning/` or the
distribution's `distro.yaml`, then `pixi run rs <distro> render-pinning` (CI checks it).
- A change outside `distros/` rebuilds every distribution in CI; keep such PRs focused.
Expand Down Expand Up @@ -51,6 +55,7 @@ pixi run rs <d> build --continue-on-failure # everything missing on the chan
pixi run rs <d> check-patches [--recipe ros2-<pkg>]
pixi run rs <d> check-deps # pin conflicts, before building anything
pixi run rs <d> gap-report # recipes without artifacts and vice versa
pixi run rs <d> python-audit [--elf] # per-Python vs built-once recipes against the published packages
pixi run rs add-package <pkg>... [<d>...] # select packages (as the bot does)
pixi run rs check # sanity checks (CI)
```
Expand Down
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,16 @@ pixi run rs check # sanity checks (also run in CI)
of a distribution uses `full_rebuild: true` there. A new build number goes into its
`pkg_additional_info.yaml` (one package) or `vinca.yaml` (everything).

**Python versions:** a distribution's `pinning_overrides` can list several Pythons, as
lyrical does for 3.12-3.14. With `conditional_python_dependency: true` in its
`vinca.yaml`, only packages with Python content (Python modules, rosidl Python bindings,
extensions) get python in host/run and are built once per Python; the others are built
once, without a `python_abi` dependency, and fail their build if they ship
`site-packages` content or a CPython extension anyway. When vinca's guess from
`package.xml` is wrong, add `python` to the package's `add_host` (or `remove_host`) in
`patch/dependencies.yaml`. `pixi run rs <distro> python-audit [--elf]` compares the
guess with the published packages and lists the misses.

**Building only some distributions in a PR:** a PR builds the distributions it changes,
and all of them as soon as it touches anything outside `distros/<distro>/`. To limit
that (e.g. a humble rebuild that also changes `shared/` or `tools/`), add the label
Expand Down
11 changes: 7 additions & 4 deletions distros/lyrical/conda_build_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1000,23 +1000,26 @@ pythia8:
python:
# conda-forge supports only 3.14+ for win-arm64 and linux-riscv64
# part of a zip_keys: python, is_python_min
- 3.12.* *_cpython # [not ((win and arm64) or riscv64)]
- 3.13.* *_cp313 # [not ((win and arm64) or riscv64)]
- 3.14.* *_cp314
- 3.12.* *_cpython
python_impl:
- cpython

# ros-lyrical specific (distros/lyrical/distro.yaml)
python_min:
# minimum supported python version per CFEP-25
# bump to next minor version when we drop python versions
- '3.11' # [not ((win and arm64) or riscv64)]
- '3.12' # [not ((win and arm64) or riscv64)]
- '3.14' # [(win and arm64) or riscv64]
is_freethreading:
- false
is_python_min:
# part of a zip_keys: python, is_python_min
- false
- false
- true # [not ((win and arm64) or riscv64)]
- false # [not ((win and arm64) or riscv64)]
- false # [not ((win and arm64) or riscv64)]
- true # [(win and arm64) or riscv64]
is_abi3:
- true
pytorch:
Expand Down
19 changes: 15 additions & 4 deletions distros/lyrical/distro.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,21 @@ upload_to: [prefix, anaconda]
read_from: prefix
rosdistro_sync: lyrical/2026-10-05
pinning_overrides:
# build every python package for 3.14 (the shared default) and 3.12;
# is_python_min is zipped with python, so it needs one entry per version
python: [3.14.* *_cp314, 3.12.* *_cpython]
is_python_min: [false, false]
# Lyrical supports Python 3.12-3.14 (REP 2000). Packages with Python content are
# built for each (vinca.yaml: conditional_python_dependency), the others once.
# conda-forge has only 3.14+ for win-arm64 and linux-riscv64, so those get one variant.
python:
- 3.12.* *_cpython # [not ((win and arm64) or riscv64)]
- 3.13.* *_cp313 # [not ((win and arm64) or riscv64)]
- 3.14.* *_cp314
is_python_min:
- true # [not ((win and arm64) or riscv64)]
- false # [not ((win and arm64) or riscv64)]
- false # [not ((win and arm64) or riscv64)]
- true # [(win and arm64) or riscv64]
python_min:
- '3.12' # [not ((win and arm64) or riscv64)]
- '3.14' # [(win and arm64) or riscv64]
# every pyqt6 6.11.0 build on conda-forge needs qt6-main <=6.11.2, but the shared
# `6.11` pin resolves to 6.11.3, whose run export (>=6.11.3) rules pyqt6 out: the
# rqt packages then can't be installed with python_qt_binding. The published
Expand Down
7 changes: 6 additions & 1 deletion distros/lyrical/vinca.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ ros_distro: lyrical
patch_dir: patch
rosdistro_snapshot: rosdistro_snapshot.yaml
rosdistro_additional_recipes: rosdistro_additional_recipes.yaml
build_number: 30
build_number: 31
# Only packages with Python content get python in host/run, and with it the Python
# variants of distro.yaml (cp312-cp314); the others are built once, without a
# python_abi dependency. Override the classification per package with python in
# add_host (or remove_host) in patch/dependencies.yaml.
conditional_python_dependency: true

mutex_package:
version: 0.22.0
Loading
Loading