@ -31,8 +31,8 @@ type File struct {
}
}
type Override struct {
type Override struct {
Key string
Value string
Value string
Arr Value [ ] string
}
}
func defaultFilenames ( ) [ ] string {
func defaultFilenames ( ) [ ] string {
@ -246,8 +246,8 @@ func (c Config) expandTargets(pattern string) ([]string, error) {
return names , nil
return names , nil
}
}
func ( c Config ) newOverrides ( v [ ] string ) ( map [ string ] [ ] Override , error ) {
func ( c Config ) newOverrides ( v [ ] string ) ( map [ string ] map [ string ] Override , error ) {
m := map [ string ] [ ] Override { }
m := map [ string ] map [ string ] Override { }
for _ , v := range v {
for _ , v := range v {
parts := strings . SplitN ( v , "=" , 2 )
parts := strings . SplitN ( v , "=" , 2 )
@ -269,16 +269,19 @@ func (c Config) newOverrides(v []string) (map[string][]Override, error) {
kk := strings . SplitN ( parts [ 0 ] , "." , 2 )
kk := strings . SplitN ( parts [ 0 ] , "." , 2 )
for _ , name := range names {
for _ , name := range names {
t := m [ name ]
t , ok := m [ name ]
if ! ok {
o := Override {
t = map [ string ] Override { }
Key : kk [ 1 ] ,
m [ name ] = t
}
if len ( parts ) == 2 {
o . Value = parts [ 1 ]
}
}
o := t [ kk [ 1 ] ]
switch keys [ 1 ] {
switch keys [ 1 ] {
case "output" , "cache-to" , "cache-from" , "tags" , "platform" , "secrets" , "ssh" :
if len ( parts ) == 2 {
o . ArrValue = append ( o . ArrValue , parts [ 1 ] )
}
case "args" :
case "args" :
if len ( keys ) != 3 {
if len ( keys ) != 3 {
return nil , errors . Errorf ( "invalid key %s, args requires name" , parts [ 0 ] )
return nil , errors . Errorf ( "invalid key %s, args requires name" , parts [ 0 ] )
@ -290,11 +293,14 @@ func (c Config) newOverrides(v []string) (map[string][]Override, error) {
}
}
o . Value = v
o . Value = v
}
}
fallthrough
default :
if len ( parts ) == 2 {
o . Value = parts [ 1 ]
}
}
}
t = append ( t , o )
t [ kk [ 1 ] ] = o
m [ name ] = t
}
}
}
}
return m , nil
return m , nil
@ -326,7 +332,7 @@ func (c Config) group(name string, visited map[string]struct{}) []string {
return targets
return targets
}
}
func ( c Config ) ResolveTarget ( name string , overrides map [ string ] [ ] Override ) ( * Target , error ) {
func ( c Config ) ResolveTarget ( name string , overrides map [ string ] map [ string ] Override ) ( * Target , error ) {
t , err := c . target ( name , map [ string ] struct { } { } , overrides )
t , err := c . target ( name , map [ string ] struct { } { } , overrides )
if err != nil {
if err != nil {
return nil , err
return nil , err
@ -342,7 +348,7 @@ func (c Config) ResolveTarget(name string, overrides map[string][]Override) (*Ta
return t , nil
return t , nil
}
}
func ( c Config ) target ( name string , visited map [ string ] struct { } , overrides map [ string ] [ ] Override ) ( * Target , error ) {
func ( c Config ) target ( name string , visited map [ string ] struct { } , overrides map [ string ] map [ string ] Override ) ( * Target , error ) {
if _ , ok := visited [ name ] ; ok {
if _ , ok := visited [ name ] ; ok {
return nil , nil
return nil , nil
}
}
@ -476,10 +482,10 @@ func (t *Target) Merge(t2 *Target) {
t . Inherits = append ( t . Inherits , t2 . Inherits ... )
t . Inherits = append ( t . Inherits , t2 . Inherits ... )
}
}
func ( t * Target ) AddOverrides ( overrides [ ] Override ) error {
func ( t * Target ) AddOverrides ( overrides map [ string ] Override ) error {
for _ , o := range overrides {
for key , o := range overrides {
value := o . Value
value := o . Value
keys := strings . SplitN ( o. K ey, "." , 2 )
keys := strings . SplitN ( k ey, "." , 2 )
switch keys [ 0 ] {
switch keys [ 0 ] {
case "context" :
case "context" :
t . Context = & value
t . Context = & value
@ -503,21 +509,21 @@ func (t *Target) AddOverrides(overrides []Override) error {
}
}
t . Labels [ keys [ 1 ] ] = value
t . Labels [ keys [ 1 ] ] = value
case "tags" :
case "tags" :
t . Tags = append ( t . Tags , value )
t . Tags = o . ArrValue
case "cache-from" :
case "cache-from" :
t . CacheFrom = append ( t . CacheFrom , value )
t . CacheFrom = o . ArrValue
case "cache-to" :
case "cache-to" :
t . CacheTo = append ( t . CacheTo , value )
t . CacheTo = o . ArrValue
case "target" :
case "target" :
t . Target = & value
t . Target = & value
case "secrets" :
case "secrets" :
t . Secrets = append ( t . Secrets , value )
t . Secrets = o . ArrValue
case "ssh" :
case "ssh" :
t . SSH = append ( t . SSH , value )
t . SSH = o . ArrValue
case "platform" :
case "platform" :
t . Platforms = append ( t . Platforms , value )
t . Platforms = o . ArrValue
case "output" :
case "output" :
t . Outputs = append ( t . Outputs , value )
t . Outputs = o . ArrValue
case "no-cache" :
case "no-cache" :
noCache , err := strconv . ParseBool ( value )
noCache , err := strconv . ParseBool ( value )
if err != nil {
if err != nil {