From c2e55a632dc4767b127dd8deb1fc4d5efe25d3d5 Mon Sep 17 00:00:00 2001 From: Tobias Fischer Date: Thu, 22 Oct 2026 15:42:48 +1000 Subject: [PATCH] fix: strip the ros2- prefix from GHA job names too, and list each package once With package_name_mode: both a batch mixes ros2- recipes and their ros-- compatibility recipes. Only the latter lost their prefix, so job names read e.g. "ros2-rosidlcpp rosidlcpp-typesupport-c ..." and listed a package twice when both recipes shared a batch. Strip either exact prefix (still not the first dash-separated segments, see #141) and drop duplicates, so every job lists plain package names. Co-Authored-By: Claude Opus 5.5 --- vinca/generate_gha.py | 12 ++++++++---- vinca/test_generate_gha.py | 16 +++++++++------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/vinca/generate_gha.py b/vinca/generate_gha.py index 6db5927..27f553a 100644 --- a/vinca/generate_gha.py +++ b/vinca/generate_gha.py @@ -159,12 +159,16 @@ def dump_for_gha(doc, f): def get_stage_name(batch): - legacy_prefix = f"ros-{config.ros_distro}-" + """Job name: the batch's packages without their ros-- or ros2- prefix, each + once (with package_name_mode: both a package has a recipe under either name).""" + prefixes = (f"ros-{config.ros_distro}-", "ros2-") stage_name = [] for pkg in batch: - if pkg.startswith(legacy_prefix): - stage_name.append(pkg[len(legacy_prefix) :]) - else: + for prefix in prefixes: + if pkg.startswith(prefix): + pkg = pkg[len(prefix) :] + break + if pkg not in stage_name: stage_name.append(pkg) return " ".join(stage_name) diff --git a/vinca/test_generate_gha.py b/vinca/test_generate_gha.py index 1d4cb1f..7226414 100644 --- a/vinca/test_generate_gha.py +++ b/vinca/test_generate_gha.py @@ -27,19 +27,21 @@ def rolling_distro(): [ ("ros-rolling-rclcpp", "rclcpp"), ("ros-rolling-ament-package", "ament-package"), - ("ros2-rclcpp", "ros2-rclcpp"), - ("ros2-ament-package", "ros2-ament-package"), - ("ros2-distro-mutex", "ros2-distro-mutex"), + ("ros2-rclcpp", "rclcpp"), + ("ros2-ament-package", "ament-package"), + ("ros2-distro-mutex", "distro-mutex"), + ("ros2-ros2-control", "ros2-control"), + ("ros2cli", "ros2cli"), ("ros-humble-rclcpp", "ros-humble-rclcpp"), ], ) -def test_get_stage_name_strips_only_the_legacy_prefix(package, expected): +def test_get_stage_name_strips_the_package_prefix(package, expected): assert get_stage_name([package]) == expected -def test_get_stage_name_joins_a_batch(): - batch = ["ros-rolling-rclcpp", "ros2-ament-package"] - assert get_stage_name(batch) == "rclcpp ros2-ament-package" +def test_get_stage_name_joins_a_batch_and_lists_each_package_once(): + batch = ["ros2-rclcpp", "ros-rolling-rclcpp", "ros2-ament-package"] + assert get_stage_name(batch) == "rclcpp ament-package" def test_unix_pipeline_sets_up_pixi(tmp_path):