From 9f7c9f2f31acd7bc544dd988af1c8c2fe63ec504 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 5 Aug 2026 23:14:29 -0500 Subject: Initial commit of skiff scaffolding --- internal/tmpl/tmpl.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 internal/tmpl/tmpl.go (limited to 'internal/tmpl/tmpl.go') diff --git a/internal/tmpl/tmpl.go b/internal/tmpl/tmpl.go new file mode 100644 index 0000000..68e917d --- /dev/null +++ b/internal/tmpl/tmpl.go @@ -0,0 +1,59 @@ +// Package tmpl embeds every file Skiff writes out to the host - jail +// config, rc.d script, nginx vhost, git hook - so the whole tool ships as +// one binary with nothing extra to install alongside it. +package tmpl + +import ( + "bytes" + _ "embed" + "text/template" +) + +//go:embed jail.conf.tmpl +var jailConf string + +//go:embed rc.d.tmpl +var rcScript string + +//go:embed nginx-app.conf.tmpl +var nginxApp string + +//go:embed post-receive.tmpl +var postReceive string + +func Render(text string, data any) (string, error) { + t, err := template.New("t").Parse(text) + if err != nil { + return "", err + } + var buf bytes.Buffer + if err := t.Execute(&buf, data); err != nil { + return "", err + } + return buf.String(), nil +} + +type JailConfData struct { + Name string + JailRoot string + IP string +} + +func JailConf(d JailConfData) (string, error) { return Render(jailConf, d) } + +type RCData struct{ Name string } + +func RCScript(d RCData) (string, error) { return Render(rcScript, d) } + +type NginxAppData struct { + Name string + IP string + Port int + ServerName string +} + +func NginxApp(d NginxAppData) (string, error) { return Render(nginxApp, d) } + +type PostReceiveData struct{ Name string } + +func PostReceive(d PostReceiveData) (string, error) { return Render(postReceive, d) } -- cgit v1.3