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
24 changes: 2 additions & 22 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,14 @@ name: ci
on:
pull_request:
push:
branches: [main, humble, jazzy, kilted]
branches: [main]

jobs:
setup:
runs-on: ubuntu-latest
outputs:
distros: ${{ steps.set-distros.outputs.distros }}
steps:
- id: set-distros
run: |
# For PRs, use the target branch; for pushes, use the branch name
BRANCH="${{ github.base_ref || github.ref_name }}"
if [[ "$BRANCH" == "humble" ]]; then
echo 'distros=["humble"]' >> "$GITHUB_OUTPUT"
elif [[ "$BRANCH" == "jazzy" ]]; then
echo 'distros=["jazzy"]' >> "$GITHUB_OUTPUT"
elif [[ "$BRANCH" == "kilted" ]]; then
echo 'distros=["kilted"]' >> "$GITHUB_OUTPUT"
else
echo 'distros=["jazzy","kilted"]' >> "$GITHUB_OUTPUT"
fi

build-and-test:
needs: setup
runs-on: ubuntu-latest
strategy:
matrix:
ros_distro: ${{ fromJson(needs.setup.outputs.distros) }}
ros_distro: [humble, jazzy, kilted]
fail-fast: false
name: build (${{ matrix.ros_distro }})
steps:
Expand Down
22 changes: 6 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1586,27 +1586,17 @@ All pull requests are checked for DCO sign-off via CI. Commits without a `Signed

### Branching Strategy

Development happens on `main`. Each supported ROS distro has a dedicated branch (e.g., `humble`, `jazzy`) that is **continuously rebased** onto `main`.
All supported ROS distros build from a single `main` branch. There are no per-distro branches. Distro differences are expressed inline in the code (C++ `#if` on rclcpp version macros, Python `try/except ImportError`, CMake version checks, `package.xml` format-3 `condition` attributes) and distro support is exercised as a CI matrix over `{humble, jazzy, kilted}`.

```
main: A --- B --- C --- D
\
humble: D --- H1 --- H2 (distro-specific patches)
jazzy: D --- J1 (distro-specific patches)
```

**How it works:**
Releases are ordinary tags on `main` (e.g. `v0.4.0`), consumed by bloom and conda as a matrix over distros from the same tag.

- All new features and bug fixes are developed against `main` via pull requests.
- Distro branches carry a small number of distro-specific patches (e.g., API compatibility shims, version pins) as commits on top of `main`.
- After `main` advances, distro branches are rebased onto it, keeping the patches at the tip.
- Distro branches are **force-pushed** after each rebase.
For the full rationale, design, and migration notes, see [`docs/branching-and-releases.md`](docs/branching-and-releases.md).

**Guidelines for contributors:**

- For general features and fixes, base your branch on `main` and open your PR against `main`.
- For distro-specific fixes, base your branch on the target distro branch and open your PR directly against it. Distro PRs are **squash-merged** to keep the patch stack clean for rebasing.
- Do not merge distro branches into `main` or vice versa — the relationship is always rebase, never merge.
- Base your branch on `main` and open your PR against `main`.
- PR CI runs the build+test pipeline per distro. `jazzy` and `kilted` are required checks; `humble` currently runs non-blocking while we work through its remaining failures.
- If your change needs a distro-specific accommodation, add it inline at the point of difference rather than in a separate branch.

## License

Expand Down
Loading