-
Notifications
You must be signed in to change notification settings - Fork 463
Maintainer Guide
The purpose of this guide is to help people who are learning to maintaining this repository or as a reference to existing maintainers.
It's based on notes taken by @dhood, but was updated for posting publicly by @wjwwood.
Whenever spending time triaging issues and pull requests, follow these guidelines so other maintainers (or your future self) can know what has been triaged and what has not been triaged yet.
- Issues or pull requests without a label are considered un-triaged
- Apply at least one label when triaging an issue or pull request
- Either a descriptive label like "bug" or "enhancement" or
- a state label like "backlog", "in progress", or "review", or
- a status label like "needs feedback or more info" or "ABI break" or "changes requested"
- Use https://waffle.io/ros-visualization/rviz to help with visualizing what has and has not been triaged
- Items in the "Inbox" have not been triaged and need to be moved into either "Backlog" or "In Progress" or "Review", which will apply some label
Briefly some labels that might be of interest (non-exhaustive):
- "needs feedback or more info"
- we've asked for more information from the issue reporter or pull request author, so "the ball is in their court"
- "changes requested"
- we've asked the author of a pull request to change something before merging, again "ball is in their court"
- "ABI break"
- we've determined the change may cause ABI breakage, which is used when determining when/where to merge it
- "help wanted"
- we've triaged the issue, but don't have time to work on it, so we're asking for help from the community on it
By default, ABI breakage should be target at the next ROS release and should not be included in existing releases. The "ABI break" label should be used to mark issues and pull requests where this occurs or is required.
Notes:
- We have automatic ABI checking on Travis using moveit_ci. However, in case of errors, the commandline output is not very helpful. The script can be run locally by following the guidelines here and subsequently inspecting the generated html report.
- If an ABI break gets released, ROS buildfarm (currently) will rebuild every package depending on RViz anyway, so it's just off-buildfarm packages that break (or users that only update rviz package).
- There was one occasion where we decided against abi-checker's result because it might be an issue on other compilers: https://github.com/ros-visualization/rviz/pull/1221
There may be a branch of development for each ROS distribution rviz is released into, but there need not be.
For example, the version of rviz released into Jade and Indigo both might come from the indigo-devel
branch.
If, at some point, Jade and Indigo needed to diverge, a jade-devel
branch could be made.
However, the version for Jade should not be released from a newer ROS distro's branch, e.g. from kinetic-devel
.
When making a first release into a new ROS distribution is ok to use an existing devel branch and create one specifically for the new release at some point in the future.
Try to reserve a minor version number for each ROS distribution, e.g. if you jump from A-turtle to C-turtle (releasing B-turtle from the A-turtle devel branch) then use 1.0.x for A-turtle releases and 1.2.x for C-turtle releases, in case you ever need to make a separate B-turtle release which can be 1.1.x. We have not always done this, but it's a good idea for the future.
There's nothing special about the general process for rviz beyond what's detailed in these tutorials:
But here are some notes on things that are optional from the tutorial:
- Generate the changelog and then edit it to:
- remove extra commit messages and only leave a message which is concise
- use the past tense ('Add' versus 'Added')
- link to github issues and pull requests properly
- ok to leave messages about back-ported or forward-ported features
Make sure to do an acceptance test before releasing, just compile the "tip" of the branch and make sure rviz runs and can do basic stuff:
- run the visualization tutorials, e.g.
rosrun interactive_marker_tutorials basic_controls
- run the navigation tutorials, e.g.
roslaunch navigation_stage move_base_amcl_2.5cm.launch
Again, start with the existing tutorials:
When doing the first release, as mentioned above, you can defer the decision to create a separate devel branch till later, but it's also ok to do it on (or before) the first release, especially if you already have ABI breaking changes queued up for the next release.
In order to merge a pull request:
- it should pass automatic CI tests
- at least one maintainer should do a code review
- don't be afraid to ask for consult from another maintainer if you're unsure
- you should reproduce the issue reported and then rebuild with the patch to ensure it actually fixes the problem
- I've seen really nicely put together pr's (with screenshots and a good write up) not even run (compile but crash), "trust but verify"
- Notes about the tests:
- There are some automated tests but most tests are acceptance tests. Relevant tests should be used for testing individual PRs (e.g. mesh marker test for mesh PRs, see: https://github.com/ros-visualization/rviz/pull/1132), and then all should be performed before releases in case the PRs interacted negatively somehow.
- Also test the visualisation tutorials to prevent wide-spread regressions such as https://github.com/ros-visualization/rviz/pull/1167
-
rosrun rosbag play ${HOME}/Downloads/2011-09-15-08-32-46.bag --clock
can be used to test map display (downloaded from https://google-cartographer-ros.readthedocs.io/en/latest/) - yaml files in the test directory are messages meant for publishing
- Notes about Licensing:
- Discussion about license at https://github.com/ros-visualization/rviz/issues/1147 concluded that the code is BSD (not BSD + CC, to answer Q3). The code uses the 3-clause BSD license. The icons are under the public domain, see: https://github.com/ros-visualization/rviz/blob/melodic-devel/README.md
When merging a pull request, default to using the "Squash and Merge" option in the GitHub WebUI, in order to make it easier to cherry-pick commits between branches which we do when forward and back porting changes.