Skip to content

[MAJOR] Add optional ROS 2 overlay and release-safe template tooling - #27

Merged
PeterCalifano merged 30 commits into
mainfrom
feature/ros2-overlay
Jul 19, 2026
Merged

[MAJOR] Add optional ROS 2 overlay and release-safe template tooling#27
PeterCalifano merged 30 commits into
mainfrom
feature/ros2-overlay

Conversation

@PeterCalifano

@PeterCalifano PeterCalifano commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Summary

Add an optional ROS 2 Jazzy overlay while preserving the existing C++-first library workflow. The change includes reusable rollout and tailoring tooling, centralized ROS package metadata synchronization, canonical CPack source releases, and CI/documentation contracts covering both the template and derived projects.

Main Changes

  • Add the optional four-package ROS 2 overlay, including interfaces, conversion helpers, lifecycle component, standalone/composed launch files, configuration, and integration tests.
  • Add reusable overlay rollout, atomic permission-preserving tailoring, and structured project/version metadata synchronization for ROS manifests.
  • Establish CPack TGZ as the standard source release and harden native, ROS, release-tag, documentation, and derived-project CI contracts.
  • c59c88a: Remove spdlog and implement custom minimal logger.
  • Replace all fragile text-matching tests with functional tests.

Testing / Validation

  • Native template build and CTest: 27/27 passed.
  • CPU ROS 2 build and tests: 10/10 passed.
  • Standalone CUDA + OptiX build and tests: 31/31 passed.
  • ROS 2 CUDA + OptiX build and tests: 10/10 passed.
  • Default and --remove-ros2 tailoring builds passed.
  • CPack source archives were validated after extraction outside Git.
  • ROS Jazzy container rehearsals passed for active-template, tailored-generic, and downstream testfield modes.
  • Shellcheck, strict mypy, workflow/XML parsing, documentation checks

Notes For Reviewers

  • The ROS 2 overlay is optional. build_lib.sh remains the primary C++ library entry point and does not require ROS.
  • Automated release-artifact upload, cache redesign, artifact transfer, and runner-topology upgrades are deferred to v2.0.0.

- Add colcon shim, interfaces, lifecycle bridge, and standalone and composed launch paths.

- Add ROS build and package-version synchronization helpers while preserving the ROS-free library build.
- Describe the overlay architecture, lifecycle behavior, and source-adjacent bridge boundary.

- Document additive rollout, ROS-valid package prefixes, reversible tailoring, and hermetic dependency handling.

- Add removable agent guidance and record the completed implementation plan.
- Register ROS-free CMake and pytest contracts for overlay structure, rollout, lifecycle launch, documentation, and version synchronization.

- Add Jazzy overlay build and rollout dogfood CI with full-depth checkout and owned path filters.

- Keep copied workflows operational when template-only checks or rollout helpers are absent, and canonicalize documentation verifier paths.
- Add export root project metadata through standard CMake fields and CPack.

- Implement synchronization of  ROS manifests without changing package identity.

- Guard derived-project rollout and CI compatibility.
- Change CMAKE_SOURCE_DIR to PROJECT_SOURCE_DIR when determining src/ includes location

- Update ros 2 overlay link setup removing PRIVATE link to project src

- Add CI step to verify installation (template project)
- Change workflows files to explicitly verify template implementation instead of being used by tailored projects

- Add tpl files (templates) for tailoring

- Update documentation and tailoring helpers
- Separate ordinary CUDA sources from ptx src files (e.g., OptiX) when globbing to fetch src files

- Add tentative automatic resolution of installed OptiX headers for cmake installed library.

- Verify CUDA and OptiX compile and install contracts.

- Update documentation and tests for template
@PeterCalifano PeterCalifano self-assigned this Jul 18, 2026
@PeterCalifano PeterCalifano added the enhancement New feature or request label Jul 18, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5a9ff3a268

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/build_ros2_overlay.yml

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ba404e990c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/build_linux.yml
- Implement logger class with colors and tags support (log levels enumeration)

- Keep logger dependent on standard library only

- Update tests and consumers

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cf902dc5fc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tests/cmake/VerifyTemplateProjectRos2Overlay.cmake Outdated
- Deprecate some cmake tests

- Add generate_version.sh to CI paths

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b6ecb87402

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread generate_version.sh

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

if command -v git >/dev/null 2>&1 && git -C "$SCRIPT_DIR" rev-parse --git-dir >/dev/null 2>&1; then
git_describe=$(git -C "$SCRIPT_DIR" describe --tags --long --dirty --always 2>/dev/null || true)

P2 Badge Bound Git discovery to the project root

When this script is run from a CPack/source archive that has no own .git directory but is unpacked anywhere inside another Git worktree, git -C "$SCRIPT_DIR" discovers the parent repository and the script prefers that unrelated tag over the archive's VERSION; with --sync-ros2 this can rewrite the ROS manifests to the parent project's version. Require the discovered Git top level to be this project root, or cap discovery with GIT_CEILING_DIRECTORIES, before taking the Git version path so no-Git release archives remain self-contained.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 74d902cb51

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

* messages.
*/
explicit CLogger(std::string charComponentName,
ELogLevel enumLevel = ELogLevel::Error,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make the logger default match the documented examples

The no-argument logger used by src/bin/example_program.cpp and the new logging guide relies only on setLevelFromEnvironment(). When TEMPLATE_PROJECT_LOG_LEVEL is unset, this default keeps the threshold at Error, so the info(...) calls in the example program and placeholder_fcn() are suppressed; running the example produces no output even though doc/logging.md says the default emits the INFO line. Either default to Info or update the examples/docs to set an explicit level.

Useful? React with 👍 / 👎.

@PeterCalifano
PeterCalifano merged commit 597f1bb into main Jul 19, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant