{"action":"created","comment":{"url":"https://api.github.com/repos/Shopify/ruby/pulls/comments/71204225","id":71204225,"diff_hunk":"@@ -24,6 +24,9 @@ override_dh_auto_configure:\n override_dh_auto_install:\n \tdh_auto_install $(DH_FLAGS) --destdir \"$(DESTDIR)\"\n \tRUBYLIB=\"$(RUBYLIB)\" \"$(DESTDIR)$(PREFIX)/bin/ruby\" debian/gem install $(ROOT)/debian/gems/*.gem\n+\tmkdir \"$(DESTDIR)$(PREFIX)/shims\"","path":"debian/rules.erb","position":null,"original_position":15,"commit_id":"893d29d637645311a85f3a8ebfd04820d2ee8b7e","original_commit_id":"d9f62e4c1a7136c0fc28915d210cb5c96ad056d7","user":{"login":"as3richa","id":16654100,"avatar_url":"https://avatars.githubusercontent.com/u/16654100?v=3","gravatar_id":"","url":"https://api.github.com/users/as3richa","html_url":"https://github.com/as3richa","followers_url":"https://api.github.com/users/as3richa/followers","following_url":"https://api.github.com/users/as3richa/following{/other_user}","gists_url":"https://api.github.com/users/as3richa/gists{/gist_id}","starred_url":"https://api.github.com/users/as3richa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/as3richa/subscriptions","organizations_url":"https://api.github.com/users/as3richa/orgs","repos_url":"https://api.github.com/users/as3richa/repos","events_url":"https://api.github.com/users/as3richa/events{/privacy}","received_events_url":"https://api.github.com/users/as3richa/received_events","type":"User","site_admin":false},"body":"Done","created_at":"2016-07-18T18:43:04Z","updated_at":"2016-07-18T18:43:04Z","html_url":"https://github.com/Shopify/ruby/pull/16#discussion_r71204225","pull_request_url":"https://api.github.com/repos/Shopify/ruby/pulls/16","_links":{"self":{"href":"https://api.github.com/repos/Shopify/ruby/pulls/comments/71204225"},"html":{"href":"https://github.com/Shopify/ruby/pull/16#discussion_r71204225"},"pull_request":{"href":"https://api.github.com/repos/Shopify/ruby/pulls/16"}}},"pull_request":{"url":"https://api.github.com/repos/Shopify/ruby/pulls/16","id":77228934,"html_url":"https://github.com/Shopify/ruby/pull/16","diff_url":"https://github.com/Shopify/ruby/pull/16.diff","patch_url":"https://github.com/Shopify/ruby/pull/16.patch","issue_url":"https://api.github.com/repos/Shopify/ruby/issues/16","number":16,"state":"open","locked":false,"title":"Wrapperless Ruby","user":{"login":"as3richa","id":16654100,"avatar_url":"https://avatars.githubusercontent.com/u/16654100?v=3","gravatar_id":"","url":"https://api.github.com/users/as3richa","html_url":"https://github.com/as3richa","followers_url":"https://api.github.com/users/as3richa/followers","following_url":"https://api.github.com/users/as3richa/following{/other_user}","gists_url":"https://api.github.com/users/as3richa/gists{/gist_id}","starred_url":"https://api.github.com/users/as3richa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/as3richa/subscriptions","organizations_url":"https://api.github.com/users/as3richa/orgs","repos_url":"https://api.github.com/users/as3richa/repos","events_url":"https://api.github.com/users/as3richa/events{/privacy}","received_events_url":"https://api.github.com/users/as3richa/received_events","type":"User","site_admin":false},"body":"@csfrancis @shivnagarajan @fbogsany @dwradcliffe \r\n\r\nAfter a whole lot of blood, sweat, and tears, I've managed to build packages that don't rely on the wrapper, but still give us the benefit of a version-specific directory per Ruby. I also cleaned and reworked the build process for these Rubies.\r\n\r\nWith this system, we use `update-alternatives` to allow multiple versions of Ruby to be installed in tandem. `update-alternatives` works by mapping a given binary to one of several alternatives, via links. The \"active\" version of the binary is provided by the alternative with the highest priority - in this PR we use a number that is ascending as a function of Ruby version, hence more recent Ruby versions will become active as they are installed by default. This should make upgrades relatively painless. If it is ever necessary to do so, uninstalling the active version of Ruby yields control to the Ruby with the next highest priority (ie. the second most recent Ruby version). **NB.** this functionality would only need to be exercised in the case of upgrades or downgrades, and even then we don't anticipate having more than 2 versions of Ruby on a given host.\r\n\r\nThe build process for Rubies has changed substantially. Rather than using tags to determine Ruby/Debian versions or names, we allow the builder to specify several parameters in `build.yml`:\r\n- `ref` - a Git tree (branch, commit, or tag) corresponding to the Ruby source to be built\r\n- `package-suffix` - an optional name suffix for the compiled Debian packages\r\n- `package-version` - the version number of the compiled Debian package\r\n- `memo` - a brief description of the package\r\n\r\nWith this system, the build process would look at `version.h` in `ref` in order to programatically determine the Ruby version being built.\r\n\r\nHow I envisage these parameters being used:\r\n- For general-use production Rubies, `package-suffix` should remain blank. The compiled runtime package would be named `shopify-ruby-wrapperless-2.3.1`, for instance, and would have Debian package version `package-version`. `package-version` would start at `1` and would be bumped every time a new build of the same Ruby version needed to be deployed (however experience suggests that that won't happen frequently).\r\n- For heavily-customized or specialized Ruby builds, `package-suffix` would be set with some descriptive qualifier, and the compiled runtime package would be named `shopify-ruby-wrapperless-2.1.6-faster-fib`, for instance. The same comment about Debian versioning applies.\r\n\r\nI think this is pretty common-sense. \"Normal\" Rubies have a short, consistent name that has a 1-to-1 correspondence with Ruby versions. However, if specialized use cases require specialized Rubies, it's trivial to tack a qualifier onto the package. Finally, versions start at 1 and strictly ascend as necessary (no more `shopify2` crap), but that probably won't be often.\r\n\r\n:tophat: looked pretty good, but I'll test further tomorrow. I'm yanking the packages for tonight because they don't have the latest commit fixing the shims.\r\n\r\nI'm particularly curious what @fbogsany and @shivnagarajan think of the build process/versioning, since we discussed it at length during standup today.","created_at":"2016-07-13T04:33:15Z","updated_at":"2016-07-18T18:43:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ebd13270e7f712f568eb624b6be80bc206fb3ce1","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/Shopify/ruby/pulls/16/commits","review_comments_url":"https://api.github.com/repos/Shopify/ruby/pulls/16/comments","review_comment_url":"https://api.github.com/repos/Shopify/ruby/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Shopify/ruby/issues/16/comments","statuses_url":"https://api.github.com/repos/Shopify/ruby/statuses/893d29d637645311a85f3a8ebfd04820d2ee8b7e","head":{"label":"Shopify:debian_pbuilder_wrapperless","ref":"debian_pbuilder_wrapperless","sha":"893d29d637645311a85f3a8ebfd04820d2ee8b7e","user":{"login":"Shopify","id":8085,"avatar_url":"https://avatars.githubusercontent.com/u/8085?v=3","gravatar_id":"","url":"https://api.github.com/users/Shopify","html_url":"https://github.com/Shopify","followers_url":"https://api.github.com/users/Shopify/followers","following_url":"https://api.github.com/users/Shopify/following{/other_user}","gists_url":"https://api.github.com/users/Shopify/gists{/gist_id}","starred_url":"https://api.github.com/users/Shopify/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Shopify/subscriptions","organizations_url":"https://api.github.com/users/Shopify/orgs","repos_url":"https://api.github.com/users/Shopify/repos","events_url":"https://api.github.com/users/Shopify/events{/privacy}","received_events_url":"https://api.github.com/users/Shopify/received_events","type":"Organization","site_admin":false},"repo":{"id":18647317,"name":"ruby","full_name":"Shopify/ruby","owner":{"login":"Shopify","id":8085,"avatar_url":"https://avatars.githubusercontent.com/u/8085?v=3","gravatar_id":"","url":"https://api.github.com/users/Shopify","html_url":"https://github.com/Shopify","followers_url":"https://api.github.com/users/Shopify/followers","following_url":"https://api.github.com/users/Shopify/following{/other_user}","gists_url":"https://api.github.com/users/Shopify/gists{/gist_id}","starred_url":"https://api.github.com/users/Shopify/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Shopify/subscriptions","organizations_url":"https://api.github.com/users/Shopify/orgs","repos_url":"https://api.github.com/users/Shopify/repos","events_url":"https://api.github.com/users/Shopify/events{/privacy}","received_events_url":"https://api.github.com/users/Shopify/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Shopify/ruby","description":"The Ruby Programming Language","fork":true,"url":"https://api.github.com/repos/Shopify/ruby","forks_url":"https://api.github.com/repos/Shopify/ruby/forks","keys_url":"https://api.github.com/repos/Shopify/ruby/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Shopify/ruby/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Shopify/ruby/teams","hooks_url":"https://api.github.com/repos/Shopify/ruby/hooks","issue_events_url":"https://api.github.com/repos/Shopify/ruby/issues/events{/number}","events_url":"https://api.github.com/repos/Shopify/ruby/events","assignees_url":"https://api.github.com/repos/Shopify/ruby/assignees{/user}","branches_url":"https://api.github.com/repos/Shopify/ruby/branches{/branch}","tags_url":"https://api.github.com/repos/Shopify/ruby/tags","blobs_url":"https://api.github.com/repos/Shopify/ruby/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Shopify/ruby/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Shopify/ruby/git/refs{/sha}","trees_url":"https://api.github.com/repos/Shopify/ruby/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Shopify/ruby/statuses/{sha}","languages_url":"https://api.github.com/repos/Shopify/ruby/languages","stargazers_url":"https://api.github.com/repos/Shopify/ruby/stargazers","contributors_url":"https://api.github.com/repos/Shopify/ruby/contributors","subscribers_url":"https://api.github.com/repos/Shopify/ruby/subscribers","subscription_url":"https://api.github.com/repos/Shopify/ruby/subscription","commits_url":"https://api.github.com/repos/Shopify/ruby/commits{/sha}","git_commits_url":"https://api.github.com/repos/Shopify/ruby/git/commits{/sha}","comments_url":"https://api.github.com/repos/Shopify/ruby/comments{/number}","issue_comment_url":"https://api.github.com/repos/Shopify/ruby/issues/comments{/number}","contents_url":"https://api.github.com/repos/Shopify/ruby/contents/{+path}","compare_url":"https://api.github.com/repos/Shopify/ruby/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Shopify/ruby/merges","archive_url":"https://api.github.com/repos/Shopify/ruby/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Shopify/ruby/downloads","issues_url":"https://api.github.com/repos/Shopify/ruby/issues{/number}","pulls_url":"https://api.github.com/repos/Shopify/ruby/pulls{/number}","milestones_url":"https://api.github.com/repos/Shopify/ruby/milestones{/number}","notifications_url":"https://api.github.com/repos/Shopify/ruby/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Shopify/ruby/labels{/name}","releases_url":"https://api.github.com/repos/Shopify/ruby/releases{/id}","deployments_url":"https://api.github.com/repos/Shopify/ruby/deployments","created_at":"2014-04-10T18:35:13Z","updated_at":"2016-06-20T13:43:03Z","pushed_at":"2016-07-18T18:41:35Z","git_url":"git://github.com/Shopify/ruby.git","ssh_url":"git@github.com:Shopify/ruby.git","clone_url":"https://github.com/Shopify/ruby.git","svn_url":"https://github.com/Shopify/ruby","homepage":"http://www.ruby-lang.org/","size":174052,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":false,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":8,"forks":1,"open_issues":8,"watchers":0,"default_branch":"2.1"}},"base":{"label":"Shopify:debian_pbuilder","ref":"debian_pbuilder","sha":"5ca9040674e9e1586ff896275a851f91f9aa8728","user":{"login":"Shopify","id":8085,"avatar_url":"https://avatars.githubusercontent.com/u/8085?v=3","gravatar_id":"","url":"https://api.github.com/users/Shopify","html_url":"https://github.com/Shopify","followers_url":"https://api.github.com/users/Shopify/followers","following_url":"https://api.github.com/users/Shopify/following{/other_user}","gists_url":"https://api.github.com/users/Shopify/gists{/gist_id}","starred_url":"https://api.github.com/users/Shopify/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Shopify/subscriptions","organizations_url":"https://api.github.com/users/Shopify/orgs","repos_url":"https://api.github.com/users/Shopify/repos","events_url":"https://api.github.com/users/Shopify/events{/privacy}","received_events_url":"https://api.github.com/users/Shopify/received_events","type":"Organization","site_admin":false},"repo":{"id":18647317,"name":"ruby","full_name":"Shopify/ruby","owner":{"login":"Shopify","id":8085,"avatar_url":"https://avatars.githubusercontent.com/u/8085?v=3","gravatar_id":"","url":"https://api.github.com/users/Shopify","html_url":"https://github.com/Shopify","followers_url":"https://api.github.com/users/Shopify/followers","following_url":"https://api.github.com/users/Shopify/following{/other_user}","gists_url":"https://api.github.com/users/Shopify/gists{/gist_id}","starred_url":"https://api.github.com/users/Shopify/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Shopify/subscriptions","organizations_url":"https://api.github.com/users/Shopify/orgs","repos_url":"https://api.github.com/users/Shopify/repos","events_url":"https://api.github.com/users/Shopify/events{/privacy}","received_events_url":"https://api.github.com/users/Shopify/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Shopify/ruby","description":"The Ruby Programming Language","fork":true,"url":"https://api.github.com/repos/Shopify/ruby","forks_url":"https://api.github.com/repos/Shopify/ruby/forks","keys_url":"https://api.github.com/repos/Shopify/ruby/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Shopify/ruby/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Shopify/ruby/teams","hooks_url":"https://api.github.com/repos/Shopify/ruby/hooks","issue_events_url":"https://api.github.com/repos/Shopify/ruby/issues/events{/number}","events_url":"https://api.github.com/repos/Shopify/ruby/events","assignees_url":"https://api.github.com/repos/Shopify/ruby/assignees{/user}","branches_url":"https://api.github.com/repos/Shopify/ruby/branches{/branch}","tags_url":"https://api.github.com/repos/Shopify/ruby/tags","blobs_url":"https://api.github.com/repos/Shopify/ruby/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Shopify/ruby/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Shopify/ruby/git/refs{/sha}","trees_url":"https://api.github.com/repos/Shopify/ruby/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Shopify/ruby/statuses/{sha}","languages_url":"https://api.github.com/repos/Shopify/ruby/languages","stargazers_url":"https://api.github.com/repos/Shopify/ruby/stargazers","contributors_url":"https://api.github.com/repos/Shopify/ruby/contributors","subscribers_url":"https://api.github.com/repos/Shopify/ruby/subscribers","subscription_url":"https://api.github.com/repos/Shopify/ruby/subscription","commits_url":"https://api.github.com/repos/Shopify/ruby/commits{/sha}","git_commits_url":"https://api.github.com/repos/Shopify/ruby/git/commits{/sha}","comments_url":"https://api.github.com/repos/Shopify/ruby/comments{/number}","issue_comment_url":"https://api.github.com/repos/Shopify/ruby/issues/comments{/number}","contents_url":"https://api.github.com/repos/Shopify/ruby/contents/{+path}","compare_url":"https://api.github.com/repos/Shopify/ruby/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Shopify/ruby/merges","archive_url":"https://api.github.com/repos/Shopify/ruby/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Shopify/ruby/downloads","issues_url":"https://api.github.com/repos/Shopify/ruby/issues{/number}","pulls_url":"https://api.github.com/repos/Shopify/ruby/pulls{/number}","milestones_url":"https://api.github.com/repos/Shopify/ruby/milestones{/number}","notifications_url":"https://api.github.com/repos/Shopify/ruby/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Shopify/ruby/labels{/name}","releases_url":"https://api.github.com/repos/Shopify/ruby/releases{/id}","deployments_url":"https://api.github.com/repos/Shopify/ruby/deployments","created_at":"2014-04-10T18:35:13Z","updated_at":"2016-06-20T13:43:03Z","pushed_at":"2016-07-18T18:41:35Z","git_url":"git://github.com/Shopify/ruby.git","ssh_url":"git@github.com:Shopify/ruby.git","clone_url":"https://github.com/Shopify/ruby.git","svn_url":"https://github.com/Shopify/ruby","homepage":"http://www.ruby-lang.org/","size":174052,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":false,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":8,"forks":1,"open_issues":8,"watchers":0,"default_branch":"2.1"}},"_links":{"self":{"href":"https://api.github.com/repos/Shopify/ruby/pulls/16"},"html":{"href":"https://github.com/Shopify/ruby/pull/16"},"issue":{"href":"https://api.github.com/repos/Shopify/ruby/issues/16"},"comments":{"href":"https://api.github.com/repos/Shopify/ruby/issues/16/comments"},"review_comments":{"href":"https://api.github.com/repos/Shopify/ruby/pulls/16/comments"},"review_comment":{"href":"https://api.github.com/repos/Shopify/ruby/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Shopify/ruby/pulls/16/commits"},"statuses":{"href":"https://api.github.com/repos/Shopify/ruby/statuses/893d29d637645311a85f3a8ebfd04820d2ee8b7e"}}}}
{"actor":{"display_login":"as3richa"}}