unison/development.markdown
Paul Chiusano 26f8dd37f2 Codebase server default ui path is relative to the executable now
To test, I added a script that downloads the latest UI release and puts it next to the executable.
2021-05-28 14:45:10 -05:00

2.9 KiB

These are commands that will likely be useful during development.

General: ./scripts/test.sh compiles and builds the Haskell code and runs all tests. Recommended that you run this before pushing any code to a branch that others might be working on.

Disclaimer If you have trouble getting started, please get in touch via Slack so we can help. If you have any fixes to the process, please send us a PR!

Running Unison

To get cracking with Unison:

  1. Install stack.
  2. Build the project with stack build. This builds all executables.
  3. (Optional) Run ./dev-ui-install.hs to fetch the latest release of the codebase UI. If you don't care about running the codebase UI locally you can ignore this step.
  4. After building do stack exec unison -- init will initialize a codebase in your home directory (in ~/.unison). This only needs to be done once.
  5. stack exec unison starts Unison and watches for .u file changes in the current directory. If you want to run it in a different directory, just add unison to your PATH, after finding it with stack exec which unison.

On startup, Unison prints a url for the codebase UI. If you did step 3 above, then visiting that URL in a browser will give you a nice interface to your codebase.

Running Tests

  • stack exec tests runs the tests
  • stack exec transcripts runs all the integration tests, found in unison-src/transcripts. You can add more tests to this directory.
  • stack exec tests -- prefix-of-test and stack exec transcripts -- prefix-of-test only run tests with a matching prefix.

What if you want a profiled build?

Do:

stack build --executable-profiling --library-profiling --ghc-options="-fprof-auto -rtsopts" unison-parser-typechecker

Again you can leave off the flag. To run an executable with profiling enabled, do:

stack exec -- <executable-name> +RTS -p

That will generate a <executable-name>.prof plain text file with profiling data. More info on profiling.

Building with cabal

Unison can also be built/installed with cabal. You'll need ghc 8.6.x to successfully build its dependencies. The provided project file is also in contrib/ so you'll need to specify its location on the command line.

  • To configure the build, you can use e.g. cabal v2-configure --project-file=contrib/cabal.project --with-ghc=ghc-8.6.5 if you have multiple versions of GHC installed
  • To build all projects use cabal v2-build --project-file=contrib/cabal.project all
  • Tests can be run with e.g. cabal v2-run --project-file=contrib/cabal.project parser-typechecker:tests
  • The executable can be installed with cabal v2-install --project-file=contrib/cabal.project unison the install directory can be modified by setting installdir: ... in .cabal/config