github.com/grahambrereton-form3/tilt@v0.10.18/internal/dockercompose/read.go (about) 1 package dockercompose 2 3 import ( 4 "context" 5 "strings" 6 7 "golang.org/x/sync/errgroup" 8 "gopkg.in/yaml.v2" 9 ) 10 11 func ReadConfigAndServiceNames(ctx context.Context, dcc DockerComposeClient, 12 configPaths []string) (conf Config, svcNames []string, err error) { 13 // calls to `docker-compose config` take a bit, and we need two, 14 // so do them in parallel to make things faster 15 g, ctx := errgroup.WithContext(ctx) 16 17 g.Go(func() error { 18 19 configOut, err := dcc.Config(ctx, configPaths) 20 21 if err != nil { 22 return err 23 } 24 25 err = yaml.Unmarshal([]byte(configOut), &conf) 26 if err != nil { 27 return err 28 } 29 return nil 30 }) 31 32 g.Go(func() error { 33 var err error 34 svcNames, err = serviceNames(ctx, dcc, configPaths) 35 if err != nil { 36 return err 37 } 38 return nil 39 }) 40 41 err = g.Wait() 42 return conf, svcNames, err 43 } 44 45 func serviceNames(ctx context.Context, dcc DockerComposeClient, configPaths []string) ([]string, error) { 46 servicesText, err := dcc.Services(ctx, configPaths) 47 if err != nil { 48 return nil, err 49 } 50 51 serviceNames := strings.Split(servicesText, "\n") 52 53 var result []string 54 55 for _, name := range serviceNames { 56 if name == "" { 57 continue 58 } 59 result = append(result, name) 60 } 61 62 return result, nil 63 }