updo-1.0.0: project-nix/README.md
# Updo Nix
The `Makefile` has targets for `ghc-x.y.z.sha256map.nix` which has the form:
```nix
{
"repo-url"."commit-rev" = "sha256";
}
```
This can be used with [haskell.nix][haskell-nix]. We grab the sha256 hash with
`nix-prefetch-git` from the shell so you'll need that installed.
[haskell-nix]: https://input-output-hk.github.io/haskell.nix/tutorials/source-repository-hashes.html#avoiding-modifying-cabalproject-and-stackyaml
```
$ nix-prefetch-git --help
syntax: nix-prefetch-git [options] [URL [REVISION [EXPECTED-HASH]]]
Options:
--out path Path where the output would be stored.
--url url Any url understood by 'git clone'.
--rev ref Any sha1 or references (such as refs/heads/master)
--hash h Expected hash.
--branch-name Branch name to check out into
--sparse-checkout Only fetch and checkout part of the repository.
--deepClone Clone the entire repository.
--no-deepClone Make a shallow clone of just the required ref.
--leave-dotGit Keep the .git directories.
--fetch-lfs Fetch git Large File Storage (LFS) files.
--fetch-submodules Fetch submodules.
--builder Clone as fetchgit does, but url, rev, and out option are mandatory.
--quiet Only print the final json summary.
```
```
$ nix-prefetch-git https://github.com/input-output-hk/haskell.nix.git bc01ebc05a8105035c9449943046b46c8364b932
...
{
"url": "https://github.com/input-output-hk/haskell.nix.git",
"rev": "bc01ebc05a8105035c9449943046b46c8364b932",
"date": "2019-05-30T13:13:18+08:00",
"sha256": "003lm3pm024vhbfmii7xcdd9v2rczpflxf7gdl2pyxia7p014i8z",
"fetchSubmodules": false
}
```
We also include a `sha256map.py` script from haskell.nix[^sorted] but this is 4
times slower.
The `Makefile` also has `project-versions.nix` as a target.
```nix
{ current-version =
{ ghc-xyz-project-stack = "stack.yaml";
ghc-xyz-project-cabal = "cabal.project";
ghc-xyz-sha256map = import ./project-nix/ghc-u.v.w/sha256map.nix;
};
upgrade-version =
{ ghc-xyz-project-stack = "stack.upgrade.yaml";
ghc-xyz-project-cabal = "cabal.upgrade.project";
ghc-xyz-sha256map = import ./project-nix/ghc-x.y.z/sha256map.nix;
};
}
```
[^sorted]: Renamed from `sha256map-regenerate.py` and modified to sort the map by keys.