{"action":"created","comment":{"url":"https://api.github.com/repos/facebook/reason/pulls/comments/167659520","pull_request_review_id":95910223,"id":167659520,"diff_hunk":"@@ -0,0 +1,140 @@\n+common_steps: &common_steps\n+  steps:\n+    - run:\n+        name: \"Install npm\"\n+        command: |\n+          curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -\n+          sudo apt-get install -y nodejs\n+          mkdir -p ~/.npm-global\n+          npm config set prefix $NPM_CONFIG_PREFIX\n+    - checkout\n+    - run:\n+        name: \"Note OCAML_VERSION for cache\"\n+        command: echo $OCAML_VERSION > ../ocaml-version\n+    - restore_cache:\n+        key: dependency-cache-{{ checksum \"../ocaml-version\" }}-{{ checksum \".circleci/config.yml\" }}-{{ checksum \"reason.opam\" }}-{{ checksum \"rebuild.opam\" }}-{{ checksum \"rtop.opam\" }}\n+    - run:\n+        name: \"Initialize opam\"\n+        command: |\n+          opam init --auto-setup --dot-profile=~/.bash_profile\n+          opam remote add ocamlorg https://opam.ocaml.org -p 0 || true\n+          opam remote remove default || true\n+    - run:\n+        name: \"Install deps\"\n+        command: |\n+          opam update\n+          opam install -y jbuilder\n+          opam install -y menhir.20170712\n+    - run:\n+        name: 'Clean'\n+        command: make clean-for-ci\n+    - run:\n+        name: 'opam pin'\n+        command: |\n+          opam pin add -y reason .\n+          opam pin add -y rtop .\n+    - save_cache:\n+        key: dependency-cache-{{ checksum \"../ocaml-version\" }}-{{ checksum \".circleci/config.yml\" }}-{{ checksum \"reason.opam\" }}-{{ checksum \"rebuild.opam\" }}-{{ checksum \"rtop.opam\" }}\n+        paths:\n+          - ~/.opam\n+          - ~/.npm-global\n+    - run:\n+        name: 'Test'\n+        command: |\n+          source ~/.bash_profile\n+          eval `opam config env`\n+          make test-ci\n+    - run:\n+        name: 'Check git is clean'\n+        command: git diff --exit-code\n+\n+version: 2\n+jobs:\n+  4.02.3:\n+    docker:\n+      - image: ocaml/opam:debian-9_ocaml-4.02.3\n+    environment:\n+      - TERM: dumb\n+      - OCAML_VERSION: \"4.02.3\"\n+      - NPM_CONFIG_PREFIX: \"~/.npm-global\"\n+    <<: *common_steps\n+  4.03.0:\n+    docker:\n+      - image: ocaml/opam:debian-9_ocaml-4.03.0\n+    environment:\n+      - TERM: dumb\n+      - OCAML_VERSION: \"4.03.0\"\n+      - NPM_CONFIG_PREFIX: \"~/.npm-global\"\n+    <<: *common_steps\n+  4.04.0:\n+    docker:\n+      - image: ocaml/opam:debian-9_ocaml-4.04.0\n+    environment:\n+      - TERM: dumb\n+      - OCAML_VERSION: \"4.04.0\"\n+      - NPM_CONFIG_PREFIX: \"~/.npm-global\"\n+    <<: *common_steps\n+  4.06.0:\n+    docker:\n+      - image: ocaml/opam:debian-9_ocaml-4.06.0\n+    environment:\n+      - TERM: dumb\n+      - OCAML_VERSION: \"4.06.0\"\n+      - NPM_CONFIG_PREFIX: \"~/.npm-global\"\n+    <<: *common_steps\n+  esy_build:\n+    docker:\n+      - image: ocaml/opam:debian-9_ocaml-4.06.0\n+    environment:\n+      - TERM: dumb\n+      - OCAML_VERSION: \"4.06.0\"\n+      - NPM_CONFIG_PREFIX: \"~/.npm-global\"\n+    steps:\n+      - checkout\n+      - run:\n+          name: \"Install npm\"\n+          command: |\n+            curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -\n+            sudo apt-get install -y nodejs\n+            mkdir -p ~/.npm-global\n+            npm config set prefix $NPM_CONFIG_PREFIX\n+      - run:\n+          name: \"Note OCAML_VERSION for cache\"\n+          command: echo $OCAML_VERSION > ../ocaml-version\n+      - restore_cache:\n+          key: dependency-cache-{{ checksum \"../ocaml-version\" }}-{{ checksum \".circleci/config.yml\" }}-{{ checksum \"reason.opam\" }}-{{ checksum \"rebuild.opam\" }}-{{ checksum \"rtop.opam\" }}\n+      - run:\n+          name: \"Install esy\"\n+          command: npm install -g esy@next\n+      - run:\n+          name: 'Clean'\n+          command: make clean-for-ci\n+      - run:\n+          name: 'opam pin'\n+          command: |\n+            opam pin add -y reason .\n+            opam pin add -y rtop .\n+      - run:\n+          name: 'esy install'\n+          command: ~/.npm-global/bin/esy install\n+      - save_cache:\n+          key: dependency-cache-{{ checksum \"../ocaml-version\" }}-{{ checksum \".circleci/config.yml\" }}-{{ checksum \"reason.opam\" }}-{{ checksum \"rebuild.opam\" }}-{{ checksum \"rtop.opam\" }}\n+          paths:\n+            - ~/.opam","path":".circleci/config.yml","position":null,"original_position":123,"commit_id":"688cd8aeddd0bc4a46839413c2c9d4b4a7893e99","original_commit_id":"e2c2e2472314cb425e30da7b631ff8390202b7f6","user":{"login":"dwwoelfel","id":476818,"avatar_url":"https://avatars0.githubusercontent.com/u/476818?v=4","gravatar_id":"","url":"https://api.github.com/users/dwwoelfel","html_url":"https://github.com/dwwoelfel","followers_url":"https://api.github.com/users/dwwoelfel/followers","following_url":"https://api.github.com/users/dwwoelfel/following{/other_user}","gists_url":"https://api.github.com/users/dwwoelfel/gists{/gist_id}","starred_url":"https://api.github.com/users/dwwoelfel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dwwoelfel/subscriptions","organizations_url":"https://api.github.com/users/dwwoelfel/orgs","repos_url":"https://api.github.com/users/dwwoelfel/repos","events_url":"https://api.github.com/users/dwwoelfel/events{/privacy}","received_events_url":"https://api.github.com/users/dwwoelfel/received_events","type":"User","site_admin":false},"body":"Removed!","created_at":"2018-02-12T19:23:10Z","updated_at":"2018-02-12T19:23:11Z","html_url":"https://github.com/facebook/reason/pull/1812#discussion_r167659520","pull_request_url":"https://api.github.com/repos/facebook/reason/pulls/1812","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/facebook/reason/pulls/comments/167659520"},"html":{"href":"https://github.com/facebook/reason/pull/1812#discussion_r167659520"},"pull_request":{"href":"https://api.github.com/repos/facebook/reason/pulls/1812"}},"in_reply_to_id":167475993},"pull_request":{"url":"https://api.github.com/repos/facebook/reason/pulls/1812","id":168364937,"html_url":"https://github.com/facebook/reason/pull/1812","diff_url":"https://github.com/facebook/reason/pull/1812.diff","patch_url":"https://github.com/facebook/reason/pull/1812.patch","issue_url":"https://api.github.com/repos/facebook/reason/issues/1812","number":1812,"state":"open","locked":false,"title":"Update to circle 2.0","user":{"login":"dwwoelfel","id":476818,"avatar_url":"https://avatars0.githubusercontent.com/u/476818?v=4","gravatar_id":"","url":"https://api.github.com/users/dwwoelfel","html_url":"https://github.com/dwwoelfel","followers_url":"https://api.github.com/users/dwwoelfel/followers","following_url":"https://api.github.com/users/dwwoelfel/following{/other_user}","gists_url":"https://api.github.com/users/dwwoelfel/gists{/gist_id}","starred_url":"https://api.github.com/users/dwwoelfel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dwwoelfel/subscriptions","organizations_url":"https://api.github.com/users/dwwoelfel/orgs","repos_url":"https://api.github.com/users/dwwoelfel/repos","events_url":"https://api.github.com/users/dwwoelfel/events{/privacy}","received_events_url":"https://api.github.com/users/dwwoelfel/received_events","type":"User","site_admin":false},"body":"Uses CircleCI 2.0, bringing the build time from 25 minutes to under 5 minutes (!). Without a cache, the build takes about 4:30. After the dependencies have been cached it only takes about 2 minutes: https://circleci.com/gh/dwwoelfel/workflows/reason/tree/circle-2\r\n\r\nUsing Circle's workflows, it's easier to run tests across multiple versions of ocaml all at once. Circle spins up a separate instance for each version and runs them all in parallel.\r\n\r\nCaching is also much better. You have a lot more control over when you clear the cache and you save time uploading duplicate caches. To be safe, I clear the cache whenever any of the .opam files change or when circle's config file changes.\r\n\r\nIf someone wanted to do the work, the build time could be further reduced by about a minute with a custom Docker container.","created_at":"2018-02-09T23:18:42Z","updated_at":"2018-02-12T19:23:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"12af25412e93bc536b7c8b3bbc7886d958a832cb","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":287261905,"url":"https://api.github.com/repos/facebook/reason/labels/CLA%20Signed","name":"CLA Signed","color":"38A869","default":false},{"id":796437733,"url":"https://api.github.com/repos/facebook/reason/labels/cla%20signed","name":"cla signed","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/facebook/reason/pulls/1812/commits","review_comments_url":"https://api.github.com/repos/facebook/reason/pulls/1812/comments","review_comment_url":"https://api.github.com/repos/facebook/reason/pulls/comments{/number}","comments_url":"https://api.github.com/repos/facebook/reason/issues/1812/comments","statuses_url":"https://api.github.com/repos/facebook/reason/statuses/688cd8aeddd0bc4a46839413c2c9d4b4a7893e99","head":{"label":"dwwoelfel:circle-2","ref":"circle-2","sha":"688cd8aeddd0bc4a46839413c2c9d4b4a7893e99","user":{"login":"dwwoelfel","id":476818,"avatar_url":"https://avatars0.githubusercontent.com/u/476818?v=4","gravatar_id":"","url":"https://api.github.com/users/dwwoelfel","html_url":"https://github.com/dwwoelfel","followers_url":"https://api.github.com/users/dwwoelfel/followers","following_url":"https://api.github.com/users/dwwoelfel/following{/other_user}","gists_url":"https://api.github.com/users/dwwoelfel/gists{/gist_id}","starred_url":"https://api.github.com/users/dwwoelfel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dwwoelfel/subscriptions","organizations_url":"https://api.github.com/users/dwwoelfel/orgs","repos_url":"https://api.github.com/users/dwwoelfel/repos","events_url":"https://api.github.com/users/dwwoelfel/events{/privacy}","received_events_url":"https://api.github.com/users/dwwoelfel/received_events","type":"User","site_admin":false},"repo":{"id":88379337,"name":"reason","full_name":"dwwoelfel/reason","owner":{"login":"dwwoelfel","id":476818,"avatar_url":"https://avatars0.githubusercontent.com/u/476818?v=4","gravatar_id":"","url":"https://api.github.com/users/dwwoelfel","html_url":"https://github.com/dwwoelfel","followers_url":"https://api.github.com/users/dwwoelfel/followers","following_url":"https://api.github.com/users/dwwoelfel/following{/other_user}","gists_url":"https://api.github.com/users/dwwoelfel/gists{/gist_id}","starred_url":"https://api.github.com/users/dwwoelfel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dwwoelfel/subscriptions","organizations_url":"https://api.github.com/users/dwwoelfel/orgs","repos_url":"https://api.github.com/users/dwwoelfel/repos","events_url":"https://api.github.com/users/dwwoelfel/events{/privacy}","received_events_url":"https://api.github.com/users/dwwoelfel/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dwwoelfel/reason","description":"Friendly Syntax & Toolchain Powered by OCaml","fork":true,"url":"https://api.github.com/repos/dwwoelfel/reason","forks_url":"https://api.github.com/repos/dwwoelfel/reason/forks","keys_url":"https://api.github.com/repos/dwwoelfel/reason/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dwwoelfel/reason/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dwwoelfel/reason/teams","hooks_url":"https://api.github.com/repos/dwwoelfel/reason/hooks","issue_events_url":"https://api.github.com/repos/dwwoelfel/reason/issues/events{/number}","events_url":"https://api.github.com/repos/dwwoelfel/reason/events","assignees_url":"https://api.github.com/repos/dwwoelfel/reason/assignees{/user}","branches_url":"https://api.github.com/repos/dwwoelfel/reason/branches{/branch}","tags_url":"https://api.github.com/repos/dwwoelfel/reason/tags","blobs_url":"https://api.github.com/repos/dwwoelfel/reason/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dwwoelfel/reason/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dwwoelfel/reason/git/refs{/sha}","trees_url":"https://api.github.com/repos/dwwoelfel/reason/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dwwoelfel/reason/statuses/{sha}","languages_url":"https://api.github.com/repos/dwwoelfel/reason/languages","stargazers_url":"https://api.github.com/repos/dwwoelfel/reason/stargazers","contributors_url":"https://api.github.com/repos/dwwoelfel/reason/contributors","subscribers_url":"https://api.github.com/repos/dwwoelfel/reason/subscribers","subscription_url":"https://api.github.com/repos/dwwoelfel/reason/subscription","commits_url":"https://api.github.com/repos/dwwoelfel/reason/commits{/sha}","git_commits_url":"https://api.github.com/repos/dwwoelfel/reason/git/commits{/sha}","comments_url":"https://api.github.com/repos/dwwoelfel/reason/comments{/number}","issue_comment_url":"https://api.github.com/repos/dwwoelfel/reason/issues/comments{/number}","contents_url":"https://api.github.com/repos/dwwoelfel/reason/contents/{+path}","compare_url":"https://api.github.com/repos/dwwoelfel/reason/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dwwoelfel/reason/merges","archive_url":"https://api.github.com/repos/dwwoelfel/reason/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dwwoelfel/reason/downloads","issues_url":"https://api.github.com/repos/dwwoelfel/reason/issues{/number}","pulls_url":"https://api.github.com/repos/dwwoelfel/reason/pulls{/number}","milestones_url":"https://api.github.com/repos/dwwoelfel/reason/milestones{/number}","notifications_url":"https://api.github.com/repos/dwwoelfel/reason/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dwwoelfel/reason/labels{/name}","releases_url":"https://api.github.com/repos/dwwoelfel/reason/releases{/id}","deployments_url":"https://api.github.com/repos/dwwoelfel/reason/deployments","created_at":"2017-04-15T23:13:56Z","updated_at":"2017-04-15T23:13:58Z","pushed_at":"2018-02-12T19:21:14Z","git_url":"git://github.com/dwwoelfel/reason.git","ssh_url":"git@github.com:dwwoelfel/reason.git","clone_url":"https://github.com/dwwoelfel/reason.git","svn_url":"https://github.com/dwwoelfel/reason","homepage":"http://facebook.github.io/reason","size":19861,"stargazers_count":0,"watchers_count":0,"language":"OCaml","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"facebook:master","ref":"master","sha":"720e09ec312945df9710e51b83e29f0a021aa6ef","user":{"login":"facebook","id":69631,"avatar_url":"https://avatars3.githubusercontent.com/u/69631?v=4","gravatar_id":"","url":"https://api.github.com/users/facebook","html_url":"https://github.com/facebook","followers_url":"https://api.github.com/users/facebook/followers","following_url":"https://api.github.com/users/facebook/following{/other_user}","gists_url":"https://api.github.com/users/facebook/gists{/gist_id}","starred_url":"https://api.github.com/users/facebook/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/facebook/subscriptions","organizations_url":"https://api.github.com/users/facebook/orgs","repos_url":"https://api.github.com/users/facebook/repos","events_url":"https://api.github.com/users/facebook/events{/privacy}","received_events_url":"https://api.github.com/users/facebook/received_events","type":"Organization","site_admin":false},"repo":{"id":46261404,"name":"reason","full_name":"facebook/reason","owner":{"login":"facebook","id":69631,"avatar_url":"https://avatars3.githubusercontent.com/u/69631?v=4","gravatar_id":"","url":"https://api.github.com/users/facebook","html_url":"https://github.com/facebook","followers_url":"https://api.github.com/users/facebook/followers","following_url":"https://api.github.com/users/facebook/following{/other_user}","gists_url":"https://api.github.com/users/facebook/gists{/gist_id}","starred_url":"https://api.github.com/users/facebook/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/facebook/subscriptions","organizations_url":"https://api.github.com/users/facebook/orgs","repos_url":"https://api.github.com/users/facebook/repos","events_url":"https://api.github.com/users/facebook/events{/privacy}","received_events_url":"https://api.github.com/users/facebook/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/facebook/reason","description":"Simple, fast & type safe code that leverages the JavaScript & OCaml ecosystems","fork":false,"url":"https://api.github.com/repos/facebook/reason","forks_url":"https://api.github.com/repos/facebook/reason/forks","keys_url":"https://api.github.com/repos/facebook/reason/keys{/key_id}","collaborators_url":"https://api.github.com/repos/facebook/reason/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/facebook/reason/teams","hooks_url":"https://api.github.com/repos/facebook/reason/hooks","issue_events_url":"https://api.github.com/repos/facebook/reason/issues/events{/number}","events_url":"https://api.github.com/repos/facebook/reason/events","assignees_url":"https://api.github.com/repos/facebook/reason/assignees{/user}","branches_url":"https://api.github.com/repos/facebook/reason/branches{/branch}","tags_url":"https://api.github.com/repos/facebook/reason/tags","blobs_url":"https://api.github.com/repos/facebook/reason/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/facebook/reason/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/facebook/reason/git/refs{/sha}","trees_url":"https://api.github.com/repos/facebook/reason/git/trees{/sha}","statuses_url":"https://api.github.com/repos/facebook/reason/statuses/{sha}","languages_url":"https://api.github.com/repos/facebook/reason/languages","stargazers_url":"https://api.github.com/repos/facebook/reason/stargazers","contributors_url":"https://api.github.com/repos/facebook/reason/contributors","subscribers_url":"https://api.github.com/repos/facebook/reason/subscribers","subscription_url":"https://api.github.com/repos/facebook/reason/subscription","commits_url":"https://api.github.com/repos/facebook/reason/commits{/sha}","git_commits_url":"https://api.github.com/repos/facebook/reason/git/commits{/sha}","comments_url":"https://api.github.com/repos/facebook/reason/comments{/number}","issue_comment_url":"https://api.github.com/repos/facebook/reason/issues/comments{/number}","contents_url":"https://api.github.com/repos/facebook/reason/contents/{+path}","compare_url":"https://api.github.com/repos/facebook/reason/compare/{base}...{head}","merges_url":"https://api.github.com/repos/facebook/reason/merges","archive_url":"https://api.github.com/repos/facebook/reason/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/facebook/reason/downloads","issues_url":"https://api.github.com/repos/facebook/reason/issues{/number}","pulls_url":"https://api.github.com/repos/facebook/reason/pulls{/number}","milestones_url":"https://api.github.com/repos/facebook/reason/milestones{/number}","notifications_url":"https://api.github.com/repos/facebook/reason/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/facebook/reason/labels{/name}","releases_url":"https://api.github.com/repos/facebook/reason/releases{/id}","deployments_url":"https://api.github.com/repos/facebook/reason/deployments","created_at":"2015-11-16T08:22:32Z","updated_at":"2018-02-12T19:19:00Z","pushed_at":"2018-02-12T19:21:16Z","git_url":"git://github.com/facebook/reason.git","ssh_url":"git@github.com:facebook/reason.git","clone_url":"https://github.com/facebook/reason.git","svn_url":"https://github.com/facebook/reason","homepage":"http://reasonml.github.io","size":19842,"stargazers_count":5048,"watchers_count":5048,"language":"OCaml","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":274,"mirror_url":null,"archived":false,"open_issues_count":401,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":274,"open_issues":401,"watchers":5048,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/facebook/reason/pulls/1812"},"html":{"href":"https://github.com/facebook/reason/pull/1812"},"issue":{"href":"https://api.github.com/repos/facebook/reason/issues/1812"},"comments":{"href":"https://api.github.com/repos/facebook/reason/issues/1812/comments"},"review_comments":{"href":"https://api.github.com/repos/facebook/reason/pulls/1812/comments"},"review_comment":{"href":"https://api.github.com/repos/facebook/reason/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/facebook/reason/pulls/1812/commits"},"statuses":{"href":"https://api.github.com/repos/facebook/reason/statuses/688cd8aeddd0bc4a46839413c2c9d4b4a7893e99"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"dwwoelfel"}}