-
Notifications
You must be signed in to change notification settings - Fork 129
/
loader.go
124 lines (102 loc) · 3.41 KB
/
loader.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package config
import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"strings"
"github.com/LambdaTest/test-at-scale/pkg/lumber"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
// GlobalNucleusConfig stores the config instance for global use
var GlobalNucleusConfig *NucleusConfig
// GlobalSynapseConfig store the config instance for synapse global use
var GlobalSynapseConfig *SynapseConfig
type tempSecretReader struct {
RepoSecrets map[string]map[string]string `json:"RepoSecrets" yaml:"RepoSecrets"`
}
// LoadNucleusConfig loads config from command instance to predefined config variables
func LoadNucleusConfig(cmd *cobra.Command) (*NucleusConfig, error) {
err := viper.BindPFlags(cmd.Flags())
if err != nil {
return nil, err
}
// default viper configs
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
viper.AutomaticEnv()
// set default configs
setNucleusDefaultConfig()
if configFile, _ := cmd.Flags().GetString("config"); configFile != "" {
viper.SetConfigFile(configFile)
} else {
viper.SetConfigName(".nucleus")
viper.AddConfigPath("./")
viper.AddConfigPath("$HOME/.nucleus")
}
if err := viper.ReadInConfig(); err != nil {
fmt.Println("Warning: No configuration file found. Proceeding with defaults")
}
return populateNucleusConfig(new(NucleusConfig))
}
// LoadSynapseConfig loads config from command instance to predefined config variables
func LoadSynapseConfig(cmd *cobra.Command) (*SynapseConfig, error) {
err := viper.BindPFlags(cmd.Flags())
if err != nil {
return nil, err
}
// default viper configs
viper.SetEnvPrefix("SYN")
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
viper.AutomaticEnv()
// set default configs
setSynapseDefaultConfig()
if configFile, _ := cmd.Flags().GetString("config"); configFile != "" {
viper.SetConfigFile(configFile)
} else {
viper.SetConfigName(".synapse")
viper.AddConfigPath("./")
viper.AddConfigPath("$HOME/.synapse")
}
if err := viper.ReadInConfig(); err != nil {
fmt.Println("Warning: No configuration file found. Proceeding with defaults")
}
return populateSynapseConfig(new(SynapseConfig))
}
// LoadRepoSecrets loads repo secrets from configuration file
func LoadRepoSecrets(cmd *cobra.Command, synapseConfig *SynapseConfig) error {
if configFile, _ := cmd.Flags().GetString("config"); configFile != "" {
viper.SetConfigFile(configFile)
} else {
viper.SetConfigName(".synapse")
viper.AddConfigPath("./")
viper.AddConfigPath("$HOME/.synapse")
}
if err := viper.ReadInConfig(); err != nil {
fmt.Println("Warning: No configuration file found. Proceeding with defaults")
}
secretFile, err := ioutil.ReadFile(viper.GetViper().ConfigFileUsed())
if err != nil {
fmt.Printf("error in reading config file: %v\n", err)
}
var tempSecret tempSecretReader
if err := json.Unmarshal(secretFile, &tempSecret); err != nil {
fmt.Printf("error in umarshaling secrets: %v\n", err)
}
synapseConfig.RepoSecrets = tempSecret.RepoSecrets
return nil
}
// ValidateCfg checks the validity of the config
func ValidateCfg(cfg *SynapseConfig, logger lumber.Logger) error {
if cfg.Lambdatest.SecretKey == "" {
return errors.New("error finding lambdatest secretkey in configuration file")
}
if cfg.ContainerRegistry.Mode == "" {
return errors.New("error finding ContainerRegistry Mode in configuration file")
}
if cfg.RepoSecrets == nil {
logger.Debugf("no RepoSecrets found in configuration file.")
return nil
}
return nil
}