shipit-engine 0.20.0 → 0.21.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 (110) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +43 -6
  3. data/app/assets/stylesheets/_base/_base.scss +4 -0
  4. data/app/assets/stylesheets/_pages/_commits.scss +3 -1
  5. data/app/assets/stylesheets/_pages/_deploy.scss +4 -2
  6. data/app/controllers/concerns/shipit/authentication.rb +1 -1
  7. data/app/controllers/shipit/api/base_controller.rb +6 -1
  8. data/app/controllers/shipit/api/pull_requests_controller.rb +1 -1
  9. data/app/controllers/shipit/commit_checks_controller.rb +1 -1
  10. data/app/controllers/shipit/shipit_controller.rb +1 -5
  11. data/app/controllers/shipit/stacks_controller.rb +2 -0
  12. data/app/controllers/shipit/tasks_controller.rb +1 -1
  13. data/app/controllers/shipit/webhooks_controller.rb +2 -2
  14. data/app/helpers/shipit/deploys_helper.rb +9 -0
  15. data/app/helpers/shipit/shipit_helper.rb +17 -15
  16. data/app/helpers/shipit/stacks_helper.rb +6 -1
  17. data/app/jobs/shipit/destroy_stack_job.rb +4 -2
  18. data/app/jobs/shipit/fetch_deployed_revision_job.rb +1 -1
  19. data/app/jobs/shipit/github_sync_job.rb +1 -1
  20. data/app/jobs/shipit/merge_pull_requests_job.rb +3 -3
  21. data/app/jobs/shipit/perform_task_job.rb +3 -0
  22. data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
  23. data/app/models/shipit/api_client.rb +1 -1
  24. data/app/models/shipit/commit.rb +29 -6
  25. data/app/models/shipit/commit_deployment.rb +1 -1
  26. data/app/models/shipit/commit_deployment_status.rb +1 -1
  27. data/app/models/shipit/deploy_spec/bundler_discovery.rb +1 -10
  28. data/app/models/shipit/deploy_spec/file_system.rb +6 -0
  29. data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -1
  30. data/app/models/shipit/deploy_spec/lerna_discovery.rb +85 -0
  31. data/app/models/shipit/deploy_spec/npm_discovery.rb +103 -5
  32. data/app/models/shipit/deploy_spec/pypi_discovery.rb +4 -2
  33. data/app/models/shipit/deploy_spec/rubygems_discovery.rb +4 -2
  34. data/app/models/shipit/deploy_spec.rb +19 -2
  35. data/app/models/shipit/duration.rb +1 -1
  36. data/app/models/shipit/github_status.rb +1 -1
  37. data/app/models/shipit/hook.rb +4 -5
  38. data/app/models/shipit/output_chunk.rb +1 -1
  39. data/app/models/shipit/pull_request.rb +37 -16
  40. data/app/models/shipit/stack.rb +17 -11
  41. data/app/models/shipit/status/common.rb +4 -0
  42. data/app/models/shipit/status/group.rb +4 -0
  43. data/app/models/shipit/task.rb +20 -8
  44. data/app/models/shipit/task_definition.rb +2 -2
  45. data/app/models/shipit/undeployed_commit.rb +13 -2
  46. data/app/models/shipit/user.rb +1 -1
  47. data/app/serializers/shipit/pull_request_serializer.rb +1 -1
  48. data/app/serializers/shipit/tail_task_serializer.rb +1 -1
  49. data/app/views/shipit/ccmenu/project.xml.builder +9 -8
  50. data/app/views/shipit/deploys/_deploy.html.erb +3 -2
  51. data/app/views/shipit/stacks/_banners.html.erb +4 -1
  52. data/app/views/shipit/stacks/settings.html.erb +4 -0
  53. data/app/views/shipit/statuses/_group.html.erb +1 -1
  54. data/app/views/shipit/statuses/_status.html.erb +1 -1
  55. data/app/views/shipit/tasks/_task.html.erb +1 -2
  56. data/config/locales/en.yml +2 -0
  57. data/config/secrets.development.example.yml +0 -4
  58. data/config/secrets.development.shopify.yml +1 -5
  59. data/db/migrate/20170904103242_reindex_deliveries.rb +7 -0
  60. data/db/migrate/20171120161420_add_base_info_to_pull_request.rb +7 -0
  61. data/db/migrate/20180202220850_add_aborted_by_to_tasks.rb +5 -0
  62. data/lib/shipit/command.rb +11 -3
  63. data/lib/shipit/engine.rb +0 -4
  64. data/lib/shipit/stack_commands.rb +3 -1
  65. data/lib/shipit/version.rb +1 -1
  66. data/lib/shipit.rb +15 -23
  67. data/lib/snippets/assert-lerna-fixed-version-tag +21 -0
  68. data/lib/snippets/assert-lerna-independent-version-tags +28 -0
  69. data/lib/snippets/generate-local-npmrc +19 -0
  70. data/lib/snippets/misconfigured-npm-publish-config +8 -0
  71. data/lib/snippets/publish-lerna-independent-packages +39 -0
  72. data/lib/snippets/push-to-heroku +5 -5
  73. data/lib/tasks/cron.rake +1 -1
  74. data/lib/tasks/dev.rake +1 -1
  75. data/test/controllers/api/deploys_controller_test.rb +19 -0
  76. data/test/controllers/api/stacks_controller_test.rb +1 -1
  77. data/test/controllers/github_authentication_controller_test.rb +1 -1
  78. data/test/controllers/stacks_controller_test.rb +10 -0
  79. data/test/controllers/tasks_controller_test.rb +2 -0
  80. data/test/controllers/webhooks_controller_test.rb +0 -7
  81. data/test/dummy/config/secrets.yml +0 -2
  82. data/test/dummy/db/development.sqlite3 +0 -0
  83. data/test/dummy/db/schema.rb +5 -3
  84. data/test/dummy/db/test.sqlite3 +0 -0
  85. data/test/fixtures/shipit/commits.yml +53 -0
  86. data/test/fixtures/shipit/pull_requests.yml +52 -0
  87. data/test/fixtures/shipit/stacks.yml +35 -0
  88. data/test/fixtures/shipit/statuses.yml +27 -0
  89. data/test/fixtures/shipit/tasks.yml +14 -0
  90. data/test/helpers/queries_helper.rb +1 -1
  91. data/test/jobs/merge_pull_requests_job_test.rb +19 -2
  92. data/test/jobs/perform_task_job_test.rb +26 -2
  93. data/test/models/commits_test.rb +55 -6
  94. data/test/models/deploy_spec_test.rb +288 -52
  95. data/test/models/deploys_test.rb +7 -7
  96. data/test/models/hook_test.rb +7 -1
  97. data/test/models/pull_request_test.rb +78 -24
  98. data/test/models/stacks_test.rb +23 -19
  99. data/test/models/status/group_test.rb +6 -0
  100. data/test/models/undeployed_commits_test.rb +9 -0
  101. data/test/models/users_test.rb +2 -2
  102. data/test/test_helper.rb +1 -1
  103. metadata +211 -224
  104. data/app/assets/javascripts/shipit_bs.js.coffee +0 -2
  105. data/app/assets/stylesheets/shipit_bs.scss +0 -22
  106. data/app/views/bootstrap/shipit/missing_settings.html.erb +0 -97
  107. data/app/views/bootstrap/shipit/stacks/new.html.erb +0 -44
  108. data/app/views/layouts/shipit_bootstrap.html.erb +0 -44
  109. data/lib/shipit/template_renderer_extension.rb +0 -16
  110. data/test/dummy/db/test.sqlite3-journal +0 -0
@@ -4,7 +4,7 @@ module Shipit
4
4
  class StacksTest < ActiveSupport::TestCase
5
5
  def setup
6
6
  @stack = shipit_stacks(:shipit)
7
- @expected_base_path = Rails.root.join('data/stacks', @stack.to_param).to_s
7
+ @expected_base_path = Rails.root.join('data', 'stacks', @stack.to_param).to_s
8
8
  GithubHook.any_instance.stubs(:teardown!)
9
9
  end
10
10
 
@@ -441,14 +441,14 @@ module Shipit
441
441
  @stack.deploys_and_rollbacks.destroy_all
442
442
  @stack.update_undeployed_commits_count
443
443
  @stack.reload
444
- assert_equal 'backlogged', @stack.merge_status
444
+ assert_equal 'backlogged', @stack.merge_status(backlog_leniency_factor: 1.5)
445
445
  end
446
446
 
447
447
  test "#merge_status returns success with a higher leniency factor" do
448
448
  @stack.deploys_and_rollbacks.destroy_all
449
449
  @stack.update_undeployed_commits_count
450
450
  @stack.reload
451
- assert_equal 'success', @stack.merge_status(backlog_leniency_factor: 2.0)
451
+ assert_equal 'success', @stack.merge_status(backlog_leniency_factor: 3.0)
452
452
  end
453
453
 
454
454
  test "#handle_github_redirections update the stack if the repository was renamed" do
@@ -573,38 +573,42 @@ module Shipit
573
573
  assert_equal shipit_commits(:third), @stack.next_commit_to_deploy
574
574
  end
575
575
 
576
- test "#lock sets reason, user and locked_since" do
576
+ test "setting #lock_reason also sets #locked_since" do
577
+ assert_predicate @stack.locked_since, :nil?
578
+
579
+ @stack.update!(lock_reason: "Here comes the walrus")
580
+ refute_predicate @stack.locked_since, :nil?
581
+
582
+ @stack.update!(lock_reason: nil)
583
+ assert_predicate @stack.locked_since, :nil?
584
+ end
585
+
586
+ test "updating #lock_reason preserves #locked_since" do
587
+ @stack.update!(lock_reason: "Here comes the walrus")
588
+ expected = @stack.locked_since
589
+
590
+ @stack.update!(lock_reason: "The walrus strikes back")
591
+ assert_equal expected, @stack.locked_since
592
+ end
593
+
594
+ test "#lock sets reason and user" do
577
595
  reason = "Here comes the walrus"
578
596
  user = shipit_users(:walrus)
579
597
  @stack.lock(reason, user)
580
598
  assert @stack.locked?
581
599
  assert_equal reason, @stack.lock_reason
582
600
  assert_equal user, @stack.lock_author
583
- assert_not_nil user, @stack.locked_since
584
601
  end
585
602
 
586
- test "#unlock deletes reason, user and locked_since" do
603
+ test "#unlock deletes reason and user" do
587
604
  user = shipit_users(:walrus)
588
605
  @stack.lock("Here comes the walrus", user)
589
606
  @stack.unlock
590
607
  refute @stack.locked?
591
608
  assert_nil @stack.lock_reason
592
- assert_nil @stack.locked_since
593
609
  assert_not_equal user, @stack.lock_author
594
610
  end
595
611
 
596
- test "#lock does not overwrite locked_since if already locked" do
597
- @stack.lock("Here comes the walrus", shipit_users(:walrus))
598
- old_time = @stack.locked_since
599
-
600
- new_reason = "Its still coming!"
601
- @stack.lock(new_reason, shipit_users(:walrus))
602
-
603
- assert @stack.locked?
604
- assert_equal new_reason, @stack.lock_reason
605
- assert_equal old_time, @stack.locked_since
606
- end
607
-
608
612
  test "stack contains valid deploy_url" do
609
613
  @stack.deploy_url = "Javascript:alert(0);//"
610
614
  assert_not_predicate @stack, :valid?
@@ -24,6 +24,12 @@ module Shipit
24
24
  assert_equal 'failure', @group.state
25
25
  end
26
26
 
27
+ test "#blocking? returns true if any of the status is blocking" do
28
+ blocking_status = shipit_statuses(:soc_first)
29
+ assert_predicate blocking_status, :blocking?
30
+ Status::Group.new(blocking_status.commit, [blocking_status])
31
+ end
32
+
27
33
  test ".compact returns a regular status if there is only one visible status" do
28
34
  status = Status::Group.compact(@commit, @commit.statuses.where(context: 'ci/travis'))
29
35
  assert_instance_of Status, status
@@ -68,6 +68,15 @@ module Shipit
68
68
  assert_equal 'failure', @commit.deploy_state(true)
69
69
  end
70
70
 
71
+ test "#deploy_state returns `blocked` if a previous commit is blocking" do
72
+ blocking_commit = shipit_commits(:soc_second)
73
+ blocking_commit.statuses.delete_all
74
+ assert_predicate blocking_commit, :blocking?
75
+
76
+ commit = UndeployedCommit.new(shipit_commits(:soc_third), 0)
77
+ assert_equal 'blocked', commit.deploy_state
78
+ end
79
+
71
80
  test "#redeploy_state returns `allowed` by default" do
72
81
  assert_equal 'allowed', @commit.redeploy_state
73
82
  end
@@ -69,7 +69,7 @@ module Shipit
69
69
  end
70
70
 
71
71
  test "#refresh_from_github! update the user with the latest data from GitHub's API" do
72
- Shipit.github_api.expects(:user).with('walrus').returns(@github_user)
72
+ Shipit.github_api.expects(:user).with(@user.github_id).returns(@github_user)
73
73
  @user.refresh_from_github!
74
74
  @user.reload
75
75
 
@@ -82,7 +82,7 @@ module Shipit
82
82
  user.update!(github_id: @github_user.id)
83
83
  commit = user.authored_commits.last
84
84
 
85
- Shipit.github_api.expects(:user).with(user.login).raises(Octokit::NotFound)
85
+ Shipit.github_api.expects(:user).with(user.github_id).raises(Octokit::NotFound)
86
86
  Shipit.github_api.expects(:commit).with(commit.github_repo_name, commit.sha).returns(mock(author: @github_user))
87
87
 
88
88
  assert_equal 'bob', user.login
data/test/test_helper.rb CHANGED
@@ -49,7 +49,7 @@ class ActiveSupport::TestCase
49
49
  teardown do
50
50
  Shipit.redis.flushdb
51
51
  Shipit.instance_variable_names.each do |name|
52
- next if name == "@mocha" || name == "@redis"
52
+ next if %w(@mocha @redis).include?(name)
53
53
  Shipit.remove_instance_variable(name)
54
54
  end
55
55
  end