Static website generation in Groovy

#grain ul { list-style: square; list-style-position:inside; text-indent: 20px;}
#grain code { font-family: Lucidatypewriter, monospace}

A static site generator is software that translates content from a text format into HTML and creates consistant look and feel across all the pages. These HTML pages can be copied to any basic webserver. Usually the base format is Markdown or AsciiDoc which is then converted into an HTML snippet, and then put into a larger HTML page. After generation, those files are copied to a basic webserver that serves the plain HTML.

Static site generators are popular with the technical crowd. It takes the complexity off of the server (no database! no caching!) and puts it on our local machine. Most have some sort of command-line system that runs rsync to copy the updated files to the web server. Having just plain HTML makes the site more secure than traditional blogging platforms. It’s hard to do a Bobby Tables if there is no database, and you don’t have to worry about the latest PHP security updates — it’s all just plain o’ HTML, CSS, and JavaScript.

Going With The Grain

There are lots of different static site generators, usually multiple ones for each programming language. Groovy’s relatively new entry in to this world is Grain. The developers of Grain decided not to reinvent the wheel, but instead implement other technolgies in their software. For example, Grain will automatically generate CSS from SASS or SCSS sources. But instead of implementing their own SASS parser in Groovy, it attempts to use Ruby on your system and, failing that, it installs JRuby into it’s sandbox and runs the SASS gem from there. This is automatic — no user configuration is necessary for this to occur. Of course you can set a default if you want.

Other great things about Grain:

Best yet — it’s distributed under the Apache license.

To get started with Grain, you can grab one of the pre-built themes as a starting point. Then you can read the docs yourself. But after the initial setup, my workflow for a blog post is usually:

  • grain create-post <post name> — creates a Markdown file under content/blog
  • grain preview — starts the preview server
  • edit the the file and write away!
  • grain generate — generates the HTML files
  • grain deploy — run rsync on my generate files to the server

About the Author

Mike Hostetler profile.

Mike Hostetler

Principal Technologist

Mike has almost 20 years of experience in technology. He started in networking and Unix administration, and grew into technical support and QA testing. But he has always done some development on the side and decided a few years ago to pursue it full-time. His history of working with users gives Mike a unique perspective on writing software.

One thought on “Static website generation in Groovy

  1. Anders D. Johnson says:

    Mike, thanks for this nice article introducing us to SSGs and especially Grain. FYI, I noticed a typo in the page – it says “genration” rather than “generation” – as of 2015/11/19 11:45pm.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Blog Posts
Feature Flags in Terraform
Feature flagging any code can be useful to developers but many don’t know how to or even that you can do it in Terraform. Some benefits of Feature Flagging your code You can enable different […]
Infrastructure as Code – The Wrong Way
You are probably familiar with the term “infrastructure as code”. It’s a great concept, and it’s gaining steam in the industry. Unfortunately, just as we had a lot to learn about how to write clean […]
Snowflake CI/CD using Jenkins and Schemachange
CI/CD and Management of Data Warehouses can be a serious challenge. In this blog you will learn how to setup CI/CD for Snowflake using Schemachange, Github, and Jenkins. For access to the code check out […]
How to get your pull requests approved more quickly
TL;DR The fewer reviews necessary, the quicker your PR gets approved. Code reviews serve an essential function on any software codebase. Done right, they help ensure correctness, reliability, and maintainability of code. On many teams, […]