2018-05-15 21:13:11 +00:00
|
|
|
package config
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
|
|
|
|
"gopkg.in/yaml.v2"
|
|
|
|
)
|
|
|
|
|
|
|
|
var projectRoot string
|
|
|
|
|
2018-05-23 23:48:35 +00:00
|
|
|
var dockerAvailable, pandocAvailable bool
|
|
|
|
|
|
|
|
const (
|
|
|
|
// UseDocker invokes pandoc within Docker
|
|
|
|
UseDocker = "docker"
|
|
|
|
// UsePandoc invokes pandoc directly
|
|
|
|
UsePandoc = "pandoc"
|
|
|
|
)
|
|
|
|
|
2018-05-15 21:13:11 +00:00
|
|
|
// SetProjectRoot is used by the test suite.
|
|
|
|
func SetProjectRoot(dir string) {
|
|
|
|
projectRoot = dir
|
|
|
|
}
|
|
|
|
|
|
|
|
type Project struct {
|
|
|
|
Name string `yaml:"name"`
|
2018-05-23 23:48:35 +00:00
|
|
|
Pandoc string `yaml:"pandoc,omitempty"`
|
2018-05-15 21:13:11 +00:00
|
|
|
FilePrefix string `yaml:"filePrefix"`
|
|
|
|
Tickets map[string]interface{} `yaml:"tickets"`
|
|
|
|
}
|
|
|
|
|
2018-05-23 23:48:35 +00:00
|
|
|
// SetPandoc records pandoc availability during initialization
|
|
|
|
func SetPandoc(pandoc bool, docker bool) {
|
|
|
|
pandocAvailable = pandoc
|
|
|
|
dockerAvailable = docker
|
|
|
|
}
|
|
|
|
|
|
|
|
// WhichPandoc indicates which pandoc invocation path should be used
|
|
|
|
func WhichPandoc() string {
|
|
|
|
cfg := Config()
|
|
|
|
if cfg.Pandoc == UsePandoc {
|
|
|
|
return UsePandoc
|
|
|
|
}
|
|
|
|
if cfg.Pandoc == UseDocker {
|
|
|
|
return UseDocker
|
|
|
|
}
|
|
|
|
if pandocAvailable {
|
|
|
|
return UsePandoc
|
|
|
|
}
|
|
|
|
return UseDocker
|
|
|
|
}
|
|
|
|
|
2018-05-15 21:13:11 +00:00
|
|
|
// YAML is the parsed contents of ProjectRoot()/config.yml.
|
|
|
|
func YAML() map[interface{}]interface{} {
|
|
|
|
m := make(map[interface{}]interface{})
|
|
|
|
cfgBytes, err := ioutil.ReadFile(filepath.Join(ProjectRoot(), "comply.yml"))
|
|
|
|
if err != nil {
|
|
|
|
panic("unable to load config.yml: " + err.Error())
|
|
|
|
}
|
|
|
|
yaml.Unmarshal(cfgBytes, &m)
|
|
|
|
return m
|
|
|
|
}
|
|
|
|
|
|
|
|
// Exists tests for the presence of a comply configuration file.
|
|
|
|
func Exists() bool {
|
|
|
|
_, err := ioutil.ReadFile(filepath.Join(ProjectRoot(), "comply.yml"))
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
// Config is the parsed contents of ProjectRoot()/config.yml.
|
|
|
|
func Config() Project {
|
|
|
|
p := Project{}
|
|
|
|
cfgBytes, err := ioutil.ReadFile(filepath.Join(ProjectRoot(), "comply.yml"))
|
|
|
|
if err != nil {
|
|
|
|
panic("unable to load config.yml: " + err.Error())
|
|
|
|
}
|
|
|
|
yaml.Unmarshal(cfgBytes, &p)
|
|
|
|
return p
|
|
|
|
}
|
|
|
|
|
|
|
|
// ProjectRoot is the fully-qualified path to the root directory.
|
|
|
|
func ProjectRoot() string {
|
|
|
|
if projectRoot == "" {
|
|
|
|
dir, err := os.Getwd()
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
projectRoot = dir
|
|
|
|
}
|
|
|
|
|
|
|
|
return projectRoot
|
|
|
|
}
|