//RecoverInteractive restarts the box with a terminal attached func (b *DockerBox) RecoverInteractive(cwd string, pipeline core.Pipeline, step core.Step) error { // TODO(termie): maybe move the container manipulation outside of here? client := b.client container, err := b.Restart() if err != nil { b.logger.Panicln("box restart failed") return err } env := []string{} env = append(env, pipeline.Env().Export()...) env = append(env, pipeline.Env().Hidden.Export()...) env = append(env, step.Env().Export()...) env = append(env, fmt.Sprintf("cd %s", cwd)) cmd := []string{b.cmd} return client.AttachInteractive(container.ID, cmd, env) }
// AddServices fetches and links the services to the base box. func (p *Runner) AddServices(ctx context.Context, pipeline core.Pipeline, box core.Box) error { f := p.formatter timer := util.NewTimer() for _, service := range pipeline.Services() { timer.Reset() if _, err := service.Fetch(ctx, pipeline.Env()); err != nil { return err } box.AddService(service) if p.options.Verbose { p.logger.Printf(f.Success(fmt.Sprintf("Fetched %s", service.GetName()), timer.String())) } // TODO(mh): We want to make sure container is running fully before // allowing build steps to run. We may need custom steps which block // until service services are running. } return nil }