class EY module Commands class Deploy app_env = fetch_app_environment(options[:app], options[:environment], options[:account]) env_config = config.environment_config(app_env.environment_name) deploy_config = EY::DeployConfig.new(options, env_config, repo, ui) deployment = app_env.new_deployment({ :ref => deploy_config.ref, :migrate => deploy_config.migrate, :migrate_command => deploy_config.migrate_command, :extra_config => deploy_config.extra_config, }) runner = serverside_runner(app_env, deploy_config.verbose, options[:ignore_bad_master]) out = EY::CLI::UI::Tee.new(ui.out, deployment.out) err = EY::CLI::UI::Tee.new(ui.err, deployment.err) ui.info "Beginning deploy..." begin deployment.start ui.show_deployment(deployment) out << "Deploy initiated.\n" runner.deploy do |args| args.config = deployment.config if deployment.config if deployment.migrate args.migrate = deployment.migrate_command else args.migrate = false end args.ref = deployment.resolved_ref end deployment.successful = runner.call(out, err) rescue Interrupt err << "Interrupted. Deployment halted.\n" ui.warn "Recording canceled deployment in Engine Yard Cloud..." ui.warn "WARNING: Interrupting again may result in a never-finished deployment in the deployment history on Engine Yard Cloud." raise rescue StandardError => e deployment.err << "Error encountered during deploy.\n#{e.class} #{e}\n" ui.print_exception(e) raise ensure deployment.finished if deployment.successful? ui.info "Successful deployment recorded on Engine Yard Cloud" ui.info "Deploy complete" ui.info "Now you can run `ey launch' to open the application in a browser." else ui.info "Failed deployment recorded on Engine Yard Cloud" raise EY::Error, "Deploy failed" end end end end end