|
|
@ -80,13 +80,15 @@ func ParseCompose(dt []byte) (*Config, error) {
|
|
|
|
return val, ok
|
|
|
|
return val, ok
|
|
|
|
})),
|
|
|
|
})),
|
|
|
|
CacheFrom: s.Build.CacheFrom,
|
|
|
|
CacheFrom: s.Build.CacheFrom,
|
|
|
|
// TODO: add platforms
|
|
|
|
}
|
|
|
|
|
|
|
|
if err = t.composeExtTarget(s.Build.Extensions); err != nil {
|
|
|
|
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if s.Build.Target != "" {
|
|
|
|
if s.Build.Target != "" {
|
|
|
|
target := s.Build.Target
|
|
|
|
target := s.Build.Target
|
|
|
|
t.Target = &target
|
|
|
|
t.Target = &target
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if s.Image != "" {
|
|
|
|
if len(t.Tags) == 0 && s.Image != "" {
|
|
|
|
t.Tags = []string{s.Image}
|
|
|
|
t.Tags = []string{s.Image}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
c.Targets = append(c.Targets, t)
|
|
|
|
c.Targets = append(c.Targets, t)
|
|
|
@ -111,3 +113,82 @@ func flatten(in compose.MappingWithEquals) compose.Mapping {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return out
|
|
|
|
return out
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// composeExtTarget converts Compose build extension x-bake to bake Target
|
|
|
|
|
|
|
|
// https://github.com/compose-spec/compose-spec/blob/master/spec.md#extension
|
|
|
|
|
|
|
|
func (t *Target) composeExtTarget(exts map[string]interface{}) error {
|
|
|
|
|
|
|
|
if ext, ok := exts["x-bake"]; ok {
|
|
|
|
|
|
|
|
for key, val := range ext.(map[string]interface{}) {
|
|
|
|
|
|
|
|
switch key {
|
|
|
|
|
|
|
|
case "tags":
|
|
|
|
|
|
|
|
if res, k := val.(string); k {
|
|
|
|
|
|
|
|
t.Tags = append(t.Tags, res)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
for _, res := range val.([]interface{}) {
|
|
|
|
|
|
|
|
t.Tags = append(t.Tags, res.(string))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
case "cache-from":
|
|
|
|
|
|
|
|
t.CacheFrom = []string{} // Needed to override the main field
|
|
|
|
|
|
|
|
if res, k := val.(string); k {
|
|
|
|
|
|
|
|
t.CacheFrom = append(t.CacheFrom, res)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
for _, res := range val.([]interface{}) {
|
|
|
|
|
|
|
|
t.CacheFrom = append(t.CacheFrom, res.(string))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
case "cache-to":
|
|
|
|
|
|
|
|
if res, k := val.(string); k {
|
|
|
|
|
|
|
|
t.CacheTo = append(t.CacheTo, res)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
for _, res := range val.([]interface{}) {
|
|
|
|
|
|
|
|
t.CacheTo = append(t.CacheTo, res.(string))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
case "secret":
|
|
|
|
|
|
|
|
if res, k := val.(string); k {
|
|
|
|
|
|
|
|
t.Secrets = append(t.Secrets, res)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
for _, res := range val.([]interface{}) {
|
|
|
|
|
|
|
|
t.Secrets = append(t.Secrets, res.(string))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
case "ssh":
|
|
|
|
|
|
|
|
if res, k := val.(string); k {
|
|
|
|
|
|
|
|
t.SSH = append(t.SSH, res)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
for _, res := range val.([]interface{}) {
|
|
|
|
|
|
|
|
t.SSH = append(t.SSH, res.(string))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
case "platforms":
|
|
|
|
|
|
|
|
if res, k := val.(string); k {
|
|
|
|
|
|
|
|
t.Platforms = append(t.Platforms, res)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
for _, res := range val.([]interface{}) {
|
|
|
|
|
|
|
|
t.Platforms = append(t.Platforms, res.(string))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
case "output":
|
|
|
|
|
|
|
|
if res, k := val.(string); k {
|
|
|
|
|
|
|
|
t.Outputs = append(t.Outputs, res)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
for _, res := range val.([]interface{}) {
|
|
|
|
|
|
|
|
t.Outputs = append(t.Outputs, res.(string))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
case "pull":
|
|
|
|
|
|
|
|
if res, ok := val.(bool); ok {
|
|
|
|
|
|
|
|
t.Pull = &res
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
case "no-cache":
|
|
|
|
|
|
|
|
if res, ok := val.(bool); ok {
|
|
|
|
|
|
|
|
t.NoCache = &res
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
return fmt.Errorf("compose file invalid: unkwown %s field for x-bake", key)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
}
|
|
|
|