Most users should not need to build Cromwell and can use pre-built Cromwell releases.

If for some reason you require a non-release version of Cromwell or are developing new Cromwell features or fixes, the following are required to build Cromwell from source:

You can also use the development image, and build a development container to work inside:

$ docker build -t cromwell-dev Dockerfile
$ docker run -it cromwell-dev bash

First start by cloning the Cromwell repository from GitHub:

$ git clone git@github.com:broadinstitute/cromwell.git

Next change into the cromwell directory:

$ cd cromwell

If you require a specific version of Cromwell as a starting point, do the appropriate git checkout now.

Finally build the Cromwell jar:

$ sbt assembly

sbt assembly will build the runnable Cromwell JAR in server/target/scala-2.12/ with a name like cromwell-<VERSION>.jar.

To build a Docker image, run:

$ sbt server/docker

This will build and tag a Docker image with a name like broadinstitute/cromwell:<VERSION>-SNAP.

IntelliJ gotchas

If you develop Cromwell using IntelliJ IDEA, you may see the following error message in IntelliJ:

Error occurred during initialization of VM
Initial heap size set to a larger value than the maximum heap size

This is caused by IntelliJ overriding the Xmx (max heap) option in our custom .sbtopts file to a value that's below our Xms (initial heap) value. We cannot tell IntelliJ not to do this, but we can set it to a compatible value. Go to Preferences -> Build, Execution, Deployment -> sbt -> JVM and increase the value of Maximum heap size, MB above our Xms value of 2 GB. A Maximum heap size value of 2100 MB will be sufficient.