Fork me on GitHub

Hacking Scala

#scala #hacking

April 28, 2013 at 2:21am

Every Project Needs a Home

image

Recently I created home page for my project Scaldi. I wanted to make it for a long time, but from the other hand I don’t want to spend much time finding some hosting and maintaining its infrastructure, making page design, etc. Github page is nice, but still I would like to have somethng more simple and unique as a project’s front page. So my main goals were:

  • Use very nice feature of Github - gh-pages to host my pages
  • Use markdown to create my pages without spending much time making page design
  • Design that comes out-of-box should be clean and pretty
  • Integrate pages generation and publishing in SBT build process

Pamflet

And I finally found solution that addresses all these requirements. Pamflet is very nice Scala library that allows you to define your site using markdown. It’s very easy to use: you just create your pages that are named according to their position in the resulting table of contents with .md or .markdown extension. You can also define some properties in the template.properties which you can use in your pages (they would be processed using StringTemplate). If you want, you can add some custom CSS in order to make it even more prettier. So resulting file structure should look like this:

  • 00.md
  • 01.md
  • 02.md
  • custom.css
  • template.properties

Pamflet has even more features, but it was enough for me to start creating Scaldi's home page. So I ended up with following files in my project’s docs folder. It was pretty straightforward to create, but now I need to generate actual HTML from my markdown markup.

SBT Integration

In order to generate my pages and publish them to the gh-pages I need following SBT plugins:

At first you need to create  gh-pages branch in your git repository. You can make it like this:

After executing this, you need to add SBT plugins in your project/project/Build.scala:

After adding these plugins, you should be able to generate HTML pages. All you need to do is to execute write-pamflet task and your pages would be generated in target/docs folder.

Now comes your main build.sbt file:

I hope comments will help you in understanding what each of these settings does. So now in order to publish my pages I need to execute ghpages-push-site task. I can also run ghpages-synch-local in order to add pages to the gh-pagesbranch locally.

As bonus, Scalasodocs would be also published by xsbt-ghpages-plugin.

Conclusion

It was pretty easy to integrate Pamflet with SBT and gh-pages. I ended up with nice looking site and published Scaladoc. And it’s really easy to manage and publish them.

I hope this post will also help you to setup your project’s home page in a matter of minutes, because, you know, every project needs a home :)