func resolveEnvironment(serviceConfig *types.ServiceConfig, serviceDict types.Dict, workingDir string) error { environment := make(map[string]string) if envFileVal, ok := serviceDict["env_file"]; ok { envFiles := loadStringOrListOfStrings(envFileVal) var envVars []string for _, file := range envFiles { filePath := path.Join(workingDir, file) fileVars, err := opts.ParseEnvFile(filePath) if err != nil { return err } envVars = append(envVars, fileVars...) } for k, v := range opts.ConvertKVStringsToMap(envVars) { environment[k] = v } } for k, v := range serviceConfig.Environment { environment[k] = v } serviceConfig.Environment = environment return nil }
// Lookup creates a string slice of string containing a "docker-friendly" environment string // in the form of 'key=value'. It gets environment values using a '.env' file in the specified // path. func (l *EnvfileLookup) Lookup(key, serviceName string, config *config.ServiceConfig) []string { envs, err := opts.ParseEnvFile(l.Path) if err != nil { return []string{} } for _, env := range envs { e := strings.Split(env, "=") if e[0] == key { return []string{env} } } return []string{} }
// Run sets environment variables func (t *Task) Run(ctx *context.ExecuteContext, _ bool) (bool, error) { for _, filename := range t.config.Files { vars, err := opts.ParseEnvFile(filename) if err != nil { return true, err } if err := setVariables(vars); err != nil { return true, err } } if err := setVariables(t.config.Variables); err != nil { return true, err } logging.ForTask(t).Info("Done") return true, nil }