|
| 1 | +--- |
| 2 | +name: robostack-versions |
| 3 | +description: Update ROS package versions (rosdistro snapshot) and conda-forge pins for RoboStack distributions, bump build numbers and the distro mutex, plan full rebuilds, and find or rebuild packages built against outdated pins. Use for version updates, pinning/migration changes, pin conflicts, or full rebuilds. |
| 4 | +--- |
| 5 | + |
| 6 | +# Versions, pins and rebuilds |
| 7 | + |
| 8 | +robostack-bot does the routine part: `update-rosdistro-snapshot` (daily, when a new |
| 9 | +rosdistro sync is tagged) and |
| 10 | +`update-conda-forge-pinning` (weekly, or on request) open PRs that already contain the |
| 11 | +bumps below. Do it by hand when the bot fails or something extra is needed. |
| 12 | + |
| 13 | +## What is pinned where |
| 14 | + |
| 15 | +- **ROS package versions**: `distros/<d>/rosdistro_snapshot.yaml`, plus |
| 16 | + `rosdistro_additional_recipes.yaml` for packages outside rosdistro. |
| 17 | +- **conda-forge pins**: |
| 18 | + - `shared/pinning/conda_forge.yaml` holds the pinning version and migrations for |
| 19 | + every distribution that doesn't set its own. |
| 20 | + - `shared/pinning/overrides.yaml` holds local pins. |
| 21 | + - `distros/<d>/distro.yaml` can set `conda_forge_pinning_version` together with |
| 22 | + `conda_forge_migrations` (its own pinning, e.g. until its next full rebuild), and |
| 23 | + `pinning_overrides` (replace shared pins by name). |
| 24 | + - `pixi run rs <d> render-pinning` writes the committed |
| 25 | + `distros/<d>/conda_build_config.yaml`. |
| 26 | +- **The mutex** (`mutex_package` in `distros/<d>/vinca.yaml`): `ros2-distro-mutex` |
| 27 | + with `upper_bound: x.x`. Packages built with mutex 0.11 can't be installed with |
| 28 | + 0.10 builds. Its `run_constraints` pin the ABI-relevant libraries for users' |
| 29 | + environments and must agree with the rendered pins. |
| 30 | + |
| 31 | +## Update the snapshot |
| 32 | + |
| 33 | +```bash |
| 34 | +pixi run rs rosdistro-syncs # which distributions have a new sync (what the bot checks daily) |
| 35 | +pixi run rs <d> update-snapshot # = bot command: latest sync, version bumps, rebuild bump |
| 36 | +# or only the file, for a given sync tag (any ros/rosdistro ref) or rosdistro master: |
| 37 | +pixi run rs <d> create-snapshot --rosdistro-ref <d>/2026-10-05 |
| 38 | +pixi run rs <d> create-snapshot |
| 39 | +``` |
| 40 | + |
| 41 | +- The ROS release team tags every sync from ros-testing to the main repositories in |
| 42 | + ros/rosdistro (`<distro>/<YYYY-MM-DD>`, announced on Discourse as "New Packages for |
| 43 | + ..."). Snapshotting the tag ships what users get from the official repositories; |
| 44 | + rosdistro master also contains releases that are still only in ros-testing. |
| 45 | +- `distros/<d>/distro.yaml` records the sync as `rosdistro_sync`. `rosdistro_sync: |
| 46 | + manual` (rolling, which isn't tagged regularly) uses rosdistro master instead and |
| 47 | + isn't checked daily. |
| 48 | +- `update-snapshot` also performs the rebuild bump (next section). |
| 49 | + |
| 50 | +## Update the conda-forge pinning |
| 51 | + |
| 52 | +```bash |
| 53 | +pixi run rs update-pinning # = bot command, for all distributions that follow shared/ |
| 54 | +pixi run rs <d> render-pinning # after editing shared/pinning or distro.yaml |
| 55 | +pixi run rs <d> check-deps # solve all non-ROS deps + mutex constraints, nothing built |
| 56 | +``` |
| 57 | + |
| 58 | +`check-deps` reports: |
| 59 | +- `PIN MISMATCH`: a mutex `run_constraints` entry contradicts the rendered pin. Fix |
| 60 | + `vinca.yaml` or the pinning; never `conda_build_config.yaml`. |
| 61 | +- Per conflicting package: the recipes that need it, the clashing pin, the solver |
| 62 | + explanation and the conda-forge migration status. "no migration" means the feedstock |
| 63 | + only needs a rebuild upstream. |
| 64 | + |
| 65 | +Exit code 1 means something conflicts. Status of migrations: |
| 66 | +https://conda-forge.org/status/. |
| 67 | + |
| 68 | +## Rebuild bump (full rebuild) |
| 69 | + |
| 70 | +When the snapshot or the pins change, everything is rebuilt: |
| 71 | + |
| 72 | +1. `build_number` in `distros/<d>/vinca.yaml` = the highest build number of the |
| 73 | + distribution's released packages + 1, so every package gets a new build. |
| 74 | +2. Mutex minor version + 1, e.g. `0.10.0` -> `0.11.0`. Nothing else hard-codes the |
| 75 | + mutex version. |
| 76 | +3. Remove all per-package `build_number` entries in `distros/<d>/pkg_additional_info.yaml`. |
| 77 | +4. Update mutex `run_constraints` to the new pins, then run `check-deps`. |
| 78 | +5. `pixi run rs check`. |
| 79 | + |
| 80 | +The bot does 1–4. It only moves constraints of the form `<pkg> <version>.*`; ranges |
| 81 | +and other constraints are left for you to check. |
| 82 | + |
| 83 | +In the PR, CI uses its cache unless told otherwise. A full rebuild PR sets |
| 84 | +`full_rebuild: true` in `distros/<d>/ci.yaml` (reset after merging). |
| 85 | + |
| 86 | +## Rebuild a few packages |
| 87 | + |
| 88 | +- Published already: `<ros_pkg>: {build_number: <global + 1>}` in |
| 89 | + `distros/<d>/pkg_additional_info.yaml`. Shared settings stay in |
| 90 | + `shared/pkg_additional_info.yaml`; the distribution's keys win. |
| 91 | +- Only in the current PR: `evict_cache` in `distros/<d>/ci.yaml`. |
| 92 | + |
| 93 | +## Packages built against outdated pins |
| 94 | + |
| 95 | +```bash |
| 96 | +pixi run rs <d> find-stale # = bot find-stale-packages |
| 97 | +pixi run rs <d> check-deps --stale # local artifacts |
| 98 | +pixi run rs <d> check-deps --stale --mutex-only # only mutex violations |
| 99 | +pixi run rs <d> check-deps --stale --repodata https://conda.anaconda.org/<channel> |
| 100 | +pixi run rs <d> check-deps --stale --delete # delete stale local artifacts |
| 101 | +``` |
| 102 | + |
| 103 | +For published stale builds, the report prints the `pkg_additional_info.yaml` |
| 104 | +build-number snippet, a `mutex_package: build_number:` bump (re-publishes the mutex |
| 105 | +with new constraints without changing its version), and the `anaconda remove` |
| 106 | +commands for the old files. |
| 107 | + |
| 108 | +## Bump vinca or rattler-build |
| 109 | + |
| 110 | +Both are pinned once for all distributions in `pixi.toml` (vinca as a git revision). |
| 111 | +After a bump, run `pixi install`, `pixi run rs check`, and |
| 112 | +`pixi run rs <d> generate-recipes` for a distribution or two, and compare the recipe |
| 113 | +sets before and after. |
0 commit comments