shipit-engine 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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...