Developer guide

Here we will walk through how to compile the Tarmak CLI and documentation from source.

Building Tarmak


Building Tarmak binary

First we will clone the Tarmak repository and build the tarmak binary. Make sure you have your $GOPATH set correctly. The last line may change depending on your architecture.

mkdir -p $GOPATH/src/
cd $GOPATH/src/
git clone
cd tarmak
make build
ln -s $PWD/tarmak_darwin_amd64 /usr/local/bin/tarmak

You should now be able to run tarmak to view the available commands.

$ tarmak
Tarmak is a toolkit for provisioning and managing Kubernetes clusters.

  tarmak [command]

Available Commands:
  clusters     Operations on clusters
  environments Operations on environments
  help         Help about any command
  init         Initialize a cluster
  kubectl      Run kubectl on the current cluster
  providers    Operations on providers
  version      Print the version number of tarmak

  -c, --config-directory string   config directory for tarmak's configuration (default "~/.tarmak")
  -h, --help                      help for tarmak
  -v, --verbose                   enable verbose logging

Use "tarmak [command] --help" for more information about a command.

Building Tarmak documentation

To build the documentation run the following.

cd $GOPATH/src/
make html

You can now open _build/html/index.html in a browser.

Updating puppet subtrees

Puppet modules are maintained as separate repositories, which get bundled into tarmak using git subtree. To pull the latest changes from the upstream repositories, run make subtrees.

Release Checklist

This is a list to collect manual tasks/checks necessary for cutting a release of Tarmak:

  • Ensure release references are updated (don’t forget to commit)
make release VERSION=x.y.x
  • Tag release commit with x.y.z and push to GitLab and GitHub
  • Update the CHANGELOG using the release notes
# relnotes is the golang tool from
relnotes -repo tarmak -owner jetstack -doc-url= -htmlize-md -markdown-file x.y(-1).z-1..x.y.z
  • Branch out minor releases into release-x.y

After release job has run:

  • Make sure we update the generated releases page