in command-runner/internal/containers/finch/finch_run.go [164:203]
func (cr *finchContainer) find() common.Executor {
return func(ctx context.Context) error {
if cr.id != "" {
return nil
}
rout, rerr, err := cr.f.RunWithoutStdio(ctx, "container", "ls", "--all", "--format", "{{json .}}")
if err != nil {
return fmt.Errorf("failed to list containers: %w\n%s", err, rerr)
}
scanner := bufio.NewScanner(bytes.NewReader(rout))
for scanner.Scan() {
cs := new(finchContainerSpec)
if err := json.Unmarshal(scanner.Bytes(), cs); err != nil {
return fmt.Errorf("failed unmarshalling container spec: %w", err)
}
names := make([]string, 0)
switch typedNames := cs.Names.(type) {
case []interface{}:
for _, inf := range typedNames {
names = append(names, inf.(string))
}
case []string:
names = typedNames
case string:
names = []string{typedNames}
default:
return fmt.Errorf("invalid names type: %T", cs.Names)
}
log.Ctx(ctx).Debug().Msgf("got back container %+v with names %v", cs, names)
if slices.Contains(names, cr.input.Name) {
cr.id = cs.ID
return nil
}
}
cr.id = ""
return nil
}
}