{"action":"created","comment":{"url":"https://api.github.com/repos/ros2/design/pulls/comments/182192328","pull_request_review_id":112940704,"id":182192328,"diff_hunk":"@@ -289,59 +291,142 @@ The following items are possible extension points to provide custom functionalit\n - setup the environment (e.g. `sh`, `bash`, `bat`)\n - completion (e.g. `bash`, `Powershell`)\n \n-Assuming that the tool will be implemented in Python (since that is the case for existing tools) the entry point mechanism provides a convenient way to make the software extensible.\n-Extensions don't have to be integrated into the Python package containing the core logic of the build tool but can easily be provided by additional Python packages.\n-This approach will not only foster a modular design and promote clear interfaces but enable external contributions without requiring them to be integrated in a single monolithic package.\n-\n ## Possible Approaches\n \n-In terms of flexibility neither of the existing build tools can already support the superset of features described in this article.\n-There are multiple different paths possible to reach the goal of a universal build tool which fall into two categories:\n+When the first draft of this article was written neither of the existing build tools supported the superset of features described in this article.\n+There were multiple different paths possible to reach the goal of a universal build tool which fall into two categories:\n \n - One approach is to incrementally evolve one of the existing tools to satisfy the described goals.\n - Another approach would be to start \"from scratch\".\n \n+Since then the new project `colcon` has been developed which covers most of the enumerated requirements and represents the second category.\n+\n ### Evolve catkin_make, catkin_make_isolated, or ament_tools\n \n Since neither of these three build tools has the feature richness of `catkin_tools` it is considered strictly less useful to starting building upon one of these build tools.\n+Therefore neither of these are being considered as a foundation for a universal build tool.\n \n ### Evolve catkin_tools\n \n-Since `catkin_tools` is in many aspects the most complete build tool it should be the one being evolved.\n+Since `catkin_tools` is in many aspects the most complete ROS build tool it should be the one being evolved.\n While `ament_tools` has a few features `catkin_tools` currently lacks (e.g. plain CMake support without a manifest, Windows support) the feature richness of `catkin_tools` makes it a better starting point.\n \n-The following items are highlighting some of the necessary efforts (not a complete list):\n+### Start \"from scratch\" / colcon\n+\n+Since the first draft of this article the `colcon` project has been developed with the goals and requirements of a universal build tool in mind.\n+In its current form it is already able to build ROS 1 workspaces, ROS 2 workspaces, as well as Gazebo including its ignition dependencies.\n+It uses Python 3.5+ and targets all platforms supported by ROS: Linux, macOS, and Windows.\n+\n+Since it hasn't been used by many people yet more advanced features like cross compilation, `DESTDIR`, etc. hasn't been tested (and will therefore likely not work yet).\n+\n+## Decision process\n+\n+For the decision process we are only considering the following two options based on the rational described above:\n+\n+A.  Use `catkin_tools` as a starting point\n+B.  Use `colcon` as a starting point\n+\n+We acknowledge that if this topic would have been addressed earlier that some of the duplicate effort could have been avoided.\n+When the work towards a universal build tool was suspended over a year ago it was a conscious decision based on available resources.\n+Nevertheless we have to move forward with a decision in order to avoid further uncertainty and duplication.\n+\n+Both of the considered options have unique and valuable features and there are good arguments to build our future development on either of the two tools.\n+Since both are written in Python either of the two tools could be \"transformed\" to cover the pros of the other one.\n+So the two important criteria for the decision are:\n+\n+- the effort it takes to so (in the short term as well as in the long term) and\n+- the difference of the resulting code base after the \"transformation\" is completed.\n+\n+### Immediate goals\n+\n+A ROS 2 developer currently builds a steadily growing workspace with ROS 2 packages.\n+The same is happening in the monolithic Jenkins jobs on [ci.ros2.org](https://ci.ros2.org) (with the advantage to test changes across repositories easily).\n+Therefore features to easily filter the packages which need to be build are eagerly awaited to improve the development process.\n+\n+For the last ROS 2 release *Ardent* the buildfarm [build.ros.org](http://build.ros2.org) only provides jobs to generate Debian packages.\n+Neither *devel* jobs or *pull request* jobs are available nor is it supported to build a local *prerelease*.\n+For the coming ROS 2 release *Bouncy* these job types should be available to support maintainers.\n+\n+In ROS 2 *Bouncy* the univeral build tool will be the only supported option and `ament_tools` will be archived.\n+\n+#### Necessary work\n+\n+For either option **A)** or **B)** the follow items would need to be addressed:\n+\n+- The jobs and scripts on *ci.ros2.org* need to be updated to invoke the universal build tool instead of `ament_tools`.\n+- The `ros_buildfarm` package needs to be updated to invoke the universal build tool instead of `catkin_make_isolated`.\n+  The ROS 2 buildfarm would use this modification for the upcoming ROS 2 *Bouncy* release.\n+  The ROS 1 buildfarm could use the same modification in the future.\n+\n+For option **A)** the follow items would need to be addressed:\n+\n+- Support for setup files generated by `ament_cmake`.\n+- Support additional packages types: plain Python packages, CMake packages without a manifest.\n+- Support for Windows using `.bat` files.\n+- Support for the package manifest format version 3.\n+\n+For option **B)** the follow items would need to be addressed.\n+\n+- Address user feedback when the tool is being used by a broader audience.\n+\n+### Future\n+\n+The long term goal is that the universal build tool will be used in ROS 1, in ROS 2 as well as other non-ROS projects.\n+There is currently no time line when the tool will be used on the ROS 1 build or be recommended to ROS 1 users.\n+This solely depends on the resources available for ROS 1.\n+\n+Beside that for both options there is follow up work beyond the immediate goals.\n+The following enumerates a few of them but is by no means exhaustive:\n+\n+For option **A)** the follow items should be considered:\n+\n+- Support for Python packages using a `setup.cfg` file.\n+- Support for `PowerShell` to work around length limitations for environment variable on Windows.\n+- Support to pass package specific argument.\n+- Remove support for the *devel space* concept in ROS 1.\n+- Update code base to Python 3.5+.\n+- Refactor code base to reduce coupling (e.g. separate [API](https://github.com/catkin/catkin_tools/blob/2cae17f8f32b0193384d2c7734afee1c60c4add2/catkin_tools/execution/controllers.py#L183-L205) for output handling).\n+- Additional functionality to build Gazebo including its dependencies.\n+\n+For option **B)** the follow items should be considered:\n \n-- Refactor the software architecture of the existing code base to support the flexibility sketched by the extension points listed above.\n+- Support cross compilation.\n+- Support `DESTDIR`.\n+- Support a feature similar to the `profile` verb of `catkin_tools`.\n \n-- Move `catkin` specific concepts out of the core of the build tool into a catkin specific extension (e.g. manifest format, *devel space*).\n+## Summary and Decision\n \n-- Support for ROS 2 which includes:\n+Based on the above information we made the not easy decision to pick `colcon` as the universal build tool.\n \n-  - Support for Python 3 and Windows.\n-  - Support for pure Python packages as well as packages without an in-source manifest file.\n-  - Environment setup of `ament` packages\n+To elaborate on the rational one significant advantage of `colcon` is that it is ready to be deployed for ROS 2 right now and it covers our current use cases.\n+Another argument leaning towards `colcon` is the expected little effort to provide devel / PR / prerelease jobs on build.ros2.org across all targeted platforms for the upcoming *Bouncy* release.\n+While some additional feature and usability options are still missing they can be added in the future whenever there is time and/or demand for them.\n \n-- Rename the tool to use a name unrelated to one build system.\n+The necessary up front development effort for `catkin_tools` to achieve the goals described for  *Bouncy* would distract the ROS 2 team from spending their time on feature development and bug fixing of ROS 2 itself.\n \n-- Investigate if a feature like continued support of the *devel space* is feasible since it doesn't apply to other build system and might be complicated to separate without sacrificing usability.\n+While the short term advantages are certainly a main reason why we decided in favor of `colcon` they are not the only ones.\n+The cleaner architecture, modularity and extensibility as well as Python 3.5 code base will be valuable long term benefits when developing this tool in the future.\n+The separation of the build tool name from the supported build systems as well as the separation from being a \"ROS-only\" tool will hopefully also help users to understand the difference and attract new users and potential contributors.\n \n-### Start \"from scratch\"\n+### Next steps\n \n-Another approach is to implement the necessary software architecture to enable the desired flexibility and modularity \"from scratch\".\n-Then fill in the features step-by-step by porting existing building blocks from the existing solutions.\n-Some items to highlight the necessary efforts (not a complete list):\n+The following next steps will happen before the next ROS 2 release *Bouncy*.\n \n-- Create the software architecture to support the flexibility sketched by the extension points listed above which will be easier \"from scratch\" than for an existing code base.\n+- The instructions in the ROS 2 wiki to build from source will be updated to use `colcon` instead.\n+- The `ament_tools` repository will be archive, removed from the `ros2.repos` file, and won't be released into *Bouncy*.\n+- The ROS 2 buildfarm(s) will be updated to use `colcon` and provide devel / PR / prerelease jobs for the *Bouncy* release.\n \n-- Port / reimplement many of the features existing in the other build tools.\n-  It will take a non trivial amount of time to reach the feature level of e.g. `catkin_tools`\n+### Implications\n \n-- Thorough test the functionality and write documentation for developers as well as users.\n+The following items briefly enumerate what This means for ROS developers and users:\n \n-## Proposal\n+- **No CMake code** of any ROS 2 (or ROS 1) package **needs to be changed** for this transition.\n+- When building and testing ROS 2 the command `colcon build` / `colcon test` will be used instead of `ament build` / `ament test`.\n+  Please see the [documentation](http://colcon.readthedocs.io/en/latest/migration/ament_tools.html) how to map `ament_tools` command line arguments to `colcon` arguments.\n+- For ROS 1 nothing is changing at this point in time.\n \n-The decision of which approach should be selected is deferred at the moment since nobody is likely able to spend any time on this in the foreseeable future.\n-It could also be considered an implementation detail - as long as the described goals are reached it doesn't matter how the unified build tool was getting there.\n+### Outlook\n \n-*Hopefully to be continued in the future...*\n+- Since `colcon` can be used to build ROS 1 early adopters can try to use it to build ROS 1 from source.\n+  While there is documentation how to migrate from [catkin_make_isolated](http://colcon.readthedocs.io/en/latest/migration/catkin_make_isolated.html) and [catkin_tools](http://colcon.readthedocs.io/en/latest/migration/catkin_tools.html) `colcon` won't be the recommended build tool in ROS 1 for the foreseeable future.","path":"articles/101_build_tool.md","position":298,"original_position":298,"commit_id":"9974be391470c2b360805a34631c60b57298d830","original_commit_id":"9974be391470c2b360805a34631c60b57298d830","user":{"login":"wjwwood","id":100427,"avatar_url":"https://avatars1.githubusercontent.com/u/100427?v=4","gravatar_id":"","url":"https://api.github.com/users/wjwwood","html_url":"https://github.com/wjwwood","followers_url":"https://api.github.com/users/wjwwood/followers","following_url":"https://api.github.com/users/wjwwood/following{/other_user}","gists_url":"https://api.github.com/users/wjwwood/gists{/gist_id}","starred_url":"https://api.github.com/users/wjwwood/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wjwwood/subscriptions","organizations_url":"https://api.github.com/users/wjwwood/orgs","repos_url":"https://api.github.com/users/wjwwood/repos","events_url":"https://api.github.com/users/wjwwood/events{/privacy}","received_events_url":"https://api.github.com/users/wjwwood/received_events","type":"User","site_admin":false},"body":"But the implication is that `colcon` will eventually be recommended instead of `catkin_make_isolated` and `catkin_make`, and that `catkin_tools` will not be receiving attention with respect to ROS 2. And because `colcon` will eventually be the recommendation, we will therefore not spend any extra time on `catkin_tools` for ROS 1 either.  Is that not the case?","created_at":"2018-04-17T19:03:49Z","updated_at":"2018-04-17T19:04:14Z","html_url":"https://github.com/ros2/design/pull/168#discussion_r182192328","pull_request_url":"https://api.github.com/repos/ros2/design/pulls/168","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/ros2/design/pulls/comments/182192328"},"html":{"href":"https://github.com/ros2/design/pull/168#discussion_r182192328"},"pull_request":{"href":"https://api.github.com/repos/ros2/design/pulls/168"}}},"pull_request":{"url":"https://api.github.com/repos/ros2/design/pulls/168","id":182016417,"html_url":"https://github.com/ros2/design/pull/168","diff_url":"https://github.com/ros2/design/pull/168.diff","patch_url":"https://github.com/ros2/design/pull/168.patch","issue_url":"https://api.github.com/repos/ros2/design/issues/168","number":168,"state":"open","locked":false,"title":"update universal build tool article to reflect decision to use colcon","user":{"login":"dirk-thomas","id":1335366,"avatar_url":"https://avatars1.githubusercontent.com/u/1335366?v=4","gravatar_id":"","url":"https://api.github.com/users/dirk-thomas","html_url":"https://github.com/dirk-thomas","followers_url":"https://api.github.com/users/dirk-thomas/followers","following_url":"https://api.github.com/users/dirk-thomas/following{/other_user}","gists_url":"https://api.github.com/users/dirk-thomas/gists{/gist_id}","starred_url":"https://api.github.com/users/dirk-thomas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dirk-thomas/subscriptions","organizations_url":"https://api.github.com/users/dirk-thomas/orgs","repos_url":"https://api.github.com/users/dirk-thomas/repos","events_url":"https://api.github.com/users/dirk-thomas/events{/privacy}","received_events_url":"https://api.github.com/users/dirk-thomas/received_events","type":"User","site_admin":false},"body":"Follow up of #115 which created the first version of the article.\r\n\r\nThis update describes the new alternative [colcon](https://github.com/colcon/), the decision process we followed as well as the decision to continue with `colcon` as the universal build tool in ROS (2).","created_at":"2018-04-16T23:43:24Z","updated_at":"2018-04-17T19:04:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3f8c27af3bf8efefbff9ae98a38c58033a5180ef","assignee":{"login":"dirk-thomas","id":1335366,"avatar_url":"https://avatars1.githubusercontent.com/u/1335366?v=4","gravatar_id":"","url":"https://api.github.com/users/dirk-thomas","html_url":"https://github.com/dirk-thomas","followers_url":"https://api.github.com/users/dirk-thomas/followers","following_url":"https://api.github.com/users/dirk-thomas/following{/other_user}","gists_url":"https://api.github.com/users/dirk-thomas/gists{/gist_id}","starred_url":"https://api.github.com/users/dirk-thomas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dirk-thomas/subscriptions","organizations_url":"https://api.github.com/users/dirk-thomas/orgs","repos_url":"https://api.github.com/users/dirk-thomas/repos","events_url":"https://api.github.com/users/dirk-thomas/events{/privacy}","received_events_url":"https://api.github.com/users/dirk-thomas/received_events","type":"User","site_admin":false},"assignees":[{"login":"dirk-thomas","id":1335366,"avatar_url":"https://avatars1.githubusercontent.com/u/1335366?v=4","gravatar_id":"","url":"https://api.github.com/users/dirk-thomas","html_url":"https://github.com/dirk-thomas","followers_url":"https://api.github.com/users/dirk-thomas/followers","following_url":"https://api.github.com/users/dirk-thomas/following{/other_user}","gists_url":"https://api.github.com/users/dirk-thomas/gists{/gist_id}","starred_url":"https://api.github.com/users/dirk-thomas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dirk-thomas/subscriptions","organizations_url":"https://api.github.com/users/dirk-thomas/orgs","repos_url":"https://api.github.com/users/dirk-thomas/repos","events_url":"https://api.github.com/users/dirk-thomas/events{/privacy}","received_events_url":"https://api.github.com/users/dirk-thomas/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":180241237,"url":"https://api.github.com/repos/ros2/design/labels/in%20review","name":"in review","color":"388be2","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ros2/design/pulls/168/commits","review_comments_url":"https://api.github.com/repos/ros2/design/pulls/168/comments","review_comment_url":"https://api.github.com/repos/ros2/design/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ros2/design/issues/168/comments","statuses_url":"https://api.github.com/repos/ros2/design/statuses/9974be391470c2b360805a34631c60b57298d830","head":{"label":"ros2:build_tool_colcon","ref":"build_tool_colcon","sha":"9974be391470c2b360805a34631c60b57298d830","user":{"login":"ros2","id":3979232,"avatar_url":"https://avatars1.githubusercontent.com/u/3979232?v=4","gravatar_id":"","url":"https://api.github.com/users/ros2","html_url":"https://github.com/ros2","followers_url":"https://api.github.com/users/ros2/followers","following_url":"https://api.github.com/users/ros2/following{/other_user}","gists_url":"https://api.github.com/users/ros2/gists{/gist_id}","starred_url":"https://api.github.com/users/ros2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ros2/subscriptions","organizations_url":"https://api.github.com/users/ros2/orgs","repos_url":"https://api.github.com/users/ros2/repos","events_url":"https://api.github.com/users/ros2/events{/privacy}","received_events_url":"https://api.github.com/users/ros2/received_events","type":"Organization","site_admin":false},"repo":{"id":14241623,"name":"design","full_name":"ros2/design","owner":{"login":"ros2","id":3979232,"avatar_url":"https://avatars1.githubusercontent.com/u/3979232?v=4","gravatar_id":"","url":"https://api.github.com/users/ros2","html_url":"https://github.com/ros2","followers_url":"https://api.github.com/users/ros2/followers","following_url":"https://api.github.com/users/ros2/following{/other_user}","gists_url":"https://api.github.com/users/ros2/gists{/gist_id}","starred_url":"https://api.github.com/users/ros2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ros2/subscriptions","organizations_url":"https://api.github.com/users/ros2/orgs","repos_url":"https://api.github.com/users/ros2/repos","events_url":"https://api.github.com/users/ros2/events{/privacy}","received_events_url":"https://api.github.com/users/ros2/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ros2/design","description":"Design documentation for ROS 2.0 effort","fork":false,"url":"https://api.github.com/repos/ros2/design","forks_url":"https://api.github.com/repos/ros2/design/forks","keys_url":"https://api.github.com/repos/ros2/design/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ros2/design/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ros2/design/teams","hooks_url":"https://api.github.com/repos/ros2/design/hooks","issue_events_url":"https://api.github.com/repos/ros2/design/issues/events{/number}","events_url":"https://api.github.com/repos/ros2/design/events","assignees_url":"https://api.github.com/repos/ros2/design/assignees{/user}","branches_url":"https://api.github.com/repos/ros2/design/branches{/branch}","tags_url":"https://api.github.com/repos/ros2/design/tags","blobs_url":"https://api.github.com/repos/ros2/design/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ros2/design/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ros2/design/git/refs{/sha}","trees_url":"https://api.github.com/repos/ros2/design/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ros2/design/statuses/{sha}","languages_url":"https://api.github.com/repos/ros2/design/languages","stargazers_url":"https://api.github.com/repos/ros2/design/stargazers","contributors_url":"https://api.github.com/repos/ros2/design/contributors","subscribers_url":"https://api.github.com/repos/ros2/design/subscribers","subscription_url":"https://api.github.com/repos/ros2/design/subscription","commits_url":"https://api.github.com/repos/ros2/design/commits{/sha}","git_commits_url":"https://api.github.com/repos/ros2/design/git/commits{/sha}","comments_url":"https://api.github.com/repos/ros2/design/comments{/number}","issue_comment_url":"https://api.github.com/repos/ros2/design/issues/comments{/number}","contents_url":"https://api.github.com/repos/ros2/design/contents/{+path}","compare_url":"https://api.github.com/repos/ros2/design/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ros2/design/merges","archive_url":"https://api.github.com/repos/ros2/design/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ros2/design/downloads","issues_url":"https://api.github.com/repos/ros2/design/issues{/number}","pulls_url":"https://api.github.com/repos/ros2/design/pulls{/number}","milestones_url":"https://api.github.com/repos/ros2/design/milestones{/number}","notifications_url":"https://api.github.com/repos/ros2/design/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ros2/design/labels{/name}","releases_url":"https://api.github.com/repos/ros2/design/releases{/id}","deployments_url":"https://api.github.com/repos/ros2/design/deployments","created_at":"2013-11-08T18:56:29Z","updated_at":"2018-04-17T14:51:35Z","pushed_at":"2018-04-17T15:09:04Z","git_url":"git://github.com/ros2/design.git","ssh_url":"git@github.com:ros2/design.git","clone_url":"https://github.com/ros2/design.git","svn_url":"https://github.com/ros2/design","homepage":"http://design.ros2.org/","size":1409,"stargazers_count":67,"watchers_count":67,"language":"JavaScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":79,"mirror_url":null,"archived":false,"open_issues_count":26,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":79,"open_issues":26,"watchers":67,"default_branch":"gh-pages"}},"base":{"label":"ros2:gh-pages","ref":"gh-pages","sha":"bfb67f2f4663e8ab3b7701194a72ce062e08b6c7","user":{"login":"ros2","id":3979232,"avatar_url":"https://avatars1.githubusercontent.com/u/3979232?v=4","gravatar_id":"","url":"https://api.github.com/users/ros2","html_url":"https://github.com/ros2","followers_url":"https://api.github.com/users/ros2/followers","following_url":"https://api.github.com/users/ros2/following{/other_user}","gists_url":"https://api.github.com/users/ros2/gists{/gist_id}","starred_url":"https://api.github.com/users/ros2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ros2/subscriptions","organizations_url":"https://api.github.com/users/ros2/orgs","repos_url":"https://api.github.com/users/ros2/repos","events_url":"https://api.github.com/users/ros2/events{/privacy}","received_events_url":"https://api.github.com/users/ros2/received_events","type":"Organization","site_admin":false},"repo":{"id":14241623,"name":"design","full_name":"ros2/design","owner":{"login":"ros2","id":3979232,"avatar_url":"https://avatars1.githubusercontent.com/u/3979232?v=4","gravatar_id":"","url":"https://api.github.com/users/ros2","html_url":"https://github.com/ros2","followers_url":"https://api.github.com/users/ros2/followers","following_url":"https://api.github.com/users/ros2/following{/other_user}","gists_url":"https://api.github.com/users/ros2/gists{/gist_id}","starred_url":"https://api.github.com/users/ros2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ros2/subscriptions","organizations_url":"https://api.github.com/users/ros2/orgs","repos_url":"https://api.github.com/users/ros2/repos","events_url":"https://api.github.com/users/ros2/events{/privacy}","received_events_url":"https://api.github.com/users/ros2/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ros2/design","description":"Design documentation for ROS 2.0 effort","fork":false,"url":"https://api.github.com/repos/ros2/design","forks_url":"https://api.github.com/repos/ros2/design/forks","keys_url":"https://api.github.com/repos/ros2/design/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ros2/design/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ros2/design/teams","hooks_url":"https://api.github.com/repos/ros2/design/hooks","issue_events_url":"https://api.github.com/repos/ros2/design/issues/events{/number}","events_url":"https://api.github.com/repos/ros2/design/events","assignees_url":"https://api.github.com/repos/ros2/design/assignees{/user}","branches_url":"https://api.github.com/repos/ros2/design/branches{/branch}","tags_url":"https://api.github.com/repos/ros2/design/tags","blobs_url":"https://api.github.com/repos/ros2/design/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ros2/design/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ros2/design/git/refs{/sha}","trees_url":"https://api.github.com/repos/ros2/design/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ros2/design/statuses/{sha}","languages_url":"https://api.github.com/repos/ros2/design/languages","stargazers_url":"https://api.github.com/repos/ros2/design/stargazers","contributors_url":"https://api.github.com/repos/ros2/design/contributors","subscribers_url":"https://api.github.com/repos/ros2/design/subscribers","subscription_url":"https://api.github.com/repos/ros2/design/subscription","commits_url":"https://api.github.com/repos/ros2/design/commits{/sha}","git_commits_url":"https://api.github.com/repos/ros2/design/git/commits{/sha}","comments_url":"https://api.github.com/repos/ros2/design/comments{/number}","issue_comment_url":"https://api.github.com/repos/ros2/design/issues/comments{/number}","contents_url":"https://api.github.com/repos/ros2/design/contents/{+path}","compare_url":"https://api.github.com/repos/ros2/design/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ros2/design/merges","archive_url":"https://api.github.com/repos/ros2/design/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ros2/design/downloads","issues_url":"https://api.github.com/repos/ros2/design/issues{/number}","pulls_url":"https://api.github.com/repos/ros2/design/pulls{/number}","milestones_url":"https://api.github.com/repos/ros2/design/milestones{/number}","notifications_url":"https://api.github.com/repos/ros2/design/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ros2/design/labels{/name}","releases_url":"https://api.github.com/repos/ros2/design/releases{/id}","deployments_url":"https://api.github.com/repos/ros2/design/deployments","created_at":"2013-11-08T18:56:29Z","updated_at":"2018-04-17T14:51:35Z","pushed_at":"2018-04-17T15:09:04Z","git_url":"git://github.com/ros2/design.git","ssh_url":"git@github.com:ros2/design.git","clone_url":"https://github.com/ros2/design.git","svn_url":"https://github.com/ros2/design","homepage":"http://design.ros2.org/","size":1409,"stargazers_count":67,"watchers_count":67,"language":"JavaScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":79,"mirror_url":null,"archived":false,"open_issues_count":26,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":79,"open_issues":26,"watchers":67,"default_branch":"gh-pages"}},"_links":{"self":{"href":"https://api.github.com/repos/ros2/design/pulls/168"},"html":{"href":"https://github.com/ros2/design/pull/168"},"issue":{"href":"https://api.github.com/repos/ros2/design/issues/168"},"comments":{"href":"https://api.github.com/repos/ros2/design/issues/168/comments"},"review_comments":{"href":"https://api.github.com/repos/ros2/design/pulls/168/comments"},"review_comment":{"href":"https://api.github.com/repos/ros2/design/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ros2/design/pulls/168/commits"},"statuses":{"href":"https://api.github.com/repos/ros2/design/statuses/9974be391470c2b360805a34631c60b57298d830"}},"author_association":"OWNER"}}
{"actor":{"display_login":"wjwwood"}}