mirror of https://github.com/cheat/cheat.git
93 lines
1.6 KiB
Go
93 lines
1.6 KiB
Go
//go:build ignore
|
|
// +build ignore
|
|
|
|
// This script embeds `docopt.txt and `conf.yml` into the binary during at
|
|
// build time.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
func main() {
|
|
|
|
// get the cwd
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// get the project root
|
|
root, err := filepath.Abs(cwd + "../../../")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// specify template file information
|
|
type file struct {
|
|
In string
|
|
Out string
|
|
Method string
|
|
}
|
|
|
|
// enumerate the template files to process
|
|
files := []file{
|
|
file{
|
|
In: "cmd/cheat/docopt.txt",
|
|
Out: "cmd/cheat/str_usage.go",
|
|
Method: "usage"},
|
|
file{
|
|
In: "configs/conf.yml",
|
|
Out: "cmd/cheat/str_config.go",
|
|
Method: "configs"},
|
|
}
|
|
|
|
// iterate over each static file
|
|
for _, file := range files {
|
|
|
|
// delete the outfile
|
|
os.Remove(filepath.Join(root, file.Out))
|
|
|
|
// read the static template
|
|
bytes, err := ioutil.ReadFile(filepath.Join(root, file.In))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// render the template
|
|
data := template(file.Method, string(bytes))
|
|
|
|
// write the file to the specified outpath
|
|
spath := filepath.Join(root, file.Out)
|
|
err = ioutil.WriteFile(spath, []byte(data), 0644)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
// template packages the
|
|
func template(method string, body string) string {
|
|
|
|
// specify the template string
|
|
t := `package main
|
|
|
|
// Code generated .* DO NOT EDIT.
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
func %s() string {
|
|
return strings.TrimSpace(%s)
|
|
}
|
|
`
|
|
|
|
return fmt.Sprintf(t, method, "`"+body+"`")
|
|
}
|