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  }