shipit-engine 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/_pages/_stacks.scss +3 -3
  3. data/app/controllers/rollbacks_controller.rb +2 -2
  4. data/app/helpers/shipit_helper.rb +2 -2
  5. data/app/jobs/background_job/unique.rb +1 -8
  6. data/app/jobs/perform_task_job.rb +24 -14
  7. data/app/models/commit.rb +1 -1
  8. data/app/models/deploy.rb +4 -3
  9. data/app/views/deploys/rollback.html.erb +19 -4
  10. data/app/views/stacks/index.html.erb +2 -0
  11. data/lib/shipit/version.rb +1 -1
  12. data/test/controllers/api/deploys_controller_test.rb +2 -2
  13. data/test/controllers/api/hooks_controller_test.rb +1 -1
  14. data/test/controllers/deploys_controller_test.rb +3 -3
  15. data/test/controllers/github_authentication_controller_test.rb +1 -1
  16. data/test/controllers/rollbacks_controller_test.rb +15 -2
  17. data/test/controllers/tasks_controller_test.rb +1 -1
  18. data/test/controllers/webhooks_controller_test.rb +4 -4
  19. data/test/dummy/db/development.sqlite3 +0 -0
  20. data/test/dummy/db/test.sqlite3 +0 -0
  21. data/test/dummy/log/development.log +191 -0
  22. data/test/dummy/log/test.log +38716 -0
  23. data/test/dummy/tmp/cache/48D/660/task%3A73%3Apid +2 -0
  24. data/test/dummy/tmp/cache/5F5/7B0/task%3A644540443%3Apid +1 -1
  25. data/test/dummy/tmp/cache/5F7/AA0/task%3A496901070%3Apid +1 -1
  26. data/test/dummy/tmp/cache/5FD/BF0/task%3A616453971%3Apid +1 -1
  27. data/test/dummy/tmp/cache/98C/C60/stacks%3A616453971%3Aci_enabled +1 -1
  28. data/test/helpers/queries_helper.rb +1 -1
  29. data/test/jobs/emit_event_job_test.rb +1 -1
  30. data/test/jobs/unique_job_test.rb +6 -0
  31. data/test/models/commits_test.rb +1 -1
  32. data/test/models/deploys_test.rb +7 -7
  33. data/test/models/hook_test.rb +1 -1
  34. data/test/models/output_chunk_test.rb +1 -1
  35. data/test/models/stacks_test.rb +2 -2
  36. data/test/models/status_test.rb +1 -1
  37. data/test/models/team_test.rb +2 -2
  38. data/test/models/users_test.rb +1 -1
  39. data/test/test_helper.rb +1 -1
  40. data/test/unit/github_url_helper_test.rb +1 -1
  41. metadata +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ec004fd4dba42210c7901d6e8f718c9d1dbebcb7
4
- data.tar.gz: ef81da642f9a540a2e7250376d50e7b9b413c117
3
+ metadata.gz: 4eeb1f65c12a0752ff6f9c863dce78018b585865
4
+ data.tar.gz: fd0d609758894d4aa557dcbc3ed0cf97d8f001d5
5
5
  SHA512:
6
- metadata.gz: 6b22783bb6cc8fc44120b97016dad4d1701e6062833a10e00dc24e2257e2ca6fdae20aa3a1b49d06413bd3267791879b04d40a691fe627364fa8a431d3c029de
7
- data.tar.gz: d7e2fb2aa373ab1e3fa1e902994aa11955a9b2d29f54b5bc2363c3e5c1d5c60c4328957aea6e0faad0debd16f19994cd3d9f9c2bdd67f058dbfb11930e96a64a
6
+ metadata.gz: ff30047b9299a83af136b7cad0ea86e4fb03203b6e33a7076c8e95949d253ba8b2a5c402513c75e08711556d17efc674618a7daebc0a3a91870cfe1928006b82
7
+ data.tar.gz: 9c90600d322f587b863eb70299732e5d58bdbd29a4ea5ebb6754ab460c3aef717112983a3ace1c5782745b5853ccfca4a617a0996ff22ca8978b0f48a155f7f9
@@ -19,7 +19,7 @@
19
19
  @include clearfix;
20
20
  margin: 0; padding: 1.25rem 0 1rem;
21
21
  .col {
22
- width: 33.33%;
22
+ width: 25%;
23
23
  float: left;
24
24
  }
25
25
  li {
@@ -33,7 +33,7 @@
33
33
  list-style-type: none;
34
34
  margin: 0; padding: 0; margin-bottom: 1.5rem;
35
35
  .col {
36
- width: 33.33%;
36
+ width: 25%;
37
37
  float: left;
38
38
  text-overflow: ellipsis;
39
39
  white-space: nowrap;
@@ -156,4 +156,4 @@
156
156
 
157
157
  .pagination {
158
158
  text-align: center;
159
- }
159
+ }
@@ -4,7 +4,7 @@ class RollbacksController < ShipitController
4
4
 
5
5
  def create
6
6
  return redirect_to rollback_stack_deploy_path(@stack, @deploy) if !params[:force] && @stack.deploying?
7
- @rollback = @deploy.trigger_rollback(current_user)
7
+ @rollback = @deploy.trigger_rollback(current_user, env: rollback_params[:env])
8
8
  redirect_to stack_deploy_path(@stack, @rollback)
9
9
  end
10
10
 
@@ -19,6 +19,6 @@ class RollbacksController < ShipitController
19
19
  end
20
20
 
21
21
  def rollback_params
22
- params.require(:rollback).permit(:parent_id)
22
+ params.require(:rollback).permit(:parent_id, env: @stack.deploy_variables.map(&:name))
23
23
  end
24
24
  end
@@ -21,7 +21,7 @@ module ShipitHelper
21
21
  (<<-MESSAGE).html_safe
22
22
  Shipit requires a GitHub application to authenticate users.
23
23
  If you haven't created an application on GitHub yet, you can do so in the
24
- #{ link_to 'Settings', Shipit.github_url('/settings/applications/new'), target: '_blank' }
24
+ #{link_to 'Settings', Shipit.github_url('/settings/applications/new'), target: '_blank'}
25
25
  section of your profile. You can also create applications for organizations.
26
26
  MESSAGE
27
27
  end
@@ -43,7 +43,7 @@ module ShipitHelper
43
43
  def missing_github_api_credentials_message
44
44
  (<<-MESSAGE).html_safe
45
45
  Shipit needs API access to GitHub. You can
46
- #{ link_to 'create an access token', Shipit.github_url('/settings/tokens'), target: '_blank' }
46
+ #{link_to 'create an access token', Shipit.github_url('/settings/tokens'), target: '_blank'}
47
47
  with the following permissions:
48
48
  <code>admin:repo_hook</code>, <code>admin:org_hook</code> and <code>repo</code>
49
49
  and add it to the secrets.yml file under the key <code>github_api.access_token</code>.
@@ -20,14 +20,7 @@ class BackgroundJob
20
20
  end
21
21
 
22
22
  def lock_key(*args)
23
- ([self.class.name] + args).map { |arg| hash_argument(arg) }.join('-')
24
- end
25
-
26
- private
27
-
28
- def hash_argument(argument)
29
- return argument.to_global_id.to_s if argument.respond_to?(:to_global_id)
30
- argument.to_s
23
+ ActiveJob::Arguments.serialize([self.class.name] + args).join('-')
31
24
  end
32
25
  end
33
26
  end
@@ -3,24 +3,12 @@ class PerformTaskJob < BackgroundJob
3
3
 
4
4
  def perform(task)
5
5
  @task = task
6
+ @commands = Commands.for(@task)
6
7
  unless @task.pending?
7
8
  logger.error("Task ##{@task.id} already in `#{@task.status}` state. Aborting.")
8
9
  return
9
10
  end
10
-
11
- @task.run!
12
- commands = Commands.for(@task)
13
- @task.acquire_git_cache_lock do
14
- capture commands.fetch
15
- capture commands.clone
16
- end
17
- capture commands.checkout(@task.until_commit)
18
-
19
- Bundler.with_clean_env do
20
- capture_all commands.install_dependencies
21
- capture_all commands.perform
22
- end
23
- @task.complete!
11
+ run
24
12
  rescue Command::Error => error
25
13
  @task.report_failure!(error)
26
14
  rescue StandardError => error
@@ -29,6 +17,28 @@ class PerformTaskJob < BackgroundJob
29
17
  @task.clear_working_directory
30
18
  end
31
19
 
20
+ def run
21
+ @task.run!
22
+ checkout_repository
23
+ perform_task
24
+ @task.complete!
25
+ end
26
+
27
+ def perform_task
28
+ Bundler.with_clean_env do
29
+ capture_all @commands.install_dependencies
30
+ capture_all @commands.perform
31
+ end
32
+ end
33
+
34
+ def checkout_repository
35
+ @task.acquire_git_cache_lock do
36
+ capture @commands.fetch
37
+ capture @commands.clone
38
+ end
39
+ capture @commands.checkout(@task.until_commit)
40
+ end
41
+
32
42
  def capture_all(commands)
33
43
  commands.map { |c| capture(c) }
34
44
  end
data/app/models/commit.rb CHANGED
@@ -15,7 +15,7 @@ class Commit < ActiveRecord::Base
15
15
  belongs_to :author, class_name: 'User', inverse_of: :authored_commits
16
16
  belongs_to :committer, class_name: 'User', inverse_of: :commits
17
17
 
18
- scope :reachable, -> { where(detached: false) }
18
+ scope :reachable, -> { where(detached: false) }
19
19
 
20
20
  delegate :broadcast_update, :github_repo_name, to: :stack
21
21
 
data/app/models/deploy.rb CHANGED
@@ -12,19 +12,20 @@ class Deploy < Task
12
12
 
13
13
  delegate :broadcast_update, to: :stack
14
14
 
15
- def build_rollback(user = nil)
15
+ def build_rollback(user = nil, env: nil)
16
16
  Rollback.new(
17
17
  user_id: user.try!(:id),
18
18
  stack_id: stack_id,
19
19
  parent_id: id,
20
20
  since_commit: stack.last_deployed_commit,
21
21
  until_commit: until_commit,
22
+ env: env || {},
22
23
  )
23
24
  end
24
25
 
25
26
  # Rolls the stack back to this deploy
26
- def trigger_rollback(user = AnonymousUser.new)
27
- rollback = build_rollback(user)
27
+ def trigger_rollback(user = AnonymousUser.new, env: nil)
28
+ rollback = build_rollback(user, env: env)
28
29
  rollback.save!
29
30
  rollback.enqueue
30
31
 
@@ -25,13 +25,28 @@
25
25
 
26
26
  <%= render_checklist @stack.checklist %>
27
27
 
28
- <section class="submit-section">
29
- <%= form_for [@stack, @rollback] do |f| %>
28
+ <%= form_for [@stack, @rollback] do |f| %>
29
+ <% unless @rollback.variables.empty? %>
30
+ <section>
31
+ <header class="section-header environment-variables">
32
+ <h2>Environment variables</h2>
33
+ </header>
34
+ <%= f.fields_for :env do |env_fields| %>
35
+ <% @rollback.variables.each do |variable| %>
36
+ <p class="environment-variable">
37
+ <%= env_fields.text_field variable.name, value: variable.default %>
38
+ <%= env_fields.label variable.name, variable.title || variable.name %>
39
+ </p>
40
+ <% end %>
41
+ <% end %>
42
+ </section>
43
+ <% end %>
44
+ <section class="submit-section">
30
45
  <% if @stack.deploying? %>
31
46
  <%= hidden_field_tag :force, value: true %>
32
47
  <% end %>
33
48
  <%= f.hidden_field :parent_id %>
34
49
  <%= f.submit 'Rollback', :class => ['btn', 'rollback', 'trigger-rollback'], data: {confirm: "Are you really sure it's safe?"} %>
35
- <% end %>
36
- </section>
50
+ </section>
51
+ <% end %>
37
52
  </div>
@@ -13,6 +13,7 @@
13
13
  <ul class="stack-table-header">
14
14
  <li class="col">Name</li>
15
15
  <li class="col">Environment</li>
16
+ <li class="col">Branch</li>
16
17
  <li class="col">Deploy URL</li>
17
18
  </ul>
18
19
  <ul class="stack-lst">
@@ -21,6 +22,7 @@
21
22
  <%= link_to stack_path(stack), class: 'commits-path' do %>
22
23
  <span class="col"><%= stack.repo_name %></span>
23
24
  <small class="col"><%= stack.environment.capitalize %></small>
25
+ <small class="col"><%= stack.branch %></small>
24
26
  <small class="col"><%= stack.deploy_url %></small>
25
27
  <% end %>
26
28
  </li>
@@ -1,3 +1,3 @@
1
1
  module Shipit
2
- VERSION = '0.2.3'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -9,7 +9,7 @@ class Api::DeploysControllerTest < ActionController::TestCase
9
9
  end
10
10
 
11
11
  test "#create triggers a new deploy for the stack" do
12
- assert_difference -> { @stack.deploys.count }, +1 do
12
+ assert_difference -> { @stack.deploys.count }, 1 do
13
13
  post :create, stack_id: @stack.to_param, sha: @commit.sha
14
14
  end
15
15
  assert_response :accepted
@@ -48,7 +48,7 @@ class Api::DeploysControllerTest < ActionController::TestCase
48
48
  test "#create accepts to deploy locked stacks if force mode is enabled" do
49
49
  @stack.update!(lock_reason: 'Something broken')
50
50
 
51
- assert_difference -> { @stack.deploys.count }, +1 do
51
+ assert_difference -> { @stack.deploys.count }, 1 do
52
52
  post :create, stack_id: @stack.to_param, sha: @commit.sha, force: true
53
53
  end
54
54
  assert_response :accepted
@@ -41,7 +41,7 @@ class Api::HooksControllerTest < ActionController::TestCase
41
41
  end
42
42
 
43
43
  test "#create adds a new hook" do
44
- assert_difference -> { Hook.count }, +1 do
44
+ assert_difference -> { Hook.count }, 1 do
45
45
  post :create, url: 'https://example.com/hook', events: %w(deploy rollback)
46
46
  end
47
47
  assert_json 'url', 'https://example.com/hook'
@@ -31,7 +31,7 @@ class DeploysControllerTest < ActionController::TestCase
31
31
  end
32
32
 
33
33
  test ":create persists a new deploy" do
34
- assert_difference '@stack.deploys.count', +1 do
34
+ assert_difference '@stack.deploys.count', 1 do
35
35
  post :create, stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id}
36
36
  end
37
37
  end
@@ -43,7 +43,7 @@ class DeploysControllerTest < ActionController::TestCase
43
43
  assert_equal env, new_deploy.env
44
44
  end
45
45
 
46
- test ":create can receive an :env keys not declared in the deploy spec" do
46
+ test ":create ignore :env keys not declared in the deploy spec" do
47
47
  post :create, stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id, env: {'H4X0R' => '1'}}
48
48
  new_deploy = Deploy.last
49
49
  assert_equal({}, new_deploy.env)
@@ -52,7 +52,7 @@ class DeploysControllerTest < ActionController::TestCase
52
52
  test ":create with `force` option ignore the active deploys" do
53
53
  deploys(:shipit_running).update_column(:status, 'running')
54
54
 
55
- assert_difference '@stack.deploys.count', +1 do
55
+ assert_difference '@stack.deploys.count', 1 do
56
56
  post :create, stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id}, force: true
57
57
  end
58
58
  end
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
 
3
3
  class GithubAuthenticationControllerTest < ActionController::TestCase
4
4
  test ":callback can sign in to github" do
5
- @request.env['omniauth.auth'] = {info: {nickname: 'shipit'}}
5
+ @request.env['omniauth.auth'] = {info: {nickname: 'shipit'}}
6
6
  github_user = mock('Sawyer User')
7
7
  Shipit.github_api.stubs(:user).returns(github_user)
8
8
  User.expects(:find_or_create_from_github).with(github_user).returns(stub(id: 44))
@@ -9,11 +9,24 @@ class RollbacksControllerTest < ActionController::TestCase
9
9
  end
10
10
 
11
11
  test ":create persists a new rollback" do
12
- assert_difference '@stack.rollbacks.count', +1 do
12
+ assert_difference '@stack.rollbacks.count', 1 do
13
13
  post :create, stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}
14
14
  end
15
15
  end
16
16
 
17
+ test ":create can receive an :env hash" do
18
+ env = {'SAFETY_DISABLED' => '1'}
19
+ post :create, stack_id: @stack.to_param, rollback: {parent_id: @deploy.id, env: env}
20
+ new_rollback = Rollback.last
21
+ assert_equal env, new_rollback.env
22
+ end
23
+
24
+ test ":create ignore :env keys not declared in the deploy spec" do
25
+ post :create, stack_id: @stack.to_param, rollback: {parent_id: @deploy.id, env: {'H4X0R' => '1'}}
26
+ new_rollback = Rollback.last
27
+ assert_equal({}, new_rollback.env)
28
+ end
29
+
17
30
  test ":create redirects to the new deploy" do
18
31
  post :create, stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}
19
32
  assert_redirected_to stack_deploy_path(@stack, Rollback.last)
@@ -34,7 +47,7 @@ class RollbacksControllerTest < ActionController::TestCase
34
47
 
35
48
  test ":create with `force` option ignore the active deploys" do
36
49
  deploys(:shipit_running).update_column(:status, 'running')
37
- assert_difference '@stack.deploys.count', +1 do
50
+ assert_difference '@stack.deploys.count', 1 do
38
51
  post :create, stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}, force: true
39
52
  end
40
53
  assert_redirected_to stack_deploy_path(@stack, Rollback.last)
@@ -15,7 +15,7 @@ class TasksControllerTest < ActionController::TestCase
15
15
  end
16
16
 
17
17
  test "tasks defined in the shipit.yml can be triggered" do
18
- assert_difference '@stack.tasks.count', +1 do
18
+ assert_difference '@stack.tasks.count', 1 do
19
19
  post :create, stack_id: @stack, definition_id: @definition.id
20
20
  end
21
21
  assert_redirected_to stack_task_path(@stack, Task.last)
@@ -38,7 +38,7 @@ class WebhooksControllerTest < ActionController::TestCase
38
38
  status_payload = payload(:status_master)
39
39
  commit = commits(:first)
40
40
 
41
- assert_difference 'commit.statuses.count', +1 do
41
+ assert_difference 'commit.statuses.count', 1 do
42
42
  post :state, {stack_id: @stack.id}.merge(status_payload)
43
43
  end
44
44
 
@@ -112,7 +112,7 @@ class WebhooksControllerTest < ActionController::TestCase
112
112
  end
113
113
 
114
114
  test ":membership creates the mentioned team on the fly" do
115
- assert_difference -> { Team.count }, +1 do
115
+ assert_difference -> { Team.count }, 1 do
116
116
  post :membership, membership_params.merge(team: {
117
117
  id: 48,
118
118
  name: 'Ouiche Cooks',
@@ -125,7 +125,7 @@ class WebhooksControllerTest < ActionController::TestCase
125
125
 
126
126
  test ":membership creates the mentioned user on the fly" do
127
127
  Shipit.github_api.expects(:user).with('george').returns(george)
128
- assert_difference -> { User.count }, +1 do
128
+ assert_difference -> { User.count }, 1 do
129
129
  post :membership, membership_params.merge(member: {login: 'george'})
130
130
  assert_response :ok
131
131
  end
@@ -139,7 +139,7 @@ class WebhooksControllerTest < ActionController::TestCase
139
139
  end
140
140
 
141
141
  test ":membership can append an user membership" do
142
- assert_difference -> { Membership.count }, +1 do
142
+ assert_difference -> { Membership.count }, 1 do
143
143
  post :membership, membership_params.merge(member: {login: 'bob'})
144
144
  assert_response :ok
145
145
  end
Binary file
Binary file
@@ -493597,3 +493597,194 @@ Started GET "/assets/shipit/stacks.self-d2499e06817173277ad4b14bf799828c2374673a
493597
493597
 
493598
493598
 
493599
493599
  Started GET "/assets/shipit.self-6797e03b284f971915dacd06b1d23f1a4dd7a37bad3cbd4880de8aed970c96a4.js?body=1" for 127.0.0.1 at 2015-08-20 22:03:14 -0400
493600
+ Deploy Load (0.7ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."type" IN ('Deploy') ORDER BY "tasks"."id" DESC LIMIT 1
493601
+ Task #73 already in `success` state. Aborting.
493602
+ Stack Load (0.5ms) SELECT "stacks".* FROM "stacks" WHERE "stacks"."id" = ? LIMIT 1 [["id", 3]]
493603
+ Deploy Load (0.2ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."type" IN ('Deploy') ORDER BY "tasks"."id" DESC LIMIT 1
493604
+ SQL (1.5ms) UPDATE "tasks" SET "status" = 'scheduled' WHERE "tasks"."type" IN ('Deploy') AND "tasks"."id" = ? [["id", 73]]
493605
+ Deploy Load (0.3ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."type" IN ('Deploy') ORDER BY "tasks"."id" DESC LIMIT 1
493606
+ Task #73 already in `scheduled` state. Aborting.
493607
+ Stack Load (0.1ms) SELECT "stacks".* FROM "stacks" WHERE "stacks"."id" = ? LIMIT 1 [["id", 3]]
493608
+ Deploy Load (0.2ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."type" IN ('Deploy') ORDER BY "tasks"."id" DESC LIMIT 1
493609
+ SQL (1.1ms) UPDATE "tasks" SET "status" = 'new' WHERE "tasks"."type" IN ('Deploy') AND "tasks"."id" = ? [["id", 73]]
493610
+ Deploy Load (0.3ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."type" IN ('Deploy') ORDER BY "tasks"."id" DESC LIMIT 1
493611
+ Task #73 already in `new` state. Aborting.
493612
+ Stack Load (0.2ms) SELECT "stacks".* FROM "stacks" WHERE "stacks"."id" = ? LIMIT 1 [["id", 3]]
493613
+ Deploy Load (0.3ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."type" IN ('Deploy') ORDER BY "tasks"."id" DESC LIMIT 1
493614
+ SQL (7.2ms) UPDATE "tasks" SET "status" = 'pending' WHERE "tasks"."type" IN ('Deploy') AND "tasks"."id" = ? [["id", 73]]
493615
+ Deploy Load (0.3ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."type" IN ('Deploy') ORDER BY "tasks"."id" DESC LIMIT 1
493616
+  (0.1ms) begin transaction
493617
+ SQL (0.4ms) UPDATE "tasks" SET "status" = ?, "updated_at" = ? WHERE "tasks"."id" = ? [["status", "running"], ["updated_at", "2015-08-25 21:32:16.805300"], ["id", 73]]
493618
+ Stack Load (0.0ms) SELECT "stacks".* FROM "stacks" WHERE "stacks"."id" = ? LIMIT 1 [["id", 3]]
493619
+ SQL (0.1ms) UPDATE "stacks" SET "updated_at" = '2015-08-25 21:32:16.808116' WHERE "stacks"."id" = ? [["id", 3]]
493620
+  (0.7ms) commit transaction
493621
+ User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 4]]
493622
+ Commit Load (0.9ms) SELECT "commits".* FROM "commits" WHERE "commits"."id" = ? LIMIT 1 [["id", 145]]
493623
+ Commit Load (0.6ms) SELECT "commits".* FROM "commits" WHERE "commits"."stack_id" = ? AND "commits"."detached" = 'f' AND (id > 145) AND (id <= 145) ORDER BY "commits"."id" DESC [["stack_id", 3]]
493624
+ [ActiveJob] Enqueued EmitEventJob (Job ID: d732f0af-3298-4c9e-b914-ff78c7541ec4) to SuckerPunch(hooks) with arguments: {:event=>"deploy", :stack_id=>3, :payload=>"{\"deploy\":{\"id\":73,\"url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks/73\",\"html_url\":\"http://localhost:3000/volkman-llc/legros-biz/production/deploys/73\",\"output_url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks/73/output\",\"type\":\"deploy\",\"status\":\"running\",\"updated_at\":\"2015-08-25T21:32:16.805Z\",\"created_at\":\"2015-08-14T21:25:39.801Z\",\"additions\":0,\"deletions\":0,\"author\":{\"id\":4,\"name\":\"Janae Mosciski\",\"email\":\"luther@reinger.com\",\"login\":\"claria\",\"avatar_url\":null,\"created_at\":\"2015-08-14T21:25:26.344Z\",\"updated_at\":\"2015-08-14T21:25:26.344Z\"},\"revision\":{\"sha\":\"05e8b2655e9978d89169dc2683af7b7246b2f045\",\"message\":\"Secured heuristic orchestration\"},\"commits\":[]},\"status\":\"running\",\"stack\":{\"id\":3,\"repo_owner\":\"volkman-llc\",\"repo_name\":\"legros-biz\",\"environment\":\"production\",\"html_url\":\"http://localhost:3000/volkman-llc/legros-biz/production\",\"url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production\",\"tasks_url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks\",\"undeployed_commits_count\":49,\"is_locked\":false,\"created_at\":\"2015-08-14T21:25:26.516Z\",\"updated_at\":\"2015-08-25T21:32:16.808Z\"}}"}
493625
+ [ActiveJob] [EmitEventJob] [d732f0af-3298-4c9e-b914-ff78c7541ec4] Performing EmitEventJob from SuckerPunch(hooks) with arguments: {:event=>"deploy", :stack_id=>3, :payload=>"{\"deploy\":{\"id\":73,\"url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks/73\",\"html_url\":\"http://localhost:3000/volkman-llc/legros-biz/production/deploys/73\",\"output_url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks/73/output\",\"type\":\"deploy\",\"status\":\"running\",\"updated_at\":\"2015-08-25T21:32:16.805Z\",\"created_at\":\"2015-08-14T21:25:39.801Z\",\"additions\":0,\"deletions\":0,\"author\":{\"id\":4,\"name\":\"Janae Mosciski\",\"email\":\"luther@reinger.com\",\"login\":\"claria\",\"avatar_url\":null,\"created_at\":\"2015-08-14T21:25:26.344Z\",\"updated_at\":\"2015-08-14T21:25:26.344Z\"},\"revision\":{\"sha\":\"05e8b2655e9978d89169dc2683af7b7246b2f045\",\"message\":\"Secured heuristic orchestration\"},\"commits\":[]},\"status\":\"running\",\"stack\":{\"id\":3,\"repo_owner\":\"volkman-llc\",\"repo_name\":\"legros-biz\",\"environment\":\"production\",\"html_url\":\"http://localhost:3000/volkman-llc/legros-biz/production\",\"url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production\",\"tasks_url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks\",\"undeployed_commits_count\":49,\"is_locked\":false,\"created_at\":\"2015-08-14T21:25:26.516Z\",\"updated_at\":\"2015-08-25T21:32:16.808Z\"}}"}
493626
+ [ActiveJob] [EmitEventJob] [d732f0af-3298-4c9e-b914-ff78c7541ec4] Hook Load (0.7ms) SELECT "hooks".* FROM "hooks" WHERE ("hooks"."stack_id" = 3 OR "hooks"."stack_id" IS NULL) ORDER BY "hooks"."id" ASC
493627
+ [ActiveJob] [EmitEventJob] [d732f0af-3298-4c9e-b914-ff78c7541ec4] Performed EmitEventJob from SuckerPunch(hooks) in 3.75ms
493628
+ [Redis] command=SETNX args="stack:3:git-cache-lock" "1440538397.876163"
493629
+ [Redis] command=SELECT args=7
493630
+ [Redis] call_time=0.17 ms
493631
+ [Redis] call_time=0.67 ms
493632
+  (0.1ms) begin transaction
493633
+ SQL (1.6ms) INSERT INTO "output_chunks" ("text", "task_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["text", "$ git clone --single-branch --recursive --branch master git@github.com:volkman-llc/legros-biz.git /Users/byroot/workspace/shopify/shipit-engine/test/dummy/data/stacks/volkman-llc/legros-biz/production/git\npid: 58735\n"], ["task_id", 73], ["created_at", "2015-08-25 21:32:16.894782"], ["updated_at", "2015-08-25 21:32:16.894782"]]
493634
+  (0.7ms) commit transaction
493635
+  (0.1ms) begin transaction
493636
+ SQL (0.3ms) INSERT INTO "output_chunks" ("text", "task_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["text", "Cloning into '/Users/byroot/workspace/shopify/shipit-engine/test/dummy/data/stacks/volkman-llc/legros-biz/production/git'...\r\n"], ["task_id", 73], ["created_at", "2015-08-25 21:32:16.901000"], ["updated_at", "2015-08-25 21:32:16.901000"]]
493637
+  (0.5ms) commit transaction
493638
+  (0.1ms) begin transaction
493639
+ SQL (0.5ms) INSERT INTO "output_chunks" ("text", "task_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["text", "ERROR: Repository not found.\r\n"], ["task_id", 73], ["created_at", "2015-08-25 21:32:17.247088"], ["updated_at", "2015-08-25 21:32:17.247088"]]
493640
+  (0.9ms) commit transaction
493641
+  (0.1ms) begin transaction
493642
+ SQL (0.3ms) INSERT INTO "output_chunks" ("text", "task_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["text", "fatal: Could not read from remote repository.\r\n\r\nPlease make sure you have the correct access rights\r\nand the repository exists.\r\n"], ["task_id", 73], ["created_at", "2015-08-25 21:32:17.251331"], ["updated_at", "2015-08-25 21:32:17.251331"]]
493643
+  (0.8ms) commit transaction
493644
+  (0.1ms) begin transaction
493645
+ SQL (0.2ms) INSERT INTO "output_chunks" ("text", "task_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["text", "git clone --single-branch --recursive --branch master git@github.com:volkman-llc/legros-biz.git /Users/byroot/workspace/shopify/shipit-engine/test/dummy/data/stacks/volkman-llc/legros-biz/production/git exited with status 128\n"], ["task_id", 73], ["created_at", "2015-08-25 21:32:17.254534"], ["updated_at", "2015-08-25 21:32:17.254534"]]
493646
+  (0.8ms) commit transaction
493647
+ [Redis] command=DEL args="stack:3:git-cache-lock"
493648
+ [Redis] call_time=0.34 ms
493649
+ Deploy Load (0.3ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."type" IN ('Deploy') AND "tasks"."id" = ? LIMIT 1 [["id", 73]]
493650
+  (0.1ms) begin transaction
493651
+ SQL (0.3ms) UPDATE "tasks" SET "status" = ?, "updated_at" = ? WHERE "tasks"."id" = ? [["status", "failed"], ["updated_at", "2015-08-25 21:32:17.259885"], ["id", 73]]
493652
+ Stack Load (0.0ms) SELECT "stacks".* FROM "stacks" WHERE "stacks"."id" = ? LIMIT 1 [["id", 3]]
493653
+ SQL (0.1ms) UPDATE "stacks" SET "updated_at" = '2015-08-25 21:32:17.262355' WHERE "stacks"."id" = ? [["id", 3]]
493654
+ [ActiveJob] Enqueued FetchDeployedRevisionJob (Job ID: e9c87a75-88b9-49c9-9c56-665f0a42027f) to SuckerPunch(default) with arguments: gid://shipit/Stack/3
493655
+  (0.7ms) commit transaction
493656
+ Stack Load (0.6ms) SELECT "stacks".* FROM "stacks" WHERE "stacks"."id" = ? LIMIT 1 [["id", 3]]
493657
+ [ActiveJob] [FetchDeployedRevisionJob] [e9c87a75-88b9-49c9-9c56-665f0a42027f] Performing FetchDeployedRevisionJob from SuckerPunch(default) with arguments: gid://shipit/Stack/3
493658
+ [ActiveJob] [FetchDeployedRevisionJob] [e9c87a75-88b9-49c9-9c56-665f0a42027f] Task Load (0.6ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."stack_id" = ? AND "tasks"."type" IN ('Deploy', 'Rollback') AND "tasks"."status" IN ('pending', 'running') ORDER BY "tasks"."id" DESC LIMIT 1 [["stack_id", 3]]
493659
+ [ActiveJob] [FetchDeployedRevisionJob] [e9c87a75-88b9-49c9-9c56-665f0a42027f] [Redis] command=SETNX args="stack:3:git-cache-lock" "1440538398.273462"
493660
+ User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 4]]
493661
+ Commit Load (0.1ms) SELECT "commits".* FROM "commits" WHERE "commits"."id" = ? LIMIT 1 [["id", 145]]
493662
+ [ActiveJob] Enqueued EmitEventJob (Job ID: eb82d3f6-0b9e-410c-82f7-9ebbbf6f45b9) to SuckerPunch(hooks) with arguments: {:event=>"deploy", :stack_id=>3, :payload=>"{\"deploy\":{\"id\":73,\"url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks/73\",\"html_url\":\"http://localhost:3000/volkman-llc/legros-biz/production/deploys/73\",\"output_url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks/73/output\",\"type\":\"deploy\",\"status\":\"failed\",\"updated_at\":\"2015-08-25T21:32:17.259Z\",\"created_at\":\"2015-08-14T21:25:39.801Z\",\"additions\":0,\"deletions\":0,\"author\":{\"id\":4,\"name\":\"Janae Mosciski\",\"email\":\"luther@reinger.com\",\"login\":\"claria\",\"avatar_url\":null,\"created_at\":\"2015-08-14T21:25:26.344Z\",\"updated_at\":\"2015-08-14T21:25:26.344Z\"},\"revision\":{\"sha\":\"05e8b2655e9978d89169dc2683af7b7246b2f045\",\"message\":\"Secured heuristic orchestration\"},\"commits\":[]},\"status\":\"failed\",\"stack\":{\"id\":3,\"repo_owner\":\"volkman-llc\",\"repo_name\":\"legros-biz\",\"environment\":\"production\",\"html_url\":\"http://localhost:3000/volkman-llc/legros-biz/production\",\"url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production\",\"tasks_url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks\",\"undeployed_commits_count\":49,\"is_locked\":false,\"created_at\":\"2015-08-14T21:25:26.516Z\",\"updated_at\":\"2015-08-25T21:32:17.262Z\"}}"}
493663
+ [ActiveJob] [FetchDeployedRevisionJob] [e9c87a75-88b9-49c9-9c56-665f0a42027f] [Redis] call_time=4.62 ms
493664
+ [ActiveJob] [EmitEventJob] [eb82d3f6-0b9e-410c-82f7-9ebbbf6f45b9] Performing EmitEventJob from SuckerPunch(hooks) with arguments: {:event=>"deploy", :stack_id=>3, :payload=>"{\"deploy\":{\"id\":73,\"url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks/73\",\"html_url\":\"http://localhost:3000/volkman-llc/legros-biz/production/deploys/73\",\"output_url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks/73/output\",\"type\":\"deploy\",\"status\":\"failed\",\"updated_at\":\"2015-08-25T21:32:17.259Z\",\"created_at\":\"2015-08-14T21:25:39.801Z\",\"additions\":0,\"deletions\":0,\"author\":{\"id\":4,\"name\":\"Janae Mosciski\",\"email\":\"luther@reinger.com\",\"login\":\"claria\",\"avatar_url\":null,\"created_at\":\"2015-08-14T21:25:26.344Z\",\"updated_at\":\"2015-08-14T21:25:26.344Z\"},\"revision\":{\"sha\":\"05e8b2655e9978d89169dc2683af7b7246b2f045\",\"message\":\"Secured heuristic orchestration\"},\"commits\":[]},\"status\":\"failed\",\"stack\":{\"id\":3,\"repo_owner\":\"volkman-llc\",\"repo_name\":\"legros-biz\",\"environment\":\"production\",\"html_url\":\"http://localhost:3000/volkman-llc/legros-biz/production\",\"url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production\",\"tasks_url\":\"http://localhost:3000/api/stacks/volkman-llc/legros-biz/production/tasks\",\"undeployed_commits_count\":49,\"is_locked\":false,\"created_at\":\"2015-08-14T21:25:26.516Z\",\"updated_at\":\"2015-08-25T21:32:17.262Z\"}}"}
493665
+ [ActiveJob] [EmitEventJob] [eb82d3f6-0b9e-410c-82f7-9ebbbf6f45b9] Hook Load (0.4ms) SELECT "hooks".* FROM "hooks" WHERE ("hooks"."stack_id" = 3 OR "hooks"."stack_id" IS NULL) ORDER BY "hooks"."id" ASC
493666
+ [ActiveJob] [EmitEventJob] [eb82d3f6-0b9e-410c-82f7-9ebbbf6f45b9] Performed EmitEventJob from SuckerPunch(hooks) in 2.22ms
493667
+ [ActiveJob] [FetchDeployedRevisionJob] [e9c87a75-88b9-49c9-9c56-665f0a42027f] [Redis] command=DEL args="stack:3:git-cache-lock"
493668
+ [ActiveJob] [FetchDeployedRevisionJob] [e9c87a75-88b9-49c9-9c56-665f0a42027f] [Redis] call_time=0.23 ms
493669
+ [ActiveJob] [FetchDeployedRevisionJob] [e9c87a75-88b9-49c9-9c56-665f0a42027f] Performed FetchDeployedRevisionJob from SuckerPunch(default) in 348.53ms
493670
+ Actor crashed!
493671
+ Command::Error: git clone --single-branch --recursive --branch master git@github.com:volkman-llc/legros-biz.git /Users/byroot/workspace/shopify/shipit-engine/test/dummy/data/stacks/volkman-llc/legros-biz/production/git exited with status 128
493672
+ /Users/byroot/workspace/shopify/shipit-engine/lib/command.rb:109:in `stream!'
493673
+ /Users/byroot/workspace/shopify/shipit-engine/lib/command.rb:51:in `run!'
493674
+ /Users/byroot/workspace/shopify/shipit-engine/lib/stack_commands.rb:36:in `block in with_temporary_working_directory'
493675
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/redis-objects-1.2.0/lib/redis/lock.rb:58:in `lock'
493676
+ /Users/byroot/workspace/shopify/shipit-engine/app/models/stack.rb:150:in `acquire_git_cache_lock'
493677
+ /Users/byroot/workspace/shopify/shipit-engine/lib/stack_commands.rb:35:in `with_temporary_working_directory'
493678
+ /Users/byroot/workspace/shopify/shipit-engine/lib/stack_commands.rb:19:in `fetch_deployed_revision'
493679
+ /Users/byroot/workspace/shopify/shipit-engine/app/jobs/fetch_deployed_revision_job.rb:10:in `perform'
493680
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/execution.rb:32:in `block in perform_now'
493681
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:117:in `call'
493682
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:117:in `call'
493683
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
493684
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:505:in `call'
493685
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:505:in `call'
493686
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:498:in `block (2 levels) in around'
493687
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:343:in `call'
493688
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:343:in `block (2 levels) in simple'
493689
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:23:in `call'
493690
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:23:in `block (4 levels) in <module:Logging>'
493691
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/notifications.rb:164:in `block in instrument'
493692
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
493693
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/notifications.rb:164:in `instrument'
493694
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:22:in `block (3 levels) in <module:Logging>'
493695
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:43:in `block in tag_logger'
493696
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/tagged_logging.rb:68:in `block in tagged'
493697
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/tagged_logging.rb:26:in `tagged'
493698
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/tagged_logging.rb:68:in `tagged'
493699
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:43:in `tag_logger'
493700
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:19:in `block (2 levels) in <module:Logging>'
493701
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:441:in `instance_exec'
493702
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:441:in `block in make_lambda'
493703
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:342:in `call'
493704
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:342:in `block in simple'
493705
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:497:in `call'
493706
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:497:in `block in around'
493707
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:505:in `call'
493708
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:505:in `call'
493709
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:92:in `_run_callbacks'
493710
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:776:in `_run_perform_callbacks'
493711
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:81:in `run_callbacks'
493712
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/execution.rb:31:in `perform_now'
493713
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/execution.rb:21:in `execute'
493714
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/queue_adapters/sucker_punch_adapter.rb:35:in `perform'
493715
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `public_send'
493716
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `dispatch'
493717
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/calls.rb:63:in `dispatch'
493718
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/cell.rb:60:in `block in invoke'
493719
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/cell.rb:71:in `block in task'
493720
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/actor.rb:357:in `block in task'
493721
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/tasks.rb:57:in `block in initialize'
493722
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/tasks/task_fiber.rb:15:in `block in create'
493723
+ Celluloid::PoolManager: async call `perform` aborted!
493724
+ Command::Error: git clone --single-branch --recursive --branch master git@github.com:volkman-llc/legros-biz.git /Users/byroot/workspace/shopify/shipit-engine/test/dummy/data/stacks/volkman-llc/legros-biz/production/git exited with status 128
493725
+ /Users/byroot/workspace/shopify/shipit-engine/lib/command.rb:109:in `stream!'
493726
+ /Users/byroot/workspace/shopify/shipit-engine/lib/command.rb:51:in `run!'
493727
+ /Users/byroot/workspace/shopify/shipit-engine/lib/stack_commands.rb:36:in `block in with_temporary_working_directory'
493728
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/redis-objects-1.2.0/lib/redis/lock.rb:58:in `lock'
493729
+ /Users/byroot/workspace/shopify/shipit-engine/app/models/stack.rb:150:in `acquire_git_cache_lock'
493730
+ /Users/byroot/workspace/shopify/shipit-engine/lib/stack_commands.rb:35:in `with_temporary_working_directory'
493731
+ /Users/byroot/workspace/shopify/shipit-engine/lib/stack_commands.rb:19:in `fetch_deployed_revision'
493732
+ /Users/byroot/workspace/shopify/shipit-engine/app/jobs/fetch_deployed_revision_job.rb:10:in `perform'
493733
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/execution.rb:32:in `block in perform_now'
493734
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:117:in `call'
493735
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:117:in `call'
493736
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
493737
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:505:in `call'
493738
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:505:in `call'
493739
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:498:in `block (2 levels) in around'
493740
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:343:in `call'
493741
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:343:in `block (2 levels) in simple'
493742
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:23:in `call'
493743
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:23:in `block (4 levels) in <module:Logging>'
493744
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/notifications.rb:164:in `block in instrument'
493745
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
493746
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/notifications.rb:164:in `instrument'
493747
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:22:in `block (3 levels) in <module:Logging>'
493748
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:43:in `block in tag_logger'
493749
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/tagged_logging.rb:68:in `block in tagged'
493750
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/tagged_logging.rb:26:in `tagged'
493751
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/tagged_logging.rb:68:in `tagged'
493752
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:43:in `tag_logger'
493753
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/logging.rb:19:in `block (2 levels) in <module:Logging>'
493754
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:441:in `instance_exec'
493755
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:441:in `block in make_lambda'
493756
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:342:in `call'
493757
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:342:in `block in simple'
493758
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:497:in `call'
493759
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:497:in `block in around'
493760
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:505:in `call'
493761
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:505:in `call'
493762
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:92:in `_run_callbacks'
493763
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:776:in `_run_perform_callbacks'
493764
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activesupport-4.2.2/lib/active_support/callbacks.rb:81:in `run_callbacks'
493765
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/execution.rb:31:in `perform_now'
493766
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/execution.rb:21:in `execute'
493767
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/activejob-4.2.2/lib/active_job/queue_adapters/sucker_punch_adapter.rb:35:in `perform'
493768
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `public_send'
493769
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `dispatch'
493770
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/calls.rb:63:in `dispatch'
493771
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/cell.rb:60:in `block in invoke'
493772
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/cell.rb:71:in `block in task'
493773
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/actor.rb:357:in `block in task'
493774
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/tasks.rb:57:in `block in initialize'
493775
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/tasks/task_fiber.rb:15:in `block in create'
493776
+ (celluloid):0:in `remote procedure call'
493777
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/calls.rb:92:in `value'
493778
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/proxies/sync_proxy.rb:33:in `method_missing'
493779
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/proxies/cell_proxy.rb:17:in `_send_'
493780
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/pool_manager.rb:41:in `_send_'
493781
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/pool_manager.rb:140:in `method_missing'
493782
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `public_send'
493783
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `dispatch'
493784
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/calls.rb:122:in `dispatch'
493785
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/cell.rb:60:in `block in invoke'
493786
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/cell.rb:71:in `block in task'
493787
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/actor.rb:357:in `block in task'
493788
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/tasks.rb:57:in `block in initialize'
493789
+ /Users/byroot/.rvm/gems/ruby-2.1.5/gems/celluloid-0.16.0/lib/celluloid/tasks/task_fiber.rb:15:in `block in create'
493790
+ Terminating 3 actors...