This repository has been archived on 2023-12-07. You can view files and clone it, but cannot push or open issues or pull requests.
cmpdrone/main.go
John Olheiser d70adfca4b
initial commit
Signed-off-by: jolheiser <john.olheiser@gmail.com>
2022-12-15 21:16:25 -06:00

82 lines
1.4 KiB
Go

package main
import (
"bytes"
"errors"
"flag"
"fmt"
"io"
"os"
"strings"
"github.com/google/go-jsonnet"
"github.com/sergi/go-diff/diffmatchpatch"
"gopkg.in/yaml.v3"
)
func main() {
htmlFlag := flag.Bool("html", false, "Output HTML")
flag.Parse()
source, err := os.ReadFile(".drone.jsonnet")
if err != nil {
panic(err)
}
vm := jsonnet.MakeVM()
streams, err := vm.EvaluateSnippetStream(".drone.jsonnet", string(source))
if err != nil {
panic(err)
}
var jsonnetDoc strings.Builder
for _, stream := range streams {
var j any
if err := yaml.Unmarshal([]byte(stream), &j); err != nil {
panic(err)
}
b, err := yaml.Marshal(j)
if err != nil {
panic(err)
}
jsonnetDoc.WriteString("---\n")
jsonnetDoc.Write(b)
}
curSource, err := os.ReadFile(".drone.yml")
if err != nil {
panic(err)
}
var currentDoc strings.Builder
dec := yaml.NewDecoder(bytes.NewReader(curSource))
for {
var y any
err := dec.Decode(&y)
if err != nil {
if !errors.Is(err, io.EOF) {
panic(err)
}
break
}
b, err := yaml.Marshal(y)
if err != nil {
panic(err)
}
currentDoc.WriteString("---\n")
currentDoc.Write(b)
}
if jsonnetDoc.String() == currentDoc.String() {
return
}
dmp := diffmatchpatch.New()
diffs := dmp.DiffMain(currentDoc.String(), jsonnetDoc.String(), false)
if *htmlFlag {
fmt.Println(dmp.DiffPrettyHtml(diffs))
return
}
fmt.Println(dmp.DiffPrettyText(diffs))
}