{"action":"created","comment":{"url":"https://api.github.com/repos/commercialhaskell/stack/pulls/comments/212102400","pull_request_review_id":148664505,"id":212102400,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMjEwMjQwMA==","diff_hunk":"@@ -0,0 +1,482 @@\n+<div class=\"hidden-warning\"><a href=\"https://docs.haskellstack.org/\"><img src=\"https://rawgit.com/commercialhaskell/stack/master/doc/img/hidden-warning.svg\"></a></div>\n+\n+# Pantry in Stack\n+\n+Beginning with Stack 1.11, Stack uses the Pantry library for its\n+specification of snapshots and package locations. Under the surface,\n+Pantry is geared towards reproducible build plans with\n+cryptographically secure specification of packages and snapshots.\n+\n+There are three user-visible components to Pantry's configuration which affect usage of Stack:\n+\n+* Snapshot location specification (in the `resolver` field)\n+* Package location specification (in the `extra-deps` field and inside snapshots)\n+* Snapshot specification, for creating custom snapshots\n+\n+## Freeze command\n+\n+As you'll see throughout this document, there is a lot of additional\n+information that can be provided to Stack to make the configuration\n+more reproducible and faster to parse. However, it's tedious to\n+specify these values manually. Therefore, the recommended workflow is:\n+\n+* Manually write the simple version of a configuration value\n+* Use `stack freeze` to obtain the more reproducible version\n+\n+See [freeze command details](#freeze-command-details) for more\n+information.\n+\n+## Snapshot location\n+\n+There are essentially four different ways of specifying a snapshot\n+location:\n+\n+* Via a compiler version, which is a \"compiler only\" snapshot. This\n+  could be, e.g., `resolver: ghc-8.4.3`.\n+* Via a URL pointing to a snapshot configuration file, e.g. `resolver: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2018/8/21.yaml`\n+* Via a local file path pointing to a snapshot configuration file, e.g. `resolver: my-local-snapshot.yaml`\n+* Via a _convenience synonym_, which provides a short form for some\n+  common URLs. These are:\n+    * Github: `github:user/repo:path` is treated as `https://raw.githubusercontent.com/user/repo/master/path`\n+    * LTS Haskell: `lts-X.Y` is treated as `github:commercialhaskell/stackage-snapshots:lts/X/Y.yaml`\n+    * Stackage Nightly: `nightly-YYYY-MM-DD` is treated as `github:commercialhaskell/stackage-snapshots:nightly/YYYY/M/D.yaml`\n+\n+For safer, more reproducible builds, you can optionally specify a URL\n+together with a cryptographic hash of its content, e.g.:\n+\n+```yaml\n+resolver:\n+  size: 499143\n+  url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/12/0.yaml\n+  sha256: 781ea577595dff08b9c8794761ba1321020e3e1ec3297fb833fe951cce1bee11\n+```\n+\n+Where the `size` is the number of bytes in the file, and `sha256` is\n+its SHA256 hash. This information can automatically be generated with\n+the [`stack freeze`](#freeze-command) command.\n+\n+## Package location\n+\n+Pantry supports three types of package locations:\n+\n+* Hackage packages\n+* Repositories\n+* Archives\n+\n+All three of these formats support optional tree metadata to be added,\n+which can be used for reproducibility and faster downloads. This\n+information can automatically be generated with the [`stack\n+freeze`](#freeze-command) command.\n+\n+### Hackage\n+\n+Packages can be stated by a name/version combination. The basic syntax\n+for this is:\n+\n+```yaml\n+extra-deps:\n+- acme-missiles-0.3\n+```\n+\n+Using this syntax, the most recent Cabal file revision available will\n+be used. For more reproducibility of builds, it is recommended to\n+state the SHA256 hash of the cabal file contents as well, like this:\n+\n+```yaml\n+extra-deps:\n+- acme-missiles-0.3@sha256:2ba66a092a32593880a87fb00f3213762d7bca65a687d45965778deb8694c5d1\n+```\n+\n+Or, better yet, including the cabal file size too:\n+\n+```yaml\n+extra-deps:\n+- acme-missiles-0.3@sha256:2ba66a092a32593880a87fb00f3213762d7bca65a687d45965778deb8694c5d1,631\n+```\n+\n+Or a specific revision number, with `0` being the original file:\n+\n+```yaml\n+extra-deps:\n+- acme-missiles-0.3@rev:0\n+```\n+\n+Note that specifying via SHA256 is slightly more resilient in that it\n+does not rely on correct ordering in the package index, while revision\n+number is likely simpler to use. In practice, both should guarantee\n+equally reproducible build plans.\n+\n+Finally, you can include the Pantry tree information. The following\n+was generated with `stack freeze`:\n+\n+```yaml\n+- hackage: acme-missiles-0.3@sha256:2ba66a092a32593880a87fb00f3213762d7bca65a687d45965778deb8694c5d1,613\n+  pantry-tree:\n+    size: 226\n+    sha256: 614bc0cca76937507ea0a5ccc17a504c997ce458d7f2f9e43b15a10c8eaeb033\n+```\n+\n+### Git and Mercurial repos\n+\n+You can give a Git or Mercurial repo at a specific commit, and Stack\n+will clone that repo.\n+\n+```yaml\n+extra-deps:\n+- git: git@github.com:commercialhaskell/stack.git\n+  commit: 6a86ee32e5b869a877151f74064572225e1a0398\n+- git: git@github.com:snoyberg/http-client.git\n+  commit: \"a5f4f3\"\n+- hg: https://example.com/hg/repo\n+  commit: da39a3ee5e6b4b0d3255bfef95601890afd80709\n+```\n+\n+__NOTE__ It is highly recommended that you only use SHA1 values for a\n+Git or Mercurial commit. Other values may work, but they are not\n+officially supported, and may result in unexpected behavior (namely,\n+Stack will not automatically pull to update to new versions).\n+Another problem with this is that your build will not be deterministic,\n+because when someone else tries to build the project they can get a\n+different checkout of the package.\n+\n+A common practice in the Haskell world is to use \"megarepos\", or\n+repositories with multiple packages in various subdirectories. Some\n+common examples include [wai](https://github.com/yesodweb/wai/) and\n+[digestive-functors](https://github.com/jaspervdj/digestive-functors). To\n+support this, you may also specify `subdirs` for repositories, e.g.:\n+\n+```yaml\n+extra-deps:\n+- git: git@github.com:yesodweb/wai\n+  commit: 2f8a8e1b771829f4a8a77c0111352ce45a14c30f\n+  subdirs:\n+  - auto-update\n+  - wai\n+```\n+\n+Since v1.7.1, you can specify packages from GitHub repository name using `github`:\n+\n+```yaml\n+extra-deps:\n+- github: snoyberg/http-client\n+  commit: a5f4f30f01366738f913968163d856366d7e0342\n+```\n+\n+If unspecified, `subdirs` defaults to `['.']` meaning looking for a\n+package in the root of the repo.  Note that if you specify a value of\n+`subdirs`, then `'.'` is _not_ included by default and needs to be\n+explicitly specified if a required package is found in the top-level\n+directory of the repository.\n+\n+Using the `stack freeze` command will add in additional information,\n+including not only the Pantry tree hash, but also package metadata\n+which can allow Stack to work faster by bypassing cabal file\n+parses. For example, this:\n+\n+```yaml\n+extra-deps:\n+- git: git@github.com:yesodweb/wai\n+  commit: 2f8a8e1b771829f4a8a77c0111352ce45a14c30f\n+  subdirs:\n+  - auto-update\n+  - wai\n+```\n+\n+Would be converted into:\n+\n+```yaml\n+extra-deps:\n+- subdir: auto-update\n+  cabal-file:\n+    size: 1219\n+    sha256: c07b2b1a2df1199f83eef819ac9bb067567e100b60586a52f8b92fc733ae3a6d\n+  name: auto-update\n+  version: 0.1.2.1\n+  git: git@github.com:yesodweb/wai\n+  pantry-tree:\n+    size: 687\n+    sha256: 26377897f35ccd3890b4405d72523233717afb04d62f2d36031bf6b18dcef74f\n+  commit: 2f8a8e1b771829f4a8a77c0111352ce45a14c30f\n+- subdir: wai\n+  cabal-file:\n+    size: 1717\n+    sha256: 7b46e7a8b121d668351fa8a684810afadf58c39276125098485203ef274fd056\n+  name: wai\n+  version: 3.0.2.3\n+  git: git@github.com:yesodweb/wai\n+  pantry-tree:\n+    size: 10299\n+    sha256: ce33fddab13592c847fbd7acd1859dfcbb9aeb6c212db3cee27c909fa3f3ae44\n+  commit: 2f8a8e1b771829f4a8a77c0111352ce45a14c30f\n+```\n+\n+### Archives (HTTP(S) or local filepath)\n+\n+You can use HTTP and HTTPS URLs and local filepaths referring to\n+either tarballs or ZIP files.\n+\n+__NOTE__ Stack assumes that these files never change after downloading\n+to avoid needing to make an HTTP request on each build. Use hashes to\n+provide more security.\n+\n+```yaml\n+extra-deps:\n+- https://example.com/foo/bar/baz-0.0.2.tar.gz\n+- archive: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip\n+  subdirs:\n+  - wai\n+  - warp\n+- archive: ../acme-missiles-0.3.tar.gz\n+  sha256: e563d8b524017a06b32768c4db8eff1f822f3fb22a90320b7e414402647b735b\n+```\n+\n+With the `stack freeze` command, this would be replaced with:\n+\n+```yaml\n+extra-deps:\n+- size: 1540\n+  url: https://hackage.haskell.org/package/acme-dont-1.1.tar.gz\n+  cabal-file:\n+    size: 602\n+    sha256: 8264ad3e5113d3e0417b46e71d5a9c0914a1f03b5b81319cc329f1dc0f49b96c\n+  name: acme-dont\n+  version: '1.1'\n+  sha256: c32231ff8548bccd4f3bafcc9b1eb84947a2e5e0897c50c048e0e7609fc443ce\n+  pantry-tree:\n+    size: 206\n+    sha256: 79dbeddaf0fd507611687cefe9511c8fda489849fb0cac3894925716936290b2\n+- size: 285152\n+  subdir: wai\n+  url: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip\n+  cabal-file:\n+    size: 1717\n+    sha256: 7b46e7a8b121d668351fa8a684810afadf58c39276125098485203ef274fd056\n+  name: wai\n+  version: 3.0.2.3\n+  sha256: 3b6eb04f3763ca16432f3ab2135d239161fbe2c8811b8cd1778ffa67469289ba\n+  pantry-tree:\n+    size: 10296\n+    sha256: ce431f1a22fcda89375ba5e35e53aee968eea23d1124fcba7cb9eae426daa2db\n+- size: 285152\n+  subdir: warp\n+  url: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip\n+  cabal-file:\n+    size: 6648\n+    sha256: e3f01fd7417af923fd30962e9e6a4fe4de41ebc5e02af9819067fed79c9c6575\n+  name: warp\n+  version: 3.0.13.1\n+  sha256: 3b6eb04f3763ca16432f3ab2135d239161fbe2c8811b8cd1778ffa67469289ba\n+  pantry-tree:\n+    size: 4292\n+    sha256: d6b1def306a042b5fc500930302533a3ea828e916c99cbd82c0b7e2c4e3a8e09\n+- size: 1442\n+  filepath: acme-missiles-0.3.tar.gz\n+  cabal-file:\n+    size: 613\n+    sha256: 2ba66a092a32593880a87fb00f3213762d7bca65a687d45965778deb8694c5d1\n+  name: acme-missiles\n+  version: '0.3'\n+  sha256: e563d8b524017a06b32768c4db8eff1f822f3fb22a90320b7e414402647b735b\n+  pantry-tree:\n+    size: 226\n+    sha256: 614bc0cca76937507ea0a5ccc17a504c997ce458d7f2f9e43b15a10c8eaeb033\n+```\n+\n+## Snapshots\n+\n+_NOTE_ Stack has supported custom snapshots properly since version\n+1.6. In version 1.11, the support for snapshots was moved to Pantry,\n+and Stackage snapshots have moved over to using the same\n+format. Therefore, there is no longer such a thing as \"custom\n+snapshots,\" there are simply \"snapshots.\" Pantry snapshots follow the\n+same format as Stack 1.6 \"custom snapshots.\"\n+\n+Snapshots provide a list of packages to use, along with flags,\n+ghc-options, and a few other settings. Snapshots may extend any other\n+snapshot that can be specified in a `resolver` field. The packages\n+specified follow the same syntax mentioned above for\n+dependencies. Unlike `extra-deps`, however, no support for local\n+directories is available in snapshots to ensure reproducibility.\n+\n+```yaml\n+resolver: lts-8.21 # Inherits GHC version and package set\n+compiler: ghc-8.0.1 # Overwrites GHC version in the resolver, optional\n+\n+name: my-snapshot # User-friendly name\n+\n+# Additional packages, follows extra-deps syntax\n+packages:\n+- unordered-containers-0.2.7.1\n+- hashable-1.2.4.0\n+- text-1.2.2.1\n+\n+# Override flags, can also override flags in the parent snapshot\n+flags:\n+  unordered-containers:\n+    debug: true\n+\n+# Packages from the parent snapshot to ignore\n+drop-packages:\n+- wai-extra\n+\n+# Packages which should be hidden (affects script command's import\n+# parser\n+hidden:\n+  wai: true\n+  warp: false\n+\n+# Set GHC options for specific packages\n+ghc-options:\n+  warp:\n+  - -O2\n+```\n+\n+If you put this in a `snapshot.yaml` file in the same directory as your project,\n+you can now use the custom snapshot like this:\n+\n+```yaml\n+resolver: snapshot.yaml\n+```\n+\n+This is an example of a custom snapshot stored in the filesystem. They are\n+assumed to be mutable, so you are free to modify it. We detect that the snapshot\n+has changed by hashing the contents of the involved files, and using it to\n+identify the snapshot internally. It is often reasonably efficient to modify a\n+custom snapshot, due to stack sharing snapshot packages whenever possible.\n+\n+Running the `stack freeze --snapshot` command yields the following\n+output:\n+\n+```yaml\n+flags:\n+  unordered-containers:\n+    debug: true\n+ghc-options:\n+  warp:\n+  - -O2\n+packages:\n+- hackage: unordered-containers-0.2.7.1@sha256:7a1ceb6d88c0f16ec417f28dac16f6dc7b10e88fbb536a74d84941ad2f57b74b,4367\n+  pantry-tree:\n+    size: 1286\n+    sha256: 8a8f745cacae3c11a9c6e6c2fcefc95a13d0c153a8e14b4d28485db1b59d9ef3\n+- hackage: hashable-1.2.4.0@sha256:33a49b3ea87cc4a0c89a4fd48f19e4807d8c620aff710a048a28cf7d9c9b4620,4271\n+  pantry-tree:\n+    size: 1325\n+    sha256: cb05c31a8ec43f727004e5a6c8e35ff92e0515855a85cb01fa73623683ee4b33\n+- hackage: text-1.2.2.1@sha256:1c6ffad395d1674915cc9fda1d3b8f202ddcbfda7c341eb8bd99de67d3283bf9,5724\n+  pantry-tree:\n+    size: 7376\n+    sha256: ac2601c49cf7bc0f5d66b2793eddc8352f51a6ee989980827a0d0d8169700a03\n+name: my-snapshot\n+hidden:\n+  warp: false\n+  wai: true\n+drop-packages:\n+- wai-extra\n+compiler: ghc-8.0.1\n+resolver:\n+  size: 515969\n+  url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/8/21.yaml\n+  sha256: 2ec73d520d3e55cb753eaca11a72a9ce95bd9ba7ccaf16de1150d0130a50a5a1\n+```\n+\n+### Overriding the compiler\n+\n+The following snapshot specification will be identical to `lts-7.1`, but instead\n+use `ghc-7.10.3` instead of `ghc-8.0.1`:\n+\n+```yaml\n+resolver: lts-7.1\n+compiler: ghc-7.10.3\n+```\n+\n+### Dropping packages\n+\n+The following snapshot specification will be identical to `lts-7.1`, but without\n+the `text` package in our snapshot. Removing this package will cause all the\n+packages that depend on `text` to be unbuildable, but they will still be present\n+in the snapshot.\n+\n+```yaml\n+resolver: lts-7.1\n+drop-packages:\n+  - text\n+```\n+\n+### Specifying ghc-options\n+\n+In order to specify ghc-options for a package, you use the same syntax as the\n+[ghc-options](yaml_configuration.md#ghc-options) field for build configuration.\n+The following snapshot specification will be identical to `lts-7.1`, but\n+provides `-O1` as a ghc-option for `text`:\n+\n+```yaml\n+resolver: lts-7.1\n+packages:\n+  - text-1.2.2.1\n+ghc-options:\n+  text: -O1\n+```\n+\n+This works somewhat differently than the stack.yaml `ghc-options` field, in that\n+options can only be specified for packages that are mentioned in the custom\n+snapshot's `packages` list. It sets the ghc-options, rather than extending those\n+specified in the snapshot being extended.\n+\n+Another difference is that the `*` entry for `ghc-options` applies to all\n+packages in the `packages` list, rather than all packages in the snapshot.\n+\n+### Specifying flags\n+\n+In order to specify flags for a package, you use the same syntax as the\n+[flags](yaml_configuration.md#flags) field for build configuration. The\n+following snapshot specification will be identical to `lts-7.1`, but\n+it enables the `developer` cabal flag:\n+\n+```yaml\n+resolver: lts-7.1\n+packages:\n+  - text-1.2.2.1\n+flags:\n+  text:\n+    developer: true\n+```\n+\n+## Freeze command details\n+\n+To make builds reproducible it makes sense to pin project dependencies to some\n+exact versions and this is what is stack's `freeze` command is about.\n+\n+### Project freezing\n+\n+The default mode of its invocation:\n+\n+```\n+$ stack freeze\n+```\n+freezes the following fields from the project's `stack.yaml`\n+\n+* packages in `extra-deps` which do not include sha256 of their cabal files and\n+  which do not specify pantry tree pointer of the package archive\n+* `resolver` if it references a remote snapshot and if it does not specify\n+  pantry tree pointer of its contents\n+\n+The command outputs to standard output new project's `stack.yaml` with these\n+changes included.\n+\n+If a project is specified precisely enough stack tells about it and exits.\n+\n+### Snapshot freezing","path":"doc/pantry.md","position":469,"original_position":469,"commit_id":"658418af639bf275fe344358bd6829567e03b8b7","original_commit_id":"09dde44b3eaa116785df39aa7efe4783defbaa92","user":{"login":"snoyberg","id":49415,"node_id":"MDQ6VXNlcjQ5NDE1","avatar_url":"https://avatars3.githubusercontent.com/u/49415?v=4","gravatar_id":"","url":"https://api.github.com/users/snoyberg","html_url":"https://github.com/snoyberg","followers_url":"https://api.github.com/users/snoyberg/followers","following_url":"https://api.github.com/users/snoyberg/following{/other_user}","gists_url":"https://api.github.com/users/snoyberg/gists{/gist_id}","starred_url":"https://api.github.com/users/snoyberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/snoyberg/subscriptions","organizations_url":"https://api.github.com/users/snoyberg/orgs","repos_url":"https://api.github.com/users/snoyberg/repos","events_url":"https://api.github.com/users/snoyberg/events{/privacy}","received_events_url":"https://api.github.com/users/snoyberg/received_events","type":"User","site_admin":false},"body":"Hopefully addressed in 01f9e84f2cd76d2e5dd66ba2411a3ba8fac08ca9, thanks.","created_at":"2018-08-22T20:47:17Z","updated_at":"2018-08-22T20:47:17Z","html_url":"https://github.com/commercialhaskell/stack/pull/4254#discussion_r212102400","pull_request_url":"https://api.github.com/repos/commercialhaskell/stack/pulls/4254","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/commercialhaskell/stack/pulls/comments/212102400"},"html":{"href":"https://github.com/commercialhaskell/stack/pull/4254#discussion_r212102400"},"pull_request":{"href":"https://api.github.com/repos/commercialhaskell/stack/pulls/4254"}},"in_reply_to_id":212077859},"pull_request":{"url":"https://api.github.com/repos/commercialhaskell/stack/pulls/4254","id":210184195,"node_id":"MDExOlB1bGxSZXF1ZXN0MjEwMTg0MTk1","html_url":"https://github.com/commercialhaskell/stack/pull/4254","diff_url":"https://github.com/commercialhaskell/stack/pull/4254.diff","patch_url":"https://github.com/commercialhaskell/stack/pull/4254.patch","issue_url":"https://api.github.com/repos/commercialhaskell/stack/issues/4254","number":4254,"state":"open","locked":false,"title":"Start using the pantry package","user":{"login":"snoyberg","id":49415,"node_id":"MDQ6VXNlcjQ5NDE1","avatar_url":"https://avatars3.githubusercontent.com/u/49415?v=4","gravatar_id":"","url":"https://api.github.com/users/snoyberg","html_url":"https://github.com/snoyberg","followers_url":"https://api.github.com/users/snoyberg/followers","following_url":"https://api.github.com/users/snoyberg/following{/other_user}","gists_url":"https://api.github.com/users/snoyberg/gists{/gist_id}","starred_url":"https://api.github.com/users/snoyberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/snoyberg/subscriptions","organizations_url":"https://api.github.com/users/snoyberg/orgs","repos_url":"https://api.github.com/users/snoyberg/repos","events_url":"https://api.github.com/users/snoyberg/events{/privacy}","received_events_url":"https://api.github.com/users/snoyberg/received_events","type":"User","site_admin":false},"body":"This is a massive diff. Any reviews people have are most welcome. The basic idea is:\r\n\r\n* All code related to downloading packages, unpacking packages, parsing cabal files, and interacting with Hackage have been moved into a new package, `pantry`\r\n* This new package currently resides inside the Stack repo, but will be moved out in the future. (Same with the `curator` package present as well.)\r\n* The rest of the codebase has to adapt :)\r\n\r\nFor those looking to review, I'd recommend:\r\n\r\n* Don't bother looking at individual commits, too much noise\r\n* Check out the changes inside the `doc` directory and `ChangeLog.md` first\r\n* Review the code in `subs/pantry` next\r\n* As much as you'd like, review the changes in `src`","created_at":"2018-08-22T15:59:28Z","updated_at":"2018-08-22T20:47:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3d15c14a995a8d6658375aeb717f1fd1968c176b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":690723954,"node_id":"MDU6TGFiZWw2OTA3MjM5NTQ=","url":"https://api.github.com/repos/commercialhaskell/stack/labels/awaiting%20review","name":"awaiting review","color":"0e8a16","default":false},{"id":1032280490,"node_id":"MDU6TGFiZWwxMDMyMjgwNDkw","url":"https://api.github.com/repos/commercialhaskell/stack/labels/component:%20pantry","name":"component: pantry","color":"c5def5","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/commercialhaskell/stack/pulls/4254/commits","review_comments_url":"https://api.github.com/repos/commercialhaskell/stack/pulls/4254/comments","review_comment_url":"https://api.github.com/repos/commercialhaskell/stack/pulls/comments{/number}","comments_url":"https://api.github.com/repos/commercialhaskell/stack/issues/4254/comments","statuses_url":"https://api.github.com/repos/commercialhaskell/stack/statuses/658418af639bf275fe344358bd6829567e03b8b7","head":{"label":"commercialhaskell:pantry","ref":"pantry","sha":"658418af639bf275fe344358bd6829567e03b8b7","user":{"login":"commercialhaskell","id":10633049,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNjMzMDQ5","avatar_url":"https://avatars1.githubusercontent.com/u/10633049?v=4","gravatar_id":"","url":"https://api.github.com/users/commercialhaskell","html_url":"https://github.com/commercialhaskell","followers_url":"https://api.github.com/users/commercialhaskell/followers","following_url":"https://api.github.com/users/commercialhaskell/following{/other_user}","gists_url":"https://api.github.com/users/commercialhaskell/gists{/gist_id}","starred_url":"https://api.github.com/users/commercialhaskell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/commercialhaskell/subscriptions","organizations_url":"https://api.github.com/users/commercialhaskell/orgs","repos_url":"https://api.github.com/users/commercialhaskell/repos","events_url":"https://api.github.com/users/commercialhaskell/events{/privacy}","received_events_url":"https://api.github.com/users/commercialhaskell/received_events","type":"Organization","site_admin":false},"repo":{"id":34817922,"node_id":"MDEwOlJlcG9zaXRvcnkzNDgxNzkyMg==","name":"stack","full_name":"commercialhaskell/stack","owner":{"login":"commercialhaskell","id":10633049,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNjMzMDQ5","avatar_url":"https://avatars1.githubusercontent.com/u/10633049?v=4","gravatar_id":"","url":"https://api.github.com/users/commercialhaskell","html_url":"https://github.com/commercialhaskell","followers_url":"https://api.github.com/users/commercialhaskell/followers","following_url":"https://api.github.com/users/commercialhaskell/following{/other_user}","gists_url":"https://api.github.com/users/commercialhaskell/gists{/gist_id}","starred_url":"https://api.github.com/users/commercialhaskell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/commercialhaskell/subscriptions","organizations_url":"https://api.github.com/users/commercialhaskell/orgs","repos_url":"https://api.github.com/users/commercialhaskell/repos","events_url":"https://api.github.com/users/commercialhaskell/events{/privacy}","received_events_url":"https://api.github.com/users/commercialhaskell/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/commercialhaskell/stack","description":"The Haskell Tool Stack","fork":false,"url":"https://api.github.com/repos/commercialhaskell/stack","forks_url":"https://api.github.com/repos/commercialhaskell/stack/forks","keys_url":"https://api.github.com/repos/commercialhaskell/stack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/commercialhaskell/stack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/commercialhaskell/stack/teams","hooks_url":"https://api.github.com/repos/commercialhaskell/stack/hooks","issue_events_url":"https://api.github.com/repos/commercialhaskell/stack/issues/events{/number}","events_url":"https://api.github.com/repos/commercialhaskell/stack/events","assignees_url":"https://api.github.com/repos/commercialhaskell/stack/assignees{/user}","branches_url":"https://api.github.com/repos/commercialhaskell/stack/branches{/branch}","tags_url":"https://api.github.com/repos/commercialhaskell/stack/tags","blobs_url":"https://api.github.com/repos/commercialhaskell/stack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/commercialhaskell/stack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/commercialhaskell/stack/git/refs{/sha}","trees_url":"https://api.github.com/repos/commercialhaskell/stack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/commercialhaskell/stack/statuses/{sha}","languages_url":"https://api.github.com/repos/commercialhaskell/stack/languages","stargazers_url":"https://api.github.com/repos/commercialhaskell/stack/stargazers","contributors_url":"https://api.github.com/repos/commercialhaskell/stack/contributors","subscribers_url":"https://api.github.com/repos/commercialhaskell/stack/subscribers","subscription_url":"https://api.github.com/repos/commercialhaskell/stack/subscription","commits_url":"https://api.github.com/repos/commercialhaskell/stack/commits{/sha}","git_commits_url":"https://api.github.com/repos/commercialhaskell/stack/git/commits{/sha}","comments_url":"https://api.github.com/repos/commercialhaskell/stack/comments{/number}","issue_comment_url":"https://api.github.com/repos/commercialhaskell/stack/issues/comments{/number}","contents_url":"https://api.github.com/repos/commercialhaskell/stack/contents/{+path}","compare_url":"https://api.github.com/repos/commercialhaskell/stack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/commercialhaskell/stack/merges","archive_url":"https://api.github.com/repos/commercialhaskell/stack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/commercialhaskell/stack/downloads","issues_url":"https://api.github.com/repos/commercialhaskell/stack/issues{/number}","pulls_url":"https://api.github.com/repos/commercialhaskell/stack/pulls{/number}","milestones_url":"https://api.github.com/repos/commercialhaskell/stack/milestones{/number}","notifications_url":"https://api.github.com/repos/commercialhaskell/stack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/commercialhaskell/stack/labels{/name}","releases_url":"https://api.github.com/repos/commercialhaskell/stack/releases{/id}","deployments_url":"https://api.github.com/repos/commercialhaskell/stack/deployments","created_at":"2015-04-29T20:56:42Z","updated_at":"2018-08-22T20:39:02Z","pushed_at":"2018-08-22T20:39:14Z","git_url":"git://github.com/commercialhaskell/stack.git","ssh_url":"git@github.com:commercialhaskell/stack.git","clone_url":"https://github.com/commercialhaskell/stack.git","svn_url":"https://github.com/commercialhaskell/stack","homepage":"http://haskellstack.org","size":14266,"stargazers_count":2795,"watchers_count":2795,"language":"Haskell","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":612,"mirror_url":null,"archived":false,"open_issues_count":776,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":612,"open_issues":776,"watchers":2795,"default_branch":"master"}},"base":{"label":"commercialhaskell:master","ref":"master","sha":"2c8cdfbd5ece763a1df809d6e3ed0520b2642fd5","user":{"login":"commercialhaskell","id":10633049,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNjMzMDQ5","avatar_url":"https://avatars1.githubusercontent.com/u/10633049?v=4","gravatar_id":"","url":"https://api.github.com/users/commercialhaskell","html_url":"https://github.com/commercialhaskell","followers_url":"https://api.github.com/users/commercialhaskell/followers","following_url":"https://api.github.com/users/commercialhaskell/following{/other_user}","gists_url":"https://api.github.com/users/commercialhaskell/gists{/gist_id}","starred_url":"https://api.github.com/users/commercialhaskell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/commercialhaskell/subscriptions","organizations_url":"https://api.github.com/users/commercialhaskell/orgs","repos_url":"https://api.github.com/users/commercialhaskell/repos","events_url":"https://api.github.com/users/commercialhaskell/events{/privacy}","received_events_url":"https://api.github.com/users/commercialhaskell/received_events","type":"Organization","site_admin":false},"repo":{"id":34817922,"node_id":"MDEwOlJlcG9zaXRvcnkzNDgxNzkyMg==","name":"stack","full_name":"commercialhaskell/stack","owner":{"login":"commercialhaskell","id":10633049,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNjMzMDQ5","avatar_url":"https://avatars1.githubusercontent.com/u/10633049?v=4","gravatar_id":"","url":"https://api.github.com/users/commercialhaskell","html_url":"https://github.com/commercialhaskell","followers_url":"https://api.github.com/users/commercialhaskell/followers","following_url":"https://api.github.com/users/commercialhaskell/following{/other_user}","gists_url":"https://api.github.com/users/commercialhaskell/gists{/gist_id}","starred_url":"https://api.github.com/users/commercialhaskell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/commercialhaskell/subscriptions","organizations_url":"https://api.github.com/users/commercialhaskell/orgs","repos_url":"https://api.github.com/users/commercialhaskell/repos","events_url":"https://api.github.com/users/commercialhaskell/events{/privacy}","received_events_url":"https://api.github.com/users/commercialhaskell/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/commercialhaskell/stack","description":"The Haskell Tool Stack","fork":false,"url":"https://api.github.com/repos/commercialhaskell/stack","forks_url":"https://api.github.com/repos/commercialhaskell/stack/forks","keys_url":"https://api.github.com/repos/commercialhaskell/stack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/commercialhaskell/stack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/commercialhaskell/stack/teams","hooks_url":"https://api.github.com/repos/commercialhaskell/stack/hooks","issue_events_url":"https://api.github.com/repos/commercialhaskell/stack/issues/events{/number}","events_url":"https://api.github.com/repos/commercialhaskell/stack/events","assignees_url":"https://api.github.com/repos/commercialhaskell/stack/assignees{/user}","branches_url":"https://api.github.com/repos/commercialhaskell/stack/branches{/branch}","tags_url":"https://api.github.com/repos/commercialhaskell/stack/tags","blobs_url":"https://api.github.com/repos/commercialhaskell/stack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/commercialhaskell/stack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/commercialhaskell/stack/git/refs{/sha}","trees_url":"https://api.github.com/repos/commercialhaskell/stack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/commercialhaskell/stack/statuses/{sha}","languages_url":"https://api.github.com/repos/commercialhaskell/stack/languages","stargazers_url":"https://api.github.com/repos/commercialhaskell/stack/stargazers","contributors_url":"https://api.github.com/repos/commercialhaskell/stack/contributors","subscribers_url":"https://api.github.com/repos/commercialhaskell/stack/subscribers","subscription_url":"https://api.github.com/repos/commercialhaskell/stack/subscription","commits_url":"https://api.github.com/repos/commercialhaskell/stack/commits{/sha}","git_commits_url":"https://api.github.com/repos/commercialhaskell/stack/git/commits{/sha}","comments_url":"https://api.github.com/repos/commercialhaskell/stack/comments{/number}","issue_comment_url":"https://api.github.com/repos/commercialhaskell/stack/issues/comments{/number}","contents_url":"https://api.github.com/repos/commercialhaskell/stack/contents/{+path}","compare_url":"https://api.github.com/repos/commercialhaskell/stack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/commercialhaskell/stack/merges","archive_url":"https://api.github.com/repos/commercialhaskell/stack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/commercialhaskell/stack/downloads","issues_url":"https://api.github.com/repos/commercialhaskell/stack/issues{/number}","pulls_url":"https://api.github.com/repos/commercialhaskell/stack/pulls{/number}","milestones_url":"https://api.github.com/repos/commercialhaskell/stack/milestones{/number}","notifications_url":"https://api.github.com/repos/commercialhaskell/stack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/commercialhaskell/stack/labels{/name}","releases_url":"https://api.github.com/repos/commercialhaskell/stack/releases{/id}","deployments_url":"https://api.github.com/repos/commercialhaskell/stack/deployments","created_at":"2015-04-29T20:56:42Z","updated_at":"2018-08-22T20:39:02Z","pushed_at":"2018-08-22T20:39:14Z","git_url":"git://github.com/commercialhaskell/stack.git","ssh_url":"git@github.com:commercialhaskell/stack.git","clone_url":"https://github.com/commercialhaskell/stack.git","svn_url":"https://github.com/commercialhaskell/stack","homepage":"http://haskellstack.org","size":14266,"stargazers_count":2795,"watchers_count":2795,"language":"Haskell","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":612,"mirror_url":null,"archived":false,"open_issues_count":776,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":612,"open_issues":776,"watchers":2795,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/commercialhaskell/stack/pulls/4254"},"html":{"href":"https://github.com/commercialhaskell/stack/pull/4254"},"issue":{"href":"https://api.github.com/repos/commercialhaskell/stack/issues/4254"},"comments":{"href":"https://api.github.com/repos/commercialhaskell/stack/issues/4254/comments"},"review_comments":{"href":"https://api.github.com/repos/commercialhaskell/stack/pulls/4254/comments"},"review_comment":{"href":"https://api.github.com/repos/commercialhaskell/stack/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/commercialhaskell/stack/pulls/4254/commits"},"statuses":{"href":"https://api.github.com/repos/commercialhaskell/stack/statuses/658418af639bf275fe344358bd6829567e03b8b7"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"snoyberg"}}