about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--docs/templates.md4
-rw-r--r--templater/templater.go9
2 files changed, 13 insertions, 0 deletions
diff --git a/docs/templates.md b/docs/templates.md
index 11488f573a59..6c44035d0967 100644
--- a/docs/templates.md
+++ b/docs/templates.md
@@ -75,6 +75,7 @@ Some template functions come from Go's standard library and are listed in the
 available in kontemplate, as well as three custom functions:
 
 * `json`: Encodes any supplied data structure as JSON.
+* `gitHEAD`: Retrieves the commit hash at Git `HEAD`.
 * `passLookup`: Looks up the supplied key in [pass][].
 * `insertFile`: Insert the contents of the given file in the resource
   set folder as a string.
@@ -96,6 +97,9 @@ certKeyPath: my-website/cert-key
 
 {{ .certKeyPath | passLookup }}
 -> Returns content of 'my-website/cert-key' from pass
+
+{{ gitHEAD }}
+-> Returns the Git commit hash at HEAD.
 ```
 
 ## Conditionals & ranges
diff --git a/templater/templater.go b/templater/templater.go
index bfd2af1f61bf..89cc1cd732b5 100644
--- a/templater/templater.go
+++ b/templater/templater.go
@@ -15,6 +15,7 @@ import (
 	"fmt"
 	"io/ioutil"
 	"os"
+	"os/exec"
 	"path"
 	"strings"
 	"text/template"
@@ -169,6 +170,14 @@ func templateFuncs(rs *context.ResourceSet) template.FuncMap {
 		return string(b)
 	}
 	m["passLookup"] = GetFromPass
+	m["gitHEAD"] = func() (string, error) {
+			out, err := exec.Command("sh", "-c", "git rev-parse HEAD").Output()
+			if err != nil {
+				return "", err
+			}
+			output := strings.TrimSpace(string(out))
+			return output, nil
+		}
 	m["lookupIPAddr"] = GetIPsFromDNS
 	m["insertFile"] = func(file string) (string, error) {
 		data, err := ioutil.ReadFile(path.Join(rs.Path, file))