Files
speedrun/config/config.go

78 lines
1.3 KiB
Go

package config
import (
"errors"
"os"
"path/filepath"
"regexp"
"github.com/apex/log"
"github.com/manifoldco/promptui"
homedir "github.com/mitchellh/go-homedir"
"github.com/spf13/viper"
)
//Create generates a new config
func Create() error {
viper.SetDefault("loglevel", "info")
project := promptui.Prompt{
Label: "Project id",
Validate: func(input string) error {
match, err := regexp.MatchString("^[a-z][a-z0-9-]{6,30}", input)
if err != nil {
return err
}
if !match {
return errors.New("invalid projectid")
}
return nil
},
}
prompt := promptui.Select{
Label: "Pick a cloud provider",
Items: []string{"Google Cloud"},
HideHelp: true,
}
_, result, err := prompt.Run()
if err != nil {
log.Fatal(err.Error())
}
switch result {
case "Google Cloud":
result, err := project.Run()
if err != nil {
log.Fatal(err.Error())
}
viper.SetDefault("gcp.projectid", result)
}
if err != nil {
log.Fatal(err.Error())
}
home, err := homedir.Dir()
if err != nil {
return err
}
dir := filepath.Join(home, ".speedrun")
path := filepath.Join(dir, "config.toml")
if _, err := os.Stat(dir); os.IsNotExist(err) {
err = os.Mkdir(dir, 0755)
if err != nil {
return err
}
}
err = viper.WriteConfigAs(path)
if err != nil {
return err
}
log.Infof("Your config was saved at: %s", path)
return nil
}