Coder Social home page Coder Social logo

superflore's Introduction

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.

superflore's People

Contributors

alessandro-barbieri avatar allenh1 avatar andre-rosa avatar concavegit avatar cottsay avatar herb-kuta-lge avatar nuclearsandwich avatar shaneallcroft avatar shr-project avatar tfoote avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

superflore's Issues

rosdep2.catkin_support.ValidationFailed: rosdep database is not initialized,

Hello, I was trying to update teh ebuild for ros-kinetic/sbpl and ros-kinetic/naoqi_driver and both gave me this error. Note that for ros-kinetic/naoqi_libqicore this didn't happen.

superflore-gen-ebuilds --ros-distro kinetic --only sbpl
>>>> Working in temporary directory /tmp/tmpe5oiwtj0
>>>> Creating new branch gentoo-bot-sSGXZjpgTD...
>>>> 
>>>> Regenerating package 'sbpl'...
>>>> Cleaning up temporary directory /tmp/tmpe5oiwtj0
Traceback (most recent call last):
  File "/usr/local/bin/superflore-gen-ebuilds", line 11, in <module>
    load_entry_point('superflore==0.2.1', 'console_scripts', 'superflore-gen-ebuilds')()
  File "/usr/local/lib/python3.6/dist-packages/superflore-0.2.1-py3.6.egg/superflore/generators/ebuild/run.py", line 117, in main
  File "/usr/local/lib/python3.6/dist-packages/superflore-0.2.1-py3.6.egg/superflore/generators/ebuild/gen_packages.py", line 85, in regenerate_pkg
  File "/usr/local/lib/python3.6/dist-packages/superflore-0.2.1-py3.6.egg/superflore/generators/ebuild/gen_packages.py", line 216, in ebuild_text
  File "/usr/local/lib/python3.6/dist-packages/superflore-0.2.1-py3.6.egg/superflore/generators/ebuild/ebuild.py", line 218, in get_ebuild_text
  File "/usr/local/lib/python3.6/dist-packages/superflore-0.2.1-py3.6.egg/superflore/utils.py", line 217, in resolve_dep
  File "/usr/local/lib/python3.6/dist-packages/superflore-0.2.1-py3.6.egg/superflore/rosdep_support.py", line 90, in resolve_rosdep_key
  File "/usr/local/lib/python3.6/dist-packages/superflore-0.2.1-py3.6.egg/superflore/rosdep_support.py", line 46, in get_view
  File "/usr/local/lib/python3.6/dist-packages/rosdep-0.14.0-py3.6.egg/rosdep2/catkin_support.py", line 108, in get_catkin_view
    """)
rosdep2.catkin_support.ValidationFailed: rosdep database is not initialized, please run:
	sudo rosdep init

traceback when running a 2nd time in a row

Related to #49 lets talk about how repeated builds and temp files might work better.

$ superflore-gen-ebuilds --dry-run --ros-distro lunar
Cloning repo ros/ros-overlay into directory /tmp/YmpJJukOup...
Creating new branch gentoo-bot-djqaSqVPxv...

Symbolicly linking files from /tmp/YmpJJukOup/ros-lunar...
Traceback (most recent call last):
  File "/home/tfoote/work/github/ros-infrastructure/superflore/superflore/generators/ebuild/run.py", line 92, in main
    link_existing_files(args.ros_distro)
  File "/home/tfoote/work/github/ros-infrastructure/superflore/superflore/generators/ebuild/run.py", line 43, in link_existing_files
    os.symlink(dir_fmt.format(overlay.repo_dir, mode), './ros-' + mode)
FileExistsError: [Errno 17] File exists: '/tmp/YmpJJukOup/ros-lunar' -> './ros-lunar'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/tfoote/work/github/ros-infrastructure/superflore/sfvenv/bin/superflore-gen-ebuilds", line 11, in <module>
    load_entry_point('superflore==0.0.0', 'console_scripts', 'superflore-gen-ebuilds')()
  File "/home/tfoote/work/github/ros-infrastructure/superflore/superflore/generators/ebuild/run.py", line 93, in main
    except os.FileExistsError:
AttributeError: module 'os' has no attribute 'FileExistsError'
(sfvenv) tfoote@snowman:~/work/github/ros-infrastructure/superflore Last: [1] (36s Seconds)
$ ll
total 88
drwxrwxr-x 11 tfoote tfoote  4096 Aug  1 16:30 ./
drwxrwxr-x 22 tfoote tfoote  4096 Aug  1 16:05 ../
-rw-rw-r--  1 tfoote tfoote  9849 Aug  1 16:27 abb_driver-None.tar.gz
-rw-rw-r--  1 tfoote tfoote  1388 Aug  1 16:27 abb-None.tar.gz
drwxrwxr-x  4 tfoote tfoote  4096 Aug  1 16:30 build/
drwxrwxr-x  2 tfoote tfoote  4096 Aug  1 16:30 dist/
drwxrwxr-x  8 tfoote tfoote  4096 Aug  1 16:05 .git/
-rw-rw-r--  1 tfoote tfoote   109 Aug  1 16:05 .gitignore
-rw-rw-r--  1 tfoote tfoote 11358 Aug  1 16:05 LICENSE
-rw-rw-r--  1 tfoote tfoote   370 Aug  1 16:05 README.md
drwxrwxr-x  4 tfoote tfoote  4096 Aug  1 16:27 recipes-ros-indigo/
lrwxrwxrwx  1 tfoote tfoote    33 Aug  1 16:27 recipes-ros-lunar -> /tmp/WEHvSOMIka/recipes-ros-lunar/
drwxrwxr-x  2 tfoote tfoote  4096 Aug  1 16:05 repoman_docker/
lrwxrwxrwx  1 tfoote tfoote    25 Aug  1 16:08 ros-lunar -> /tmp/kAuPBiPoJb/ros-lunar/
-rwxrwxr-x  1 tfoote tfoote  1312 Aug  1 16:05 setup.py*
drwxrwxr-x  6 tfoote tfoote  4096 Aug  1 16:28 sfvenv/
drwxrwxr-x  4 tfoote tfoote  4096 Aug  1 16:07 superflore/
drwxrwxr-x  2 tfoote tfoote  4096 Aug  1 16:06 superflore.egg-info/
drwxrwxr-x  2 tfoote tfoote  4096 Aug  1 16:05 tests/
-rw-rw-r--  1 tfoote tfoote   295 Aug  1 16:05 .travis.yml
(sfvenv) tfoote@snowman:~/work/github/ros-infrastructure/superflore Last: [0] (0s Seconds)
$ rm -rf /tmp/kAuPBiPoJb/ros-lunar/ ros-lunar

Clean up .tar files for OpenEmbedded

Currently, the tar files for OpenEmbedded are just left to the user to clean up, which is far less than desirable.

This is a long-standing issue that was to be fixed in #79, but, due to the current length of that PR, has been deferred to later.

Bad license with "3-Clause BSD"

superflore-gen-ebuilds --ros-distro kinetic --only move_base_flex mbf_utility mbf_simple_nav mbf_msgs mbf_costmap_nav mbf_costmap_core mbf_abstract_nav mbf_abstract_core
>>>> Working in temporary directory /tmp/tmpxs1__7ca
>>>> Creating new branch gentoo-bot-ufXOtSTWdJ...
>>>> 
>>>> Regenerating package 'move_base_flex'...
>>>> Successfully generated installer for package 'move_base_flex'.
>>>> Regenerating package 'mbf_utility'...
>>>> Successfully generated installer for package 'mbf_utility'.
>>>> Regenerating package 'mbf_simple_nav'...
!!!! Could not match license "3-Clause BSD".
>>>> Cleaning up temporary directory /tmp/tmpxs1__7ca
Traceback (most recent call last):
  File "/home/sam/.local/bin/superflore-gen-ebuilds", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.5/dist-packages/superflore-0.2.1-py3.5.egg/superflore/generators/ebuild/run.py", line 124, in main
  File "/usr/local/lib/python3.5/dist-packages/superflore-0.2.1-py3.5.egg/superflore/generators/ebuild/gen_packages.py", line 85, in regenerate_pkg
  File "/usr/local/lib/python3.5/dist-packages/superflore-0.2.1-py3.5.egg/superflore/generators/ebuild/gen_packages.py", line 216, in ebuild_text
  File "/usr/local/lib/python3.5/dist-packages/superflore-0.2.1-py3.5.egg/superflore/generators/ebuild/ebuild.py", line 174, in get_ebuild_text
  File "/usr/local/lib/python3.5/dist-packages/superflore-0.2.1-py3.5.egg/superflore/utils.py", line 210, in get_license
superflore.exceptions.UnknownLicense: bad license

That's what I got. I'm looking around to see how to overcome it, but maybe you'll be faster to spot what to do.

Use Rosdep

Instead of fetching the yaml files from rosdistro, it would be much better to use rosdep for satisfying dependencies.

Tasks:

  • Add Open Embedded support to Rosdep (allenh1/rosdep#1)
  • Initialize dependencies for Open Embedded into rosdistro
  • Use rosdep to resolve dependencies for Ebuilds #58
  • Use rosdep to resolve dependencies for Open Embedded builds

Suggestions for improved usage

Please add to the readme usage documentation. I found some executables by tab completing. However there should be documentation of the top level commands.

Here's some more features for better usability.

I ran with --dry-run and it finished w/o filing a PR, but didn't tell me where the output was. (I found it in /tmp by listing latest changes.) If it generates a temp-dir it should clean it up or at least tell you to clean up.

It would be great to parameterize the output directory to allow reuse of a preexisting local checkout of the repo so you don't have to refetch it if you already have a clone.

Following that if you run with --dry-run and a non-temp directory an option --pr-only would be helpful after reviewing the result.

And adding arguments for the upstream repo will be important for anyone who wants to fork etc. Also supporting a config file would be good for this too.

Every single package attempt seems to pull the package.xml from an incorrect url and falls back

Like this:

The first URL is missing the rosdistro between the release and package name and shouldn't have the version number: https://github.com/ros-gbp/gazebo_ros_pkgs-release/blob/release/lunar/gazebo_dev/package.xml

Or maybe should use the versioned one or just use the final one?

>>>> 17.5%: Successfully generated installer for package.
Failed to read package.xml file from url 'https://raw.github.com/ros-gbp/gazebo_ros_pkgs-release/release/gazebo_dev/2.7.2/package.xml': HTTP Error 404: Not Found
Trying to read from url 'https://raw.github.com/ros-gbp/gazebo_ros_pkgs-release/release/lunar/gazebo_dev/2.7.2-0/package.xml' instead
>>>> failed to parse website for package gazebo_dev
>>>> 17.7%: Successfully generated installer for package.

Add CI to this repo

Adding CI will improve robustness.

Starting with just a linter would be good. In the future build tests would be great in the longer term.

Adding Support for Docker Library

This issue is tracking support for releasing Dockerfiles into the Docker Library with superflore.
I'm not yet sure how this should be approache, but here is my current vision of the result:

  1. Upon triggering, the dockerfile auto generation scripts are run
  2. If a file level change is detected, the diff is staged and committed
  3. Then the manifest for the docker library is updated and committed as well
  4. After, a auto PR with the last two commits is submitted to the Dockerfile repo
  5. The PR is then manually reviewed and merged
  6. The reviewer can then copy and paste the manifest to PR towards the Docker Hub Official Library

So given this goal, I think some github API interfacing will be required, for submitting a PR to an upstream repo without push access for example. I see some of this capability already in bloom, so perhaps there is a way we could share more intraftructure between these bloom and superflore.

Another issue is that I'm not sure how I should call my generation scripts. Should I call them functionally from python, as my auto generated code is already python3, or should I use subprocess to avoid roping in a host of separate dependencies? I suppose the scripts could be executed in a container?

Lastly, I'm debating if this whole PR process for docker images would be better serviced from a CI job. I have just about all the steps already working in travis already, and I'm wondering if keeping this agnostic of bloom, so that other images that are not entirely ros related could piggyback on the same CI PR process.

ping: @tfoote @mikaelarguedas @allenh1 @nuclearsandwich

Testing

There's a need for some generic test cases that can be run to ensure that generated installers are still properly generating packages.

Docker First Run Behavior

If the first docker run command happens from outside the source directory, this happens.

Building docker image...
unable to prepare context: unable to evaluate symlinks in context path: lstat /home/allenh1/repoman_docker: no such file or directory
Running docker image...
Generating manifests...
['docker', 'run', '-ti', '--rm', '-v', '/tmp/ePCfqNYKsv:/tmp/ros-overlay', '-v', '/home/allenh1/.gnupg:/root/.gnupg', 'gentoo_repoman', 'bash', '-c', 'cd /tmp/ros-overlay && repoman manifest']
Unable to find image 'gentoo_repoman:latest' locally
docker: Error response from daemon: repository gentoo_repoman not found: does not exist or no pull access.
See 'docker run --help'.
Adding changes...
Committing to branch gentoo-bot-vhIMFdgboS...
Filing pull-request for ros/ros-overlay...
Successfully filed a pull request with the ros/ros-overlay repo.
Cleaning up tmp directory /tmp/ePCfqNYKsv...
Cleaning up symbolic links...
Successfully synchronized repositories!

If superflore is pip installed, then this file has no reason to be there. @tfoote do you know the better way to handle this?

re-release on PyPI

There have been quite a few fixes I'd say, why not re-release on PyPI?

Add usage documentation

A quick overview of how to use this should be included in the Readme. They should cover the most common use cases.

Allow configure without --global on git?

Today I tried to re-generate an ebuild and I'm using a machine that's shared so I don't have set global email and username. Maybe there is a way to allow to do this just locally?

--git-email [email protected] --git-name "My name" flags maybe?

sam $ superflore-gen-ebuilds --ros-distro kinetic --only rosbridge_library --output-repository-path /home/user/sam/ros-overlay
>>>> Creating new branch gentoo-bot-XUuscxloxw...
>>>> 
>>>> Regenerating package 'rosbridge_library'...
>>>> failed to parse website for package rosbridge_library
!!!! Failed to resolve required dependencies for package rosbridge_library!
!!!!  unresolved: "python-bson"
>>>> Pulling docker image 'allenh1/ros_gentoo_base:latest'...
>>>> Running docker image...
>>>> Generating manifests...
>>>> Running container with command string 'bash -c 'cd /tmp/ros-overlay/ros-kinetic/rosbridge_library && repoman manifest''...
>>>> Docker container exited.
>>>> Adding changes...
>>>> Committing to branch gentoo-bot-XUuscxloxw...
Traceback (most recent call last):
  File "/usr/local/bin/superflore-gen-ebuilds", line 9, in <module>
    load_entry_point('superflore==0.2.1', 'console_scripts', 'superflore-gen-ebuilds')()
  File "/usr/local/lib/python3.5/dist-packages/superflore/generators/ebuild/run.py", line 175, in main
    overlay.commit_changes(args.ros_distro)
  File "/usr/local/lib/python3.5/dist-packages/superflore/generators/ebuild/overlay_instance.py", line 44, in commit_changes
    self.repo.git.commit(m='{0}'.format(commit_msg))
  File "/usr/local/lib/python3.5/dist-packages/git/cmd.py", line 550, in <lambda>
    return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/git/cmd.py", line 1009, in _call_process
    return self.execute(call, **exec_kwargs)
  File "/usr/local/lib/python3.5/dist-packages/git/cmd.py", line 820, in execute
    raise GitCommandError(command, status, stderr_value, stdout_value)
git.exc.GitCommandError: Cmd('git') failed due to: exit code(128)
  cmdline: git commit -m regenerate ros-kinetic, Sat Apr 28 21:18:54 2018
  stderr: '
*** Please tell me who you are.

Run

  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'user@machine.(none)')'

I know it's a bit of pain, but thank you for considering it.

Add `--dry-run` and `--pr-only` to Open Embedded

Open Embedded is lagging behind in a few places, one of which is the --pr-only and --dry-run flags that can be passed to the ebuild generator to prevent an unexpected PR from filing.

Should just be a replication of logic.

connects to #49.

Installation Instructions

The install instructions/usage instructions should be at least minimally present somewhere in this repo.

connect to #26

Generate Installers Tests

It's a good idea to test the generate_installers package, since it is responsible for most of the heavy lifting. Current coverage report shows it's at 16%, which is less than comforting.

allenh1@hunter-laptop ~/work/superflore
$ coverage run --source=superflore -m nose && coverage report -m
..........................
----------------------------------------------------------------------
Ran 26 tests in 4.776s

OK
Name                                               Stmts   Miss  Cover   Missing
--------------------------------------------------------------------------------
superflore/TempfileManager.py                         34     23    32%   27-28, 31-41, 44-57
superflore/__init__.py                                12      4    67%   5-8
superflore/docker.py                                  37     23    38%   24-29, 32-34, 37, 40, 43-58, 63, 68
superflore/exceptions.py                              12      3    75%   18, 28, 33
superflore/generate_installers.py                     57     48    16%   32-86
superflore/generators/__init__.py                      0      0   100%
superflore/generators/bitbake/__init__.py              3      1    67%   3
superflore/generators/bitbake/gen_packages.py        115     92    20%   40-103, 109-163, 168-176, 181
superflore/generators/bitbake/ros_meta.py             27     18    33%   24-27, 30-35, 38-51, 54-55
superflore/generators/bitbake/run.py                  89     72    19%   37-42, 49-157
superflore/generators/bitbake/yocto_recipe.py        104     86    17%   39-55, 59, 62-66, 69-81, 84-88, 91-93, 96-97, 105-108, 117-175
superflore/generators/ebuild/__init__.py               3      1    67%   3
superflore/generators/ebuild/ebuild.py               134      7    95%   124-126, 130-135
superflore/generators/ebuild/gen_packages.py         151    125    17%   45-113, 118-150, 155-211, 216-233, 236, 239
superflore/generators/ebuild/metadata_xml.py          33     30     9%   18-24, 27-49
superflore/generators/ebuild/overlay_instance.py      38     26    32%   27-32, 35-45, 48-65, 68-69
superflore/generators/ebuild/run.py                  153    133    13%   40-43, 47-52, 59-246
superflore/repo_instance.py                           55     36    35%   26-35, 38-46, 49-57, 63, 69, 75, 81, 84-87, 92, 97
superflore/rosdep_support.py                          34      2    94%   84-85
superflore/utils.py                                  140     63    55%   30-31, 35, 39, 43, 47, 51-57, 61-66, 73, 81-91, 129, 133, 139, 144, 146-149, 151, 157, 163-164, 172, 176-177, 181-200
--------------------------------------------------------------------------------
TOTAL                                               1231    793    36%

Entry Point Support

As this moves forward, it would be nice to have entry point support so that this system can have modular install generators.

Gentoo Build CI

It would be really beneficial to add some tests to superflore that can be run on a per-sync basis for each ROS distro that would verify that builds through ros-[distro]/desktop_full are building on a bare-bones Gentoo install.

follow up from ros/ros-overlay#141

Unit Tests for Superflore

There aren't really any unit tests as of right now. This is a meta ticket for keeping track of this.

Re-Imagining Open Embedded

This is a meta-ticket to track improved Open Embedded support.

Goal: Create a way to easily manufacture an open embedded distribution for a particular platform via superflore.

Strategy:

  1. Create a fork of poky.
  2. Add any desired layers as git submodules.
  3. Run superflore:
$ superflore-gen-oe-dist --rosdistro kinetic \
> --target [bot] [sensor] ... [tool] \
> --output-repository-path /path/to/poky/fork
  1. Merge the PR generated by superflore
  2. Run bitbake to build your new image

@tfoote thoughts?

Add more information to the generated pull requests

When reviewing the pull requests it would be great to have as much information about where the content came from as possible.

For example this PR: ros/ros-overlay#337 I'd like to know what changes are being integrated into this repo and why?

Adding as much information as possible would be great. In particular things like the command arguments and options used to invoke superflore. As well as any environment and relevant urls for repositories being operated on, the rosdistro etc. Optimally I would be able to completely reproduce the PR with the contents of the description if I wanted to test or try something a little different.

Remove ROS 2 index

In response to ros-infrastructure/rosindex#136, and in preparation for ROS 3 (just kidding), I'd like to remove the hardcoded logic that adds the ROS 2 index for Gentoo.

@tfoote I'm interested in adding an argument that would support a second ROS index (in case people want to override it), but I think that the logic can be completely replaced by the user just setting the variable for themselves. Does this make sense to you?

Patch file support OpenEmbedded

It would be really nice to have superflore detect patch files for Open Embedded in a similar way to the way it does for Gentoo.

This is mostly just a reminder for me to do this at some point.

quicker iteration

Will be super useful to have the packages regenerated (or at least one sample package) at every commit (like travisCI)

PEP 8

Add CI for PEP 8, then conform to said CI.

2FA breaks everything

After updating my GitHib account to two-factor authentication, Superflore couldn't file pull requests in the usual fashion.

Docker Support

To allow generation on non-Gentoo platforms, it would be really nice to create a docker instance of
Gentoo, install repoman, and use a supplied pub key to generate the manifests.

https://hub.docker.com/u/gentoo/

@tfoote was able to spawn a quick Gentoo instance by using the following.

docker run -ti --rm gentoo/stage3-amd64

Refactor

Refactor to create a metadata layer that is then used in the generators.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.