handle pipes and calling without args better

This commit is contained in:
Diego Fernando Carrión 2023-10-13 12:22:36 +02:00
parent e16cb89d9f
commit b474823853
Signed by: CRThaze
GPG Key ID: 0F647F8A6A3AF588
3 changed files with 35 additions and 4 deletions

5
go.mod
View File

@ -2,7 +2,10 @@ module gitlab.com/CRThaze/spry
go 1.18
require github.com/Masterminds/sprig/v3 v3.2.3
require (
github.com/Masterminds/sprig/v3 v3.2.3
gopkg.in/yaml.v3 v3.0.1
)
require (
github.com/Masterminds/goutils v1.1.1 // indirect

3
go.sum
View File

@ -56,7 +56,10 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

31
main.go
View File

@ -11,8 +11,10 @@ import (
"os"
"path/filepath"
"strings"
"time"
sprig "github.com/Masterminds/sprig/v3"
yaml "gopkg.in/yaml.v3"
)
type valFileSlice []string
@ -97,8 +99,13 @@ func mergeValues() (result map[string]interface{}) {
for _, vf := range flags.valuesFiles {
vfContent, err := ioutil.ReadFile(vf)
checkErr(err)
err = json.Unmarshal(vfContent, result)
checkErr(err)
if strings.HasSuffix(vf, ".json") {
err = json.Unmarshal(vfContent, result)
checkErr(err)
} else {
err = yaml.Unmarshal(vfContent, result)
checkErr(err)
}
}
for i, v := range flags.values {
subMap := result
@ -119,7 +126,24 @@ func mergeValues() (result map[string]interface{}) {
func main() {
var err error
tpl := template.New("base").Funcs(sprig.FuncMap())
if len(flag.Args()) == 0 || (len(flag.Args()) == 1 && flag.Args()[0] == "-") {
if len(flag.Args()) == 0 {
ch := make(chan struct{})
go func() {
select {
case <-ch:
return
case <-time.After(100 * time.Millisecond):
flag.Usage()
os.Exit(2)
}
}()
var data []byte
data, err = io.ReadAll(os.Stdin)
ch <- struct{}{}
checkErr(err)
tpl, err = tpl.Parse(string(data))
checkErr(err)
} else if len(flag.Args()) == 1 && flag.Args()[0] == "-" {
var data []byte
data, err = io.ReadAll(os.Stdin)
checkErr(err)
@ -129,5 +153,6 @@ func main() {
tpl, err = tpl.ParseFiles(expandFiles(flag.Args())...)
checkErr(err)
}
fmt.Fprintf(os.Stderr, "%+v\n", mergeValues())
tpl.Execute(os.Stdout, mergeValues())
}