joao/pkg/config/util.go

86 lines
1.8 KiB
Go
Raw Normal View History

2022-12-09 06:43:07 +00:00
// Copyright © 2022 Roberto Hidalgo <joao@un.rob.mx>
2022-12-31 06:14:08 +00:00
// SPDX-License-Identifier: Apache-2.0
2022-12-09 06:43:07 +00:00
package config
import (
"bytes"
"fmt"
"os"
2022-12-09 06:43:07 +00:00
"path/filepath"
"strings"
"text/template"
"github.com/sirupsen/logrus"
"gopkg.in/yaml.v3"
)
2022-12-17 05:40:43 +00:00
type opDetails struct {
Vault string `yaml:"vault"`
Name string `yaml:"name"`
2022-12-18 18:16:46 +00:00
NameTemplate string `yaml:"nameTemplate"` // nolint: tagliatelle
2022-12-17 05:40:43 +00:00
Repo string
}
type singleModeConfig struct {
2022-12-18 18:16:46 +00:00
Config *opDetails `yaml:"_config,omitempty"` // nolint: tagliatelle
2022-12-17 05:40:43 +00:00
}
2022-12-09 06:43:07 +00:00
func argIsYAMLFile(path string) bool {
return strings.HasSuffix(path, ".yaml") || strings.HasSuffix(path, ".yml")
}
2023-01-11 06:57:58 +00:00
func VaultAndNameFrom(path string, buf []byte) (name string, vault string, err error) {
2022-12-09 06:43:07 +00:00
smc := &singleModeConfig{}
if buf == nil {
var err error
buf, err = os.ReadFile(path)
2022-12-09 06:43:07 +00:00
if err != nil {
return "", "", fmt.Errorf("could not read file %s", path)
}
}
2022-12-14 05:41:03 +00:00
if err = yaml.Unmarshal(buf, &smc); err == nil && smc.Config != nil {
return smc.Config.Name, smc.Config.Vault, nil
2022-12-09 06:43:07 +00:00
}
rmc, err := findRepoConfig(path)
if err != nil {
return "", "", err
}
if rmc == nil {
return "", "", fmt.Errorf("could not find repo config for %s", path)
}
if rmc.NameTemplate == "" {
rmc.NameTemplate = "{{ DirName }}:{{ FileName}}"
}
logrus.Debugf("Found repo config at %s", rmc.Repo)
tpl := template.Must(template.New("help").Funcs(template.FuncMap{
"DirName": func() string {
return filepath.Base(filepath.Dir(path))
},
"FileName": func() string {
return strings.Split(filepath.Base(path), ".")[0]
},
}).Parse(rmc.NameTemplate))
var nameBuf bytes.Buffer
err = tpl.Execute(&nameBuf, nil)
if err != nil {
return "", "", err
}
return nameBuf.String(), rmc.Vault, nil
}
2022-12-20 05:49:37 +00:00
func isNumeric(s string) bool {
for _, v := range s {
if v < '0' || v > '9' {
return false
}
}
return true
2022-12-09 06:43:07 +00:00
}