2020-03-22 16:47:47 +01:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
2020-05-12 15:23:24 +02:00
|
|
|
"encoding/json"
|
2020-04-29 16:39:37 +02:00
|
|
|
"fmt"
|
2020-03-22 16:47:47 +01:00
|
|
|
"log"
|
2023-03-03 16:53:03 +01:00
|
|
|
"strings"
|
2020-04-29 17:13:38 +02:00
|
|
|
|
|
|
|
|
"github.com/go-clix/cli"
|
2020-03-22 16:47:47 +01:00
|
|
|
|
2021-06-03 14:58:12 +02:00
|
|
|
"github.com/jsonnet-libs/docsonnet/pkg/docsonnet"
|
|
|
|
|
"github.com/jsonnet-libs/docsonnet/pkg/render"
|
2020-04-30 00:47:43 +02:00
|
|
|
)
|
2020-03-22 16:47:47 +01:00
|
|
|
|
|
|
|
|
func main() {
|
2020-04-30 00:47:43 +02:00
|
|
|
log.SetFlags(0)
|
|
|
|
|
|
2020-04-29 17:13:38 +02:00
|
|
|
root := &cli.Command{
|
2020-05-12 22:48:02 +02:00
|
|
|
Use: "docsonnet <file>",
|
2020-04-29 17:13:38 +02:00
|
|
|
Short: "Utility to parse and transform Jsonnet code that uses the docsonnet extension",
|
2020-05-12 22:48:02 +02:00
|
|
|
Args: cli.ArgsExact(1),
|
2020-04-29 17:13:38 +02:00
|
|
|
}
|
|
|
|
|
|
2020-05-12 15:23:24 +02:00
|
|
|
dir := root.Flags().StringP("output", "o", "docs", "directory to write the .md files to")
|
|
|
|
|
outputJSON := root.Flags().Bool("json", false, "print loaded docsonnet as JSON")
|
2020-05-12 22:48:02 +02:00
|
|
|
outputRaw := root.Flags().Bool("raw", false, "don't transform, dump raw eval result")
|
|
|
|
|
urlPrefix := root.Flags().String("urlPrefix", "/", "url-prefix for frontmatter")
|
2020-07-27 16:59:04 +02:00
|
|
|
jpath := root.Flags().StringSliceP("jpath", "J", []string{"vendor"}, "Specify an additional library search dir (right-most wins)")
|
2023-03-03 16:53:03 +01:00
|
|
|
extcode := root.Flags().StringSlice("ext-code", []string{}, "specify additional ext code")
|
2020-05-12 15:23:24 +02:00
|
|
|
|
2020-05-02 19:54:34 +02:00
|
|
|
root.Run = func(cmd *cli.Command, args []string) error {
|
2020-05-12 15:23:24 +02:00
|
|
|
file := args[0]
|
2020-04-29 17:13:38 +02:00
|
|
|
|
2020-05-12 22:48:02 +02:00
|
|
|
log.Println("Extracting from Jsonnet")
|
2023-03-03 16:53:03 +01:00
|
|
|
|
|
|
|
|
opts := docsonnet.Opts{JPath: *jpath, ExtCode: map[string]string{}}
|
|
|
|
|
if len(*extcode) > 0 {
|
|
|
|
|
for _, ext := range *extcode {
|
|
|
|
|
res := strings.Split(ext, "=")
|
|
|
|
|
key, value := res[0], res[1]
|
|
|
|
|
opts.ExtCode[key] = value
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
data, err := docsonnet.Extract(file, opts)
|
2020-05-12 22:48:02 +02:00
|
|
|
if err != nil {
|
|
|
|
|
log.Fatalln("Extracting:", err)
|
|
|
|
|
}
|
|
|
|
|
if *outputRaw {
|
|
|
|
|
fmt.Println(string(data))
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.Println("Transforming to docsonnet model")
|
|
|
|
|
pkg, err := docsonnet.Transform(data)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatalln("Transforming:", err)
|
|
|
|
|
}
|
|
|
|
|
if *outputJSON {
|
|
|
|
|
data, err := json.MarshalIndent(pkg, "", " ")
|
2020-05-12 15:23:24 +02:00
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
fmt.Println(string(data))
|
2020-05-12 22:48:02 +02:00
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.Println("Rendering markdown")
|
|
|
|
|
n, err := render.To(*pkg, *dir, render.Opts{
|
|
|
|
|
URLPrefix: *urlPrefix,
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatalln("Rendering:", err)
|
2020-03-22 16:47:47 +01:00
|
|
|
}
|
|
|
|
|
|
2020-05-12 22:48:02 +02:00
|
|
|
log.Printf("Success! Rendered %v packages from '%s' to '%s'", n, file, *dir)
|
2020-04-30 00:47:43 +02:00
|
|
|
return nil
|
2020-03-22 16:47:47 +01:00
|
|
|
}
|
|
|
|
|
|
2020-05-02 19:54:34 +02:00
|
|
|
if err := root.Execute(); err != nil {
|
|
|
|
|
log.Fatalln(err)
|
|
|
|
|
}
|
2020-03-22 16:47:47 +01:00
|
|
|
}
|