Contributing
June 12, 2026 ยท View on GitHub
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot โ follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs colcon test --packages-select px4_msgs - (Optional but recommended) install and run
pre-commit:pre-commit install pre-commit run --all-files - Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:bloom-release --rosdistro jazzy --new-track px4_msgs - That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.