@@ -78,20 +78,54 @@ func (c *Config) SetGlobalsFromEnv(cmd *cobra.Command) {
7878 })
7979}
8080
81- func expandMapEnv (m map [string ]interface {}, except ... string ) {
82- OUTER:
81+ func expandMapEnv (m map [string ]interface {}, fn func (string , string ) string ) {
8382 for f := range m {
8483 switch v := m [f ].(type ) {
8584 case string :
86- for _ , e := range except {
87- if f == e {
88- continue OUTER
85+ m [f ] = fn (f , v )
86+ case map [string ]interface {}:
87+ expandMapEnv (v , fn )
88+ m [f ] = v
89+ case []any :
90+ for i , item := range v {
91+ switch item := item .(type ) {
92+ case string :
93+ v [i ] = os .ExpandEnv (item )
94+ case map [string ]interface {}:
95+ expandMapEnv (item , fn )
96+ case []any :
97+ expandSliceEnv (item , fn )
8998 }
9099 }
91- m [f ] = os .ExpandEnv (v )
92- case map [string ]interface {}:
93- expandMapEnv (v , except ... )
94100 m [f ] = v
95101 }
96102 }
97103}
104+
105+ func expandSliceEnv (s []any , fn func (string , string ) string ) {
106+ for i , item := range s {
107+ switch item := item .(type ) {
108+ case string :
109+ s [i ] = os .ExpandEnv (item )
110+ case map [string ]interface {}:
111+ expandMapEnv (item , fn )
112+ case []any :
113+ expandSliceEnv (item , fn )
114+ }
115+ }
116+ }
117+
118+ func expandExcept (except ... string ) func (string , string ) string {
119+ return func (k , v string ) string {
120+ for _ , e := range except {
121+ if k == e {
122+ return v
123+ }
124+ }
125+ return os .ExpandEnv (v )
126+ }
127+ }
128+
129+ func expandAll () func (string , string ) string {
130+ return expandExcept ()
131+ }
0 commit comments