SBT

An overview of the plugins we use and what they do (they are defined in plugins.sbt).

sbt-buildinfo

Configured in version.sbt.

Auto-generates classes containing the major/minor version number plus the current Git SHA and makes it available in the code.

sbt-scoverage

Run the following to get an idea of test coverage.

sbt clean coverage test coverageReport

Check out the generated report under target/scala-2.12/scoverage-report. Remember good coverage doesn’t always mean good tests!

sbt-assembly

Configured in assembly.sbt.

The Assembly plugin will generate a “fat” jar. Run:

sbt assembly

…to create (for example) target/.

sbt-native-packager

Configured in package.sbt.

The Native Packager plugin will take the output of the Assembly plugin and package it up as a deployment artifact. In our case, this takes the form of a Debian package (.deb) that can be installed via dpkg and apt-get on the Raspberry Pi.

To prepare a package, run the following:

sbt debian:packageBin

To perform a traditional “release”, see the Release section.

sbt-proguard

Configured in proguard.sbt.

We use the Proguard plugin purely to reduce the file size of the deployment artifact. It reduces the ~50MB artifact to around 10MB, which is pretty cool.

sbt-microsite

Configured in site.sbt.

Run sbt site/makeMicrosite to create the site you’re reading now. Find it in site/target/jekyll once built.

You should be able to preview the site using Jekyll to serve it.

$ cd site/target/jekyll
$ jekyll serve

If you’re going to publish it (sbt site/publishMicrosite), make sure you site/makeMicrosite first (otherwise you’ll see a commit on the gh-pages branch with 0 commits)