updo-1.0.0: HACKING.md
# Updo Hacking
## Package Groups
During the cabal solving step, cabal would fail to solve for dependencies for
packages in a particular order. The grouping of packages preserves this.
To mirror package groups from `project-dhall/pkgs/*.dhall` to
`project-cabal/pkgs/*.config` use make, either for `pkgs.config` that imports
all `pkgs/*.config` or for a single package group.
```
$ make project-cabal/pkgs.config
$ cat project-cabal/pkgs.config
import: project-cabal/pkgs/shims.config
...
import: project-cabal/pkgs/tools.config
```
When `project-dhall/pkgs-upgrade-todo.dhall` is:
```dhall
[ "./jobs/runner/" ]
```
Then the single `jobs.config` package group as generated is:
```
$ make project-cabal/pkgs/jobs.config
$ cat project-cabal/pkgs/jobs.config
if impl(ghc <= 8.10.7)
packages:
./jobs/core/
, ./jobs/runner/
else
packages:
./jobs/core/
-- TODO for impl(ghc >= 9.2.5)
-- ./jobs/runner/
```
To split a group of packages into a dhall record of `{pkgs, done, todo}`:
```
$ ./updo/project-dhall/pkgs-upgrade-partition.hs ./project-dhall/pkgs/jobs.dhall
{ pkgs = [ "./jobs/core/", "./jobs/runner/" ]
, done = [ "./jobs/core/" ]
, todo = [ "./jobs/runner/" ]
}
```
## GHC Upgrade Hacking
During a GHC version uprade, start by putting all packages into
`pkgs-upgrade-todo.dhall` and progressively take one or a few packages out at at
time and rerun the make targets to build the project you want to use.
To sort all the packages.
```
$ cd project-dhall
$ ./pkgs-sorted.hs
[ "./admin-client/"
, "./aeson-shim/"
...
, "./docs/"
, "./testing/"
]
```