1
0
mirror of https://github.com/drone/drone-cli.git synced 2026-01-19 17:31:35 +01:00
drone-cli/drone/jsonnet/stdlib/gen.go
2018-08-26 19:40:06 -07:00

67 lines
1.3 KiB
Go

// +build ignore
package main
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"log"
"os"
"os/exec"
"path/filepath"
"strings"
)
func main() {
var files []string
err := filepath.Walk("files", func(path string, info os.FileInfo, err error) error {
if info.IsDir() {
return nil
}
if filepath.Ext(path) == ".libsonnet" {
files = append(files, path)
}
return nil
})
if err != nil {
log.Fatal(err)
}
buf := new(bytes.Buffer)
buf.WriteString("package stdlib\n\n")
buf.WriteString("import jsonnet \"github.com/google/go-jsonnet\"\n\n")
buf.WriteString("var files = map[string]jsonnet.Contents{\n")
for _, file := range files {
raw, err := ioutil.ReadFile(file)
if err != nil {
log.Fatal(err)
}
fmt.Fprintf(buf, "\t%q:jsonnet.MakeContents(%q),\n", strings.TrimPrefix(file, "files/"), string(raw))
}
buf.WriteString("}\n")
formatted, err := format(buf)
if err != nil {
log.Fatal(err)
}
data, err := ioutil.ReadAll(formatted)
if err != nil {
log.Fatal(err)
}
ioutil.WriteFile("stdlib_gen.go", data, 0644)
}
// format formats a template using gofmt.
func format(in io.Reader) (io.Reader, error) {
var out bytes.Buffer
gofmt := exec.Command("gofmt", "-s")
gofmt.Stdin = in
gofmt.Stdout = &out
gofmt.Stderr = os.Stderr
err := gofmt.Run()
return &out, err
}