def deploy_project(args):
    conn = _get_zerocloud_conn(args)
    conn.authenticate()
    ui_auth_version = conn.auth_version

    # We can now reset the auth for the web UI, if needed
    if args.no_ui_auth:
        ui_auth_version = '0.0'

    auth = _prepare_auth(ui_auth_version, args, conn)
    auth_opts = jinja2.Markup(json.dumps(auth))

    deploy_index = _deploy_zapp(conn, args.target, args.zapp, auth_opts,
                                force=args.force)

    print('app deployed to\n  %s/%s' % (conn.url, deploy_index))

    if args.execute:
        # for compatibility with the option name in 'zpm execute'
        args.container = args.target
        resp_body_buffer = BytesIO()
        resp = execute(args, response_body_buffer=resp_body_buffer)
        resp_body_buffer.seek(0)

        if resp['status'] < 200 or resp['status'] >= 300:
            raise zpmlib.ZPMException(resp_body_buffer.read())

        if args.summary:
            total_time, exec_table = _get_exec_table(resp)
            print('Execution summary:')
            print(exec_table)
            print('Total time: %s' % total_time)

        sys.stdout.write(resp_body_buffer.read())