{"action":"created","issue":{"url":"https://api.github.com/repos/dotnet/cli/issues/44","repository_url":"https://api.github.com/repos/dotnet/cli","labels_url":"https://api.github.com/repos/dotnet/cli/issues/44/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/cli/issues/44/comments","events_url":"https://api.github.com/repos/dotnet/cli/issues/44/events","html_url":"https://github.com/dotnet/cli/issues/44","id":111134268,"number":44,"title":"PROPOSED: dotnet CLI command layering","user":{"login":"piotrpMSFT","id":2379589,"avatar_url":"https://avatars.githubusercontent.com/u/2379589?v=3","gravatar_id":"","url":"https://api.github.com/users/piotrpMSFT","html_url":"https://github.com/piotrpMSFT","followers_url":"https://api.github.com/users/piotrpMSFT/followers","following_url":"https://api.github.com/users/piotrpMSFT/following{/other_user}","gists_url":"https://api.github.com/users/piotrpMSFT/gists{/gist_id}","starred_url":"https://api.github.com/users/piotrpMSFT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/piotrpMSFT/subscriptions","organizations_url":"https://api.github.com/users/piotrpMSFT/orgs","repos_url":"https://api.github.com/users/piotrpMSFT/repos","events_url":"https://api.github.com/users/piotrpMSFT/events{/privacy}","received_events_url":"https://api.github.com/users/piotrpMSFT/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/dotnet/cli/labels/commands","name":"commands","color":"fad8c7"},{"url":"https://api.github.com/repos/dotnet/cli/labels/help%20wanted","name":"help wanted","color":"159818"},{"url":"https://api.github.com/repos/dotnet/cli/labels/question","name":"question","color":"cc317c"}],"state":"closed","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/dotnet/cli/milestones/7","html_url":"https://github.com/dotnet/cli/milestones/Backlog","labels_url":"https://api.github.com/repos/dotnet/cli/milestones/7/labels","id":1426021,"number":7,"title":"Backlog","description":null,"creator":{"login":"piotrpMSFT","id":2379589,"avatar_url":"https://avatars.githubusercontent.com/u/2379589?v=3","gravatar_id":"","url":"https://api.github.com/users/piotrpMSFT","html_url":"https://github.com/piotrpMSFT","followers_url":"https://api.github.com/users/piotrpMSFT/followers","following_url":"https://api.github.com/users/piotrpMSFT/following{/other_user}","gists_url":"https://api.github.com/users/piotrpMSFT/gists{/gist_id}","starred_url":"https://api.github.com/users/piotrpMSFT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/piotrpMSFT/subscriptions","organizations_url":"https://api.github.com/users/piotrpMSFT/orgs","repos_url":"https://api.github.com/users/piotrpMSFT/repos","events_url":"https://api.github.com/users/piotrpMSFT/events{/privacy}","received_events_url":"https://api.github.com/users/piotrpMSFT/received_events","type":"User","site_admin":false},"open_issues":188,"closed_issues":49,"state":"open","created_at":"2015-11-23T20:29:29Z","updated_at":"2016-03-03T08:12:27Z","due_on":null,"closed_at":null},"comments":2,"created_at":"2015-10-13T08:47:09Z","updated_at":"2016-03-03T08:12:27Z","closed_at":"2016-03-03T08:12:27Z","body":"# Proposed dotnet CLI command layering\r\nCommands in the dotnet CLI can represent atomic tasks, such as \"Compile source to IL with the csc compiler\" or more complicated workflows like \"dotnet-compile\" which should restore dependencies, compile to IL, then compile that IL to native.\r\n\r\nWe intend for workflows to be decomposable into their base atomic components, allowing for easy modification and integration into other workflow or build management systems.\r\n\r\nWe would also like for atomic commands to provide users with a common style so they can reason about the commands easily.\r\n\r\nFinally, we expect that a single executable can provide the implementation of several commands [consider NuGet restore, install, list]. We shouldn't need multiple copies of the executable to expose these commands, though we prefer to represent them as individual items on the path.\r\n\r\n## Requirements\r\nThe design of command layering, then, should satisfy the following requirements:\r\n1. End-to-end commands like \"dotnet-compile\" should be composed of atomic commands\r\n2. Atomic commands should have a single purpose\r\n3. Atomic commands should have a common style\r\n4. Atomic commands should follow the dotnet-<command> naming convention\r\n5. A given tool should be able to expose multiple commands\r\n\r\n## Design [proposed]\r\nThe base of the layering design is formed of the individual tools provided to dotnet developers. These tools are complemented by scripts representing atomic commands, wherein the scripts follow a similar style and each expose a single responsibility. These commands are then connected with one another via end-to-end scripts.\r\n\r\n### Layering Diagram\r\n\r\n<table align=\"center\">\r\n<tr><td COLSPAN=\"3\">dotnet-compile</td></tr>\r\n<tr><td>dotnet-restore</td><td>dotnet-compile-csc</td><td>dotnet-compile-il2native</td></tr>\r\n<tr><td>nuget</td><td>csc</td><td>il2native</td></tr>\r\n</table>\r\n\r\n### Sample Scripts\r\nThe below snippets are trimmed down representations of the aforementioned concepts. They are not intended to capture the full implementation.\r\n\r\n#### dotnet-compile\r\n    dotnet restore\r\n    dotnet compile-csc\r\n    dotnet compile-il2native\r\n\r\n#### dotnet-compile-csc\r\n    csc /target:library /out:Something.xyz *.cs"},"comment":{"url":"https://api.github.com/repos/dotnet/cli/issues/comments/191646286","html_url":"https://github.com/dotnet/cli/issues/44#issuecomment-191646286","issue_url":"https://api.github.com/repos/dotnet/cli/issues/44","id":191646286,"user":{"login":"piotrpMSFT","id":2379589,"avatar_url":"https://avatars.githubusercontent.com/u/2379589?v=3","gravatar_id":"","url":"https://api.github.com/users/piotrpMSFT","html_url":"https://github.com/piotrpMSFT","followers_url":"https://api.github.com/users/piotrpMSFT/followers","following_url":"https://api.github.com/users/piotrpMSFT/following{/other_user}","gists_url":"https://api.github.com/users/piotrpMSFT/gists{/gist_id}","starred_url":"https://api.github.com/users/piotrpMSFT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/piotrpMSFT/subscriptions","organizations_url":"https://api.github.com/users/piotrpMSFT/orgs","repos_url":"https://api.github.com/users/piotrpMSFT/repos","events_url":"https://api.github.com/users/piotrpMSFT/events{/privacy}","received_events_url":"https://api.github.com/users/piotrpMSFT/received_events","type":"User","site_admin":false},"created_at":"2016-03-03T08:12:27Z","updated_at":"2016-03-03T08:12:27Z","body":"This is fairly outdated now. "}}