chore: adopt standard ROS 2 build-farm best practices#68
Conversation
8a91a40 to
17ced9c
Compare
|
@tfoote FYI |
7bd1a0a to
309284f
Compare
|
Thanks for the PR @TSC21 ! while you fix the CI failure, could you also add ROS Lyrical to the target list please? |
100% |
|
Hey @mrpollo @beniaminopozzan! The release automation is all wired up here, but it needs a couple of one-time things from a maintainer before it can actually push to the build farm:
@mrpollo, since you're the Dronecode maintainer you're probably the right person to run the seeding and add the secrets - happy to hand you the exact commands per distro. More details in |
ad91cdb to
74b13d5
Compare
|
@mrpollo @beniaminopozzan this should be good to merge. Just note my comment above. Thank you! |
beniaminopozzan
left a comment
There was a problem hiding this comment.
Thanks @TSC21 !
I have a couple of comments on supported ROS version (Lyrical in particular) and che package build script.
Also, github action are flagging the usage of actions with node.js 20:
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, hendrikmuhs/ccache-action@v1, Wandalen/wretry.action@v3.8.0_js_action. Actions will be forced to run with Node.js 24 by default starting June 16th, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
Thanks for the thorough review @beniaminopozzan! Went through all of it:
All pushed, let me know what you think! |
- package.xml: version on the PX4 release line (1.17.0), url tags, SPDX BSD-3-Clause, ament_lint test deps, format-3 element order, the active maintainers, and drop the unused ros_environment dependency. - CMakeLists.txt: require CMake 3.8, default to C++17, find rosidl_default_generators before the interface deps (needed by newer rosidl), and enable the ament linters under BUILD_TESTING (skipping copyright, as the generated definitions carry no headers). Signed-off-by: TSC21 <n.marques21@hotmail.com>
… files CHANGELOG.rst in catkin_pkg/bloom format (v1.13.0 - v1.17.0), a REP-2004 quality declaration, code of conduct, security policy, GitHub issue forms, PR template and CODEOWNERS, plus a README following the standard ROS 2 interface-package layout with px4_msgs specifics, the corrected PX4 / ROS 2 / Ubuntu compatibility matrix, and status badges. Signed-off-by: TSC21 <n.marques21@hotmail.com>
Test main on every maintained ROS 2 distribution: Ubuntu (Humble, Jazzy, Kilted, Rolling) on native runners with ros-tooling/setup-ros + action-ros-ci, Lyrical in the ros:lyrical container (no Ubuntu 26.04 runner yet), Windows (Jazzy) and macOS (Jazzy, Apple Silicon + Intel) via RoboStack. setup-ros/action-ros-ci are retried and px4_msgs's exact deps are installed by name (no ros-desktop) to absorb transient/incomplete installs and keep it lean. Cache the pre-commit hooks and ccache the message compilation (plain ccache, not the masquerade variant that breaks CMake's compiler check). Add a pre-commit config (whitespace, shebangs, xml/yaml/json, shellcheck, codespell, markdownlint, Actions/Dependabot schema, and a catkin_pkg package.xml gate) and Dependabot. JS actions on Node 24 where a release exists. Signed-off-by: TSC21 <n.marques21@hotmail.com>
Containerized Debian-packaging flow (originally from #65): a builder Dockerfile parametrized by ROS_DISTRO (with a compiler for the typesupport build), an in-container bloom-generate rosdebian script that skips tests while packaging, and a host helper that emits *.deb files to ./out. Signed-off-by: TSC21 <n.marques21@hotmail.com>
Publish a GitHub release from upstream PX4 version bumps, build and attach .deb packages for every supported distro (incl. Lyrical) on amd64/arm64, and open the ros/rosdistro release PR via bloom against PX4/px4_msgs-release. Release notes and CHANGELOG.rst are generated from the message/service diff. Signed-off-by: TSC21 <n.marques21@hotmail.com>
9aa47b9 to
73761c9
Compare
beniaminopozzan
left a comment
There was a problem hiding this comment.
build dep works now, thanks!
Regarding the future changes (as kilted build is failing) could you not force-push them please? It makes harder to track the changes between reviews, thank 🙏🏻
73761c9 to
dea5a2b
Compare
Yes, but in this case this is just flaky stuff happening in CI, not really something worth reviewing. The purpose of the force push is to keep the commit history clean. |
|
@beniaminopozzan this should be ready to go now |
beniaminopozzan
left a comment
There was a problem hiding this comment.
Amazing, thanks @TSC21
Description
Brings
px4_msgsup to the standard practices expected of ROS 2 packages on the build farm, and continues the Debian packaging work from #65 (cherry-picked, with @mrpollo's authorship preserved). No auto-generated*.msg/*.srvfiles are touched. History is kept to a small set of logical commits.Packaging & build
package.xml: version1.17.0(matches the PX4 release line /v1.17.0tag, was a stale2.0.1),urltags, SPDXBSD-3-Clause,ament_lint_autotest dep, element order fixed to the package-format-3 schema, active maintainers listed, and the unusedros_environmentdependency dropped (it doesn't resolve on newer distros).CMakeLists.txt: CMake 3.8, C++17,rosidl_default_generatorsfound before the interface deps (required by newer rosidl on Rolling/Kilted), andament_lint_autoenabled underBUILD_TESTING(copyright linter skipped — generated definitions carry no headers).Build-farm requirements
CHANGELOG.rstin the catkin_pkg/bloom RST format, tracking the PX4 release line.scripts/generate_changelog.sh— regeneratesCHANGELOG.rstfrom the tag history (dates from tags, contributors from git authors, summary from the msg/srv diff;--check/--in-place).scripts/generate_release_notes.sh— per-release notes from the message/service diff (added/removed/changed with field-level detail); wired into the release workflow.QUALITY_DECLARATION.md(REP-2004, Quality Level 3).Community health
CODE_OF_CONDUCT.md,SECURITY.md, GitHub issue forms + PR template,CODEOWNERS; refreshedREADME.mdandCONTRIBUTING.md.Debian packaging (continued from #65)
ROS_DISTRO,bloom-generate rosdebian+rosdep install, dropped the unneededrmw_zenoh_cppdep, CI-friendly (no interactive-it).Package (.deb)workflow builds.debs for every supported distro onamd64+arm64and attaches them to releases.Release automation (full pipeline)
Create GitHub release: publishes a release from upstream PX4 version bumps (vX.Y.Ztag orrelease/**bump), with notes from the message diff.Package (.deb)andRelease to rosdistro (bloom)(opens theros/rosdistroPR viabloom-release).BLOOM_GITHUB_TOKEN/RELEASE_TOKENsecrets) is documented inCONTRIBUTING.md; workflows no-op gracefully until configured.CI matrix
Standard ROS build-farm tooling (
ros-tooling/setup-ros+action-ros-ci), off the EOL Foxy/Focal jobs:setup-ros/action-ros-ciare wrapped with retries (3 attempts) plus an apt-lock prep step, so transient infra failures (ros-apt-source GitHub-API 404s, apt mirror hiccups, randomly incomplete installs) self-heal instead of needing manual re-runs.wretryinjects the GitHub context as an env var that exceeds the Windows length limit and breakssetup-ros. Humble/Rolling aren't built on Windows (their binaries need Python 3.8/3.12, incompatible with the 3.11 ros-tooling requires).ament_xmllintis skipped there (conda-forge libxml2 has no HTTP support to fetch the schema; it still runs on Ubuntu).Linting (pre-commit)
A
pre-commitjob +.pre-commit-config.yamlcovering: whitespace/EOL hygiene, shebang & executable-bit checks, XML/YAML/JSON syntax, GitHub Actions + Dependabot schema validation,shellcheck,codespell,markdownlint, and a build-farm gate that validatespackage.xmlwithcatkin_pkg(the parser bloom uses) so a manifest that would fail to release is caught locally.Related work
v1.15.0…v1.17.0were created (previously only tags existed), each with a detailed message-definition changelog.Type of change
Checklist
*.msg/*.srvdefinitions.CHANGELOG.rst.actionlint+pre-commitpass locally;package.xmlvalidates withcatkin_pkgand the format-3 XSD.