{"action":"created","comment":{"url":"https://api.github.com/repos/Opentrons/opentrons/pulls/comments/150669200","pull_request_review_id":76254260,"id":150669200,"diff_hunk":"@@ -2,7 +2,8 @@\n \n SHELL := /bin/bash\n \n-.PHONY: test docs publish clean install dev\n+.PHONY: test docs publish clean install exe dev info_device sync_device active_devices \\","path":"api/Makefile","position":5,"original_position":5,"commit_id":"f380d32630f7a5a42b1efb026a4fcec79ff5fa87","original_commit_id":"f380d32630f7a5a42b1efb026a4fcec79ff5fa87","user":{"login":"mcous","id":2963448,"avatar_url":"https://avatars1.githubusercontent.com/u/2963448?v=4","gravatar_id":"","url":"https://api.github.com/users/mcous","html_url":"https://github.com/mcous","followers_url":"https://api.github.com/users/mcous/followers","following_url":"https://api.github.com/users/mcous/following{/other_user}","gists_url":"https://api.github.com/users/mcous/gists{/gist_id}","starred_url":"https://api.github.com/users/mcous/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mcous/subscriptions","organizations_url":"https://api.github.com/users/mcous/orgs","repos_url":"https://api.github.com/users/mcous/repos","events_url":"https://api.github.com/users/mcous/events{/privacy}","received_events_url":"https://api.github.com/users/mcous/received_events","type":"User","site_admin":false},"body":"I've been following the following [Makefile style guide](http://clarkgrubb.com/makefile-style-guide) for phony targets. It recommends adding the phony directive directly above each phony task (makefile pre-reqs are cumulative). I've been liking this way of doing things, and you can see the app makefile for a live example.\r\n\r\n```make\r\n# ...\r\n.PHONY: info_device\r\ninfo_device:\r\n\tresin device $(OT_DEVICE_ID)\r\n\r\n.PHONY: sync_device\r\nsync_device: clean\r\n\tresin sync $(OT_DEVICE_ID) --source ./ --destination /usr/src/api --progress\r\n# ...\r\n```","created_at":"2017-11-13T21:24:13Z","updated_at":"2017-11-13T21:28:28Z","html_url":"https://github.com/Opentrons/opentrons/pull/422#discussion_r150669200","pull_request_url":"https://api.github.com/repos/Opentrons/opentrons/pulls/422","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/comments/150669200"},"html":{"href":"https://github.com/Opentrons/opentrons/pull/422#discussion_r150669200"},"pull_request":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/422"}}},"pull_request":{"url":"https://api.github.com/repos/Opentrons/opentrons/pulls/422","id":152170274,"html_url":"https://github.com/Opentrons/opentrons/pull/422","diff_url":"https://github.com/Opentrons/opentrons/pull/422.diff","patch_url":"https://github.com/Opentrons/opentrons/pull/422.patch","issue_url":"https://api.github.com/repos/Opentrons/opentrons/issues/422","number":422,"state":"open","locked":false,"title":"V3a resin devflow","user":{"login":"jaredgreene1","id":15115018,"avatar_url":"https://avatars0.githubusercontent.com/u/15115018?v=4","gravatar_id":"","url":"https://api.github.com/users/jaredgreene1","html_url":"https://github.com/jaredgreene1","followers_url":"https://api.github.com/users/jaredgreene1/followers","following_url":"https://api.github.com/users/jaredgreene1/following{/other_user}","gists_url":"https://api.github.com/users/jaredgreene1/gists{/gist_id}","starred_url":"https://api.github.com/users/jaredgreene1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jaredgreene1/subscriptions","organizations_url":"https://api.github.com/users/jaredgreene1/orgs","repos_url":"https://api.github.com/users/jaredgreene1/repos","events_url":"https://api.github.com/users/jaredgreene1/events{/privacy}","received_events_url":"https://api.github.com/users/jaredgreene1/received_events","type":"User","site_admin":false},"body":"## overview\r\n\r\nCreates targets in the api Makefile that should make developing with devices easier\r\n\r\nThis PR includes:\r\n\r\n- [X] Chore work\r\n- [ ] Bug fixes\r\n- [ ] Backwards-compatible feature additions\r\n- [ ] Breaking changes\r\n- [ ] Documentation updates\r\n- [ ] Test updates\r\n\r\n**Note**: If you did not check \"Documentation updates\" and/or \"Test updates\" then your PR may not be ready!\r\n\r\n## changelog\r\n\r\n1) The development process that these targets are defined around is as follows:\r\n- `$ make active_devices` to find devices that are currently online  \r\n- `export OT_DEVICE_ID=[uuid]` to select the device you want to use (uuid is found in the output from the above commands)\r\n- `make sync_device` to sync your local `api/` to the devices `api/` and restart the application\r\n- `make ssh_device` to enter the running container of the pi to debug or poke around\r\n- `make info_device` to get basic info about the device\r\n\r\n\r\n\r\n\r\n**Issues / improvements**\r\nThis is a work in progress but should serve as a robust enough flow to allow us to work on these devices as part of the api workflow.\r\n\r\n\r\n## review requests\r\n\r\nRequesting review from Artyom, Mike, and Ben \r\n\r\nDescribe any specific requests for your reviewers here. Tag any people or groups as necessary.\r\n","created_at":"2017-11-13T07:37:51Z","updated_at":"2017-11-13T21:28:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2dbb834224ca19f4a5d63781e50f70e64f14b17b","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/Opentrons/opentrons/pulls/422/commits","review_comments_url":"https://api.github.com/repos/Opentrons/opentrons/pulls/422/comments","review_comment_url":"https://api.github.com/repos/Opentrons/opentrons/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Opentrons/opentrons/issues/422/comments","statuses_url":"https://api.github.com/repos/Opentrons/opentrons/statuses/f380d32630f7a5a42b1efb026a4fcec79ff5fa87","head":{"label":"Opentrons:v3a-resin-devflow","ref":"v3a-resin-devflow","sha":"f380d32630f7a5a42b1efb026a4fcec79ff5fa87","user":{"login":"Opentrons","id":6139147,"avatar_url":"https://avatars2.githubusercontent.com/u/6139147?v=4","gravatar_id":"","url":"https://api.github.com/users/Opentrons","html_url":"https://github.com/Opentrons","followers_url":"https://api.github.com/users/Opentrons/followers","following_url":"https://api.github.com/users/Opentrons/following{/other_user}","gists_url":"https://api.github.com/users/Opentrons/gists{/gist_id}","starred_url":"https://api.github.com/users/Opentrons/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Opentrons/subscriptions","organizations_url":"https://api.github.com/users/Opentrons/orgs","repos_url":"https://api.github.com/users/Opentrons/repos","events_url":"https://api.github.com/users/Opentrons/events{/privacy}","received_events_url":"https://api.github.com/users/Opentrons/received_events","type":"Organization","site_admin":false},"repo":{"id":38644841,"name":"opentrons","full_name":"Opentrons/opentrons","owner":{"login":"Opentrons","id":6139147,"avatar_url":"https://avatars2.githubusercontent.com/u/6139147?v=4","gravatar_id":"","url":"https://api.github.com/users/Opentrons","html_url":"https://github.com/Opentrons","followers_url":"https://api.github.com/users/Opentrons/followers","following_url":"https://api.github.com/users/Opentrons/following{/other_user}","gists_url":"https://api.github.com/users/Opentrons/gists{/gist_id}","starred_url":"https://api.github.com/users/Opentrons/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Opentrons/subscriptions","organizations_url":"https://api.github.com/users/Opentrons/orgs","repos_url":"https://api.github.com/users/Opentrons/repos","events_url":"https://api.github.com/users/Opentrons/events{/privacy}","received_events_url":"https://api.github.com/users/Opentrons/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Opentrons/opentrons","description":"Python API for writing protocols and running them on Opentrons robots","fork":false,"url":"https://api.github.com/repos/Opentrons/opentrons","forks_url":"https://api.github.com/repos/Opentrons/opentrons/forks","keys_url":"https://api.github.com/repos/Opentrons/opentrons/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Opentrons/opentrons/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Opentrons/opentrons/teams","hooks_url":"https://api.github.com/repos/Opentrons/opentrons/hooks","issue_events_url":"https://api.github.com/repos/Opentrons/opentrons/issues/events{/number}","events_url":"https://api.github.com/repos/Opentrons/opentrons/events","assignees_url":"https://api.github.com/repos/Opentrons/opentrons/assignees{/user}","branches_url":"https://api.github.com/repos/Opentrons/opentrons/branches{/branch}","tags_url":"https://api.github.com/repos/Opentrons/opentrons/tags","blobs_url":"https://api.github.com/repos/Opentrons/opentrons/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Opentrons/opentrons/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Opentrons/opentrons/git/refs{/sha}","trees_url":"https://api.github.com/repos/Opentrons/opentrons/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Opentrons/opentrons/statuses/{sha}","languages_url":"https://api.github.com/repos/Opentrons/opentrons/languages","stargazers_url":"https://api.github.com/repos/Opentrons/opentrons/stargazers","contributors_url":"https://api.github.com/repos/Opentrons/opentrons/contributors","subscribers_url":"https://api.github.com/repos/Opentrons/opentrons/subscribers","subscription_url":"https://api.github.com/repos/Opentrons/opentrons/subscription","commits_url":"https://api.github.com/repos/Opentrons/opentrons/commits{/sha}","git_commits_url":"https://api.github.com/repos/Opentrons/opentrons/git/commits{/sha}","comments_url":"https://api.github.com/repos/Opentrons/opentrons/comments{/number}","issue_comment_url":"https://api.github.com/repos/Opentrons/opentrons/issues/comments{/number}","contents_url":"https://api.github.com/repos/Opentrons/opentrons/contents/{+path}","compare_url":"https://api.github.com/repos/Opentrons/opentrons/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Opentrons/opentrons/merges","archive_url":"https://api.github.com/repos/Opentrons/opentrons/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Opentrons/opentrons/downloads","issues_url":"https://api.github.com/repos/Opentrons/opentrons/issues{/number}","pulls_url":"https://api.github.com/repos/Opentrons/opentrons/pulls{/number}","milestones_url":"https://api.github.com/repos/Opentrons/opentrons/milestones{/number}","notifications_url":"https://api.github.com/repos/Opentrons/opentrons/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Opentrons/opentrons/labels{/name}","releases_url":"https://api.github.com/repos/Opentrons/opentrons/releases{/id}","deployments_url":"https://api.github.com/repos/Opentrons/opentrons/deployments","created_at":"2015-07-06T20:41:01Z","updated_at":"2017-11-09T19:25:07Z","pushed_at":"2017-11-13T21:11:26Z","git_url":"git://github.com/Opentrons/opentrons.git","ssh_url":"git@github.com:Opentrons/opentrons.git","clone_url":"https://github.com/Opentrons/opentrons.git","svn_url":"https://github.com/Opentrons/opentrons","homepage":"","size":16101,"stargazers_count":36,"watchers_count":36,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":25,"mirror_url":null,"archived":false,"open_issues_count":48,"forks":25,"open_issues":48,"watchers":36,"default_branch":"develop"}},"base":{"label":"Opentrons:v3a","ref":"v3a","sha":"be3615e76b0d68ca5f66aee0b17a3520834a625d","user":{"login":"Opentrons","id":6139147,"avatar_url":"https://avatars2.githubusercontent.com/u/6139147?v=4","gravatar_id":"","url":"https://api.github.com/users/Opentrons","html_url":"https://github.com/Opentrons","followers_url":"https://api.github.com/users/Opentrons/followers","following_url":"https://api.github.com/users/Opentrons/following{/other_user}","gists_url":"https://api.github.com/users/Opentrons/gists{/gist_id}","starred_url":"https://api.github.com/users/Opentrons/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Opentrons/subscriptions","organizations_url":"https://api.github.com/users/Opentrons/orgs","repos_url":"https://api.github.com/users/Opentrons/repos","events_url":"https://api.github.com/users/Opentrons/events{/privacy}","received_events_url":"https://api.github.com/users/Opentrons/received_events","type":"Organization","site_admin":false},"repo":{"id":38644841,"name":"opentrons","full_name":"Opentrons/opentrons","owner":{"login":"Opentrons","id":6139147,"avatar_url":"https://avatars2.githubusercontent.com/u/6139147?v=4","gravatar_id":"","url":"https://api.github.com/users/Opentrons","html_url":"https://github.com/Opentrons","followers_url":"https://api.github.com/users/Opentrons/followers","following_url":"https://api.github.com/users/Opentrons/following{/other_user}","gists_url":"https://api.github.com/users/Opentrons/gists{/gist_id}","starred_url":"https://api.github.com/users/Opentrons/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Opentrons/subscriptions","organizations_url":"https://api.github.com/users/Opentrons/orgs","repos_url":"https://api.github.com/users/Opentrons/repos","events_url":"https://api.github.com/users/Opentrons/events{/privacy}","received_events_url":"https://api.github.com/users/Opentrons/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Opentrons/opentrons","description":"Python API for writing protocols and running them on Opentrons robots","fork":false,"url":"https://api.github.com/repos/Opentrons/opentrons","forks_url":"https://api.github.com/repos/Opentrons/opentrons/forks","keys_url":"https://api.github.com/repos/Opentrons/opentrons/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Opentrons/opentrons/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Opentrons/opentrons/teams","hooks_url":"https://api.github.com/repos/Opentrons/opentrons/hooks","issue_events_url":"https://api.github.com/repos/Opentrons/opentrons/issues/events{/number}","events_url":"https://api.github.com/repos/Opentrons/opentrons/events","assignees_url":"https://api.github.com/repos/Opentrons/opentrons/assignees{/user}","branches_url":"https://api.github.com/repos/Opentrons/opentrons/branches{/branch}","tags_url":"https://api.github.com/repos/Opentrons/opentrons/tags","blobs_url":"https://api.github.com/repos/Opentrons/opentrons/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Opentrons/opentrons/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Opentrons/opentrons/git/refs{/sha}","trees_url":"https://api.github.com/repos/Opentrons/opentrons/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Opentrons/opentrons/statuses/{sha}","languages_url":"https://api.github.com/repos/Opentrons/opentrons/languages","stargazers_url":"https://api.github.com/repos/Opentrons/opentrons/stargazers","contributors_url":"https://api.github.com/repos/Opentrons/opentrons/contributors","subscribers_url":"https://api.github.com/repos/Opentrons/opentrons/subscribers","subscription_url":"https://api.github.com/repos/Opentrons/opentrons/subscription","commits_url":"https://api.github.com/repos/Opentrons/opentrons/commits{/sha}","git_commits_url":"https://api.github.com/repos/Opentrons/opentrons/git/commits{/sha}","comments_url":"https://api.github.com/repos/Opentrons/opentrons/comments{/number}","issue_comment_url":"https://api.github.com/repos/Opentrons/opentrons/issues/comments{/number}","contents_url":"https://api.github.com/repos/Opentrons/opentrons/contents/{+path}","compare_url":"https://api.github.com/repos/Opentrons/opentrons/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Opentrons/opentrons/merges","archive_url":"https://api.github.com/repos/Opentrons/opentrons/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Opentrons/opentrons/downloads","issues_url":"https://api.github.com/repos/Opentrons/opentrons/issues{/number}","pulls_url":"https://api.github.com/repos/Opentrons/opentrons/pulls{/number}","milestones_url":"https://api.github.com/repos/Opentrons/opentrons/milestones{/number}","notifications_url":"https://api.github.com/repos/Opentrons/opentrons/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Opentrons/opentrons/labels{/name}","releases_url":"https://api.github.com/repos/Opentrons/opentrons/releases{/id}","deployments_url":"https://api.github.com/repos/Opentrons/opentrons/deployments","created_at":"2015-07-06T20:41:01Z","updated_at":"2017-11-09T19:25:07Z","pushed_at":"2017-11-13T21:11:26Z","git_url":"git://github.com/Opentrons/opentrons.git","ssh_url":"git@github.com:Opentrons/opentrons.git","clone_url":"https://github.com/Opentrons/opentrons.git","svn_url":"https://github.com/Opentrons/opentrons","homepage":"","size":16101,"stargazers_count":36,"watchers_count":36,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":25,"mirror_url":null,"archived":false,"open_issues_count":48,"forks":25,"open_issues":48,"watchers":36,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/422"},"html":{"href":"https://github.com/Opentrons/opentrons/pull/422"},"issue":{"href":"https://api.github.com/repos/Opentrons/opentrons/issues/422"},"comments":{"href":"https://api.github.com/repos/Opentrons/opentrons/issues/422/comments"},"review_comments":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/422/comments"},"review_comment":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/422/commits"},"statuses":{"href":"https://api.github.com/repos/Opentrons/opentrons/statuses/f380d32630f7a5a42b1efb026a4fcec79ff5fa87"}},"author_association":"NONE"}}
{"actor":{"display_login":"mcous"}}