/superflore

An extended platform release manager for Robot Operating System

Primary LanguagePythonApache License 2.0Apache-2.0

Super Flore:

Latin for "Super Bloom", this is an extended release manager for ROS.

Supported Platforms:

  • Gentoo
  • OpenEmbedded

Installation:

Dependencies:

  • Python 3
  • Docker
  • Git

Instructions:

To automatically create a pull-request, you need to generate an OAuth token for this application.

After you have created the token, place it in the environment variable SUPERFLORE_GITHUB_TOKEN.

If you're running it with --dry-run enabled, then SUPERFLORE_GITHUB_TOKEN isn't needed.

Then install and run the application.

 $ sudo python3 ./setup.py install

Gentoo Usage:

Generating Gentoo Ebuilds

$ superflore-gen-ebuilds -h
usage: superflore-gen-ebuilds [-h] [--ros-distro ROS_DISTRO] [--all]
                              [--dry-run] [--pr-only] [--no-branch]
                              [--output-repository-path OUTPUT_REPOSITORY_PATH]
                              [--only ONLY [ONLY ...]]
                              [--pr-comment PR_COMMENT]
                              [--upstream-repo UPSTREAM_REPO]
                              [--upstream-branch UPSTREAM_BRANCH]
                              [--skip-keys SKIP_KEYS [SKIP_KEYS ...]]

Deploy ROS packages into Gentoo Linux

optional arguments:
  -h, --help            show this help message and exit
  --ros-distro ROS_DISTRO
                        regenerate packages for the specified distro
  --all                 regenerate all packages in all distros
  --dry-run             run without filing a PR to remote
  --pr-only             ONLY file a PR to remote
  --no-branch           Do not create a new branch automatically
  --output-repository-path OUTPUT_REPOSITORY_PATH
                        location of the Git repo
  --only ONLY [ONLY ...]
                        generate only the specified packages
  --pr-comment PR_COMMENT
                        comment to add to the PR
  --upstream-repo UPSTREAM_REPO
                        location of the upstream repository as in
                        https://github.com/<owner>/<repository>
  --upstream-branch UPSTREAM_BRANCH
                        branch of the upstream repository
  --skip-keys SKIP_KEYS [SKIP_KEYS ...]
                        packages to skip during regeneration

Testing Gentoo Ebuilds

$ superflore-check-ebuilds -h
usage: superflore-check-ebuilds [-h]
                                [--ros-distro ROS_DISTRO [ROS_DISTRO ...]]
                                [--pkgs PKGS [PKGS ...]] [-f F] [-v]
                                [--log-file LOG_FILE]

Check if ROS packages are building for Gentoo Linux

optional arguments:
  -h, --help            show this help message and exit
  --ros-distro ROS_DISTRO [ROS_DISTRO ...]
                        distro(s) to check
  --pkgs PKGS [PKGS ...]
                        packages to build
  -f F                  build packages specified by the input file
  -v, --verbose         show output from docker
  --log-file LOG_FILE   location to store the log file

If a file is to be passed as input, it is expected to be in proper yaml format, such as the below.

indigo:
  - catkin
  - p2os_msgs
kinetic:
  - catkin
lunar:
  - catkin

Common Usage:

To update the gentoo ebuilds, run the following:

$ superflore-gen-ebuilds

This command will clone the ros/ros-overlay repo into a subfolder within /tmp. This can be thought of as an update mode. Note: this mode will file a PR with ros/ros-overlay.

If you don't want to file a PR with ros/ros-overlay, you should add the --dry-run flag. You can later decide to file the PR after inspection by using the --pr-only flag.

To regenerate only the specified packages, use the --only [pkg1] [pkg2] ... [pkgn] flag (note: you will need to also use the --ros-distro [distro] flag.

If you want to use an existing repo instead of cloning one, add --output-repository-path [path].

Regenerating:

In the case that you wish to regenerate an entire rosdistro, you may do so by adding the --ros-distro [distro name] flag. Note: this is very time consuming.

If you wish to regenerate all installers for all ros distros, you should pass the --all flag in place of the --ros-distro flag. Note: this takes an extremely long amount of time.

OpenEmbedded Usage:

Generating OpenEmbedded Recipes

NOTE: The instructions here should be followed to generate the OpenEmbedded recipes for meta-ros.

$ superflore-gen-oe-recipes -h
usage: superflore-gen-oe-recipes [-h] --ros-distro ROS_DISTRO --dry-run
                                 [--pr-only] [--no-branch]
                                 [--output-repository-path OUTPUT_REPOSITORY_PATH]
                                 [--only ONLY [ONLY ...]]
                                 [--pr-comment PR_COMMENT]
                                 [--upstream-repo UPSTREAM_REPO]
                                 [--upstream-branch UPSTREAM_BRANCH]
                                 [--skip-keys SKIP_KEYS [SKIP_KEYS ...]]
                                 [--tar-archive-dir TAR_ARCHIVE_DIR]

Generate OpenEmbedded recipes for ROS packages

optional arguments:
  -h, --help            show this help message and exit
  --ros-distro ROS_DISTRO
                        regenerate packages for the specified distro
  --dry-run             run without filing a PR to remote
  --pr-only             ONLY file a PR to remote
  --no-branch           Do not create a new branch automatically
  --output-repository-path OUTPUT_REPOSITORY_PATH
                        location of the Git repo
  --only ONLY [ONLY ...]
                        generate only the specified packages
  --pr-comment PR_COMMENT
                        comment to add to the PR
  --upstream-repo UPSTREAM_REPO
                        location of the upstream repository as in
                        https://github.com/<owner>/<repository>
  --upstream-branch UPSTREAM_BRANCH
                        branch of the upstream repository
  --skip-keys SKIP_KEYS [SKIP_KEYS ...]
                        packages to skip during regeneration
  --tar-archive-dir TAR_ARCHIVE_DIR
                        location to store archived packages

Common Usage:

To update the OpenEmbedded recipes for a ROS distro, run the following:

$ superflore-gen-oe-recipes --ros-distro ROS_DISTRO

This command will clone the ros/meta-ros repo into a subfolder under /tmp/superflore, generate the recipes and other files for the specified distro, commit them, and issue a pull request for ros/meta-ros. The --ros-distro flag must be supplied. ROS 1 distros prior to "melodic" are not supported.

Generating bitbake recipes without specifying --dry-run is not supported. This is because it is almost inevitable that changes to the metadata under recipes-bbappend will be required. Only when these have been made and the images build and pass the sanity test should a pull request be created. You can issue the PR later by using the --pr-only flag.

If you want to use an existing repo instead of cloning one, specify --output-repository-path OUTPUT_REPOSITORY_PATH.

Note that the --only flag currently generates bogus files under conf and files.

F.A.Q.:

Here are some specific use cases for Superflore.

Gentoo:

Q: I need to patch this package. What are the steps involved here?

A: It's relatively simple to generate a patch for a package. From a contributor standpoint, superflore does most of the heavy lifting for you.

We'll assume you have already patched your source code, and your patch is named fix-pkg.patch. Also, we'll assume you're patching the package foo, and that you have a fork of ros/ros-overlay on its master branch within you home directory.

$ cd ${HOME}/ros-overlay/ros-[distro]/foo
$ mkdir files
$ cp /path/to/patch/fix-pkg.patch ./files
$ git add files
$ git commit -m "Add patch to fix package [foo] in [distro]."

Next, use Superflore to regenerate the package.

$ superflore-gen-ebuilds --only [foo] --ros-distro [distro] --output-repository-path ~/ros-overlay

After that command runs, a pull request will be filed on your behalf into the ROS overlay repository. Note: If you don't want a pull request to be filed, add the --dry-run flag to the above command, and, after you are ready to file the pr, run superflore-gen-ebuilds --pr-only.