shipit-engine 0.31.0 → 0.32.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.
- checksums.yaml +4 -4
- data/README.md +4 -2
- data/Rakefile +4 -2
- data/app/assets/stylesheets/_pages/_stacks.scss +0 -3
- data/app/assets/stylesheets/merge_status.scss +0 -3
- data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +1 -0
- data/app/controllers/concerns/shipit/api/cacheable.rb +1 -0
- data/app/controllers/concerns/shipit/api/paginable.rb +3 -2
- data/app/controllers/concerns/shipit/api/rendering.rb +5 -4
- data/app/controllers/concerns/shipit/authentication.rb +3 -2
- data/app/controllers/concerns/shipit/pagination.rb +2 -1
- data/app/controllers/shipit/api/base_controller.rb +11 -6
- data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
- data/app/controllers/shipit/api/commits_controller.rb +2 -1
- data/app/controllers/shipit/api/deploys_controller.rb +4 -3
- data/app/controllers/shipit/api/hooks_controller.rb +6 -5
- data/app/controllers/shipit/api/locks_controller.rb +5 -4
- data/app/controllers/shipit/api/outputs_controller.rb +2 -1
- data/app/controllers/shipit/api/pull_requests_controller.rb +7 -6
- data/app/controllers/shipit/api/release_statuses_controller.rb +3 -2
- data/app/controllers/shipit/api/rollbacks_controller.rb +33 -0
- data/app/controllers/shipit/api/stacks_controller.rb +18 -5
- data/app/controllers/shipit/api/tasks_controller.rb +6 -5
- data/app/controllers/shipit/api_clients_controller.rb +4 -3
- data/app/controllers/shipit/ccmenu_url_controller.rb +4 -3
- data/app/controllers/shipit/commit_checks_controller.rb +2 -1
- data/app/controllers/shipit/commits_controller.rb +2 -1
- data/app/controllers/shipit/deploys_controller.rb +3 -2
- data/app/controllers/shipit/github_authentication_controller.rb +4 -3
- data/app/controllers/shipit/merge_status_controller.rb +17 -16
- data/app/controllers/shipit/pull_requests_controller.rb +3 -2
- data/app/controllers/shipit/release_statuses_controller.rb +3 -2
- data/app/controllers/shipit/rollbacks_controller.rb +3 -2
- data/app/controllers/shipit/shipit_controller.rb +2 -1
- data/app/controllers/shipit/stacks_controller.rb +22 -7
- data/app/controllers/shipit/status_controller.rb +2 -1
- data/app/controllers/shipit/tasks_controller.rb +6 -5
- data/app/controllers/shipit/webhooks_controller.rb +3 -2
- data/app/helpers/shipit/chunks_helper.rb +1 -0
- data/app/helpers/shipit/deploys_helper.rb +4 -3
- data/app/helpers/shipit/github_url_helper.rb +1 -0
- data/app/helpers/shipit/merge_status_helper.rb +1 -0
- data/app/helpers/shipit/shipit_helper.rb +1 -0
- data/app/helpers/shipit/stacks_helper.rb +1 -0
- data/app/helpers/shipit/tasks_helper.rb +1 -0
- data/app/jobs/shipit/background_job.rb +4 -0
- data/app/jobs/shipit/background_job/unique.rb +1 -0
- data/app/jobs/shipit/cache_deploy_spec_job.rb +1 -0
- data/app/jobs/shipit/chunk_rollup_job.rb +4 -0
- data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
- data/app/jobs/shipit/continuous_delivery_job.rb +2 -1
- data/app/jobs/shipit/create_on_github_job.rb +6 -1
- data/app/jobs/shipit/create_release_statuses_job.rb +1 -0
- data/app/jobs/shipit/deferred_touch_job.rb +4 -0
- data/app/jobs/shipit/deliver_hook_job.rb +1 -0
- data/app/jobs/shipit/destroy_job.rb +1 -0
- data/app/jobs/shipit/destroy_stack_job.rb +1 -0
- data/app/jobs/shipit/emit_event_job.rb +2 -1
- data/app/jobs/shipit/fetch_commit_stats_job.rb +1 -0
- data/app/jobs/shipit/fetch_deployed_revision_job.rb +1 -0
- data/app/jobs/shipit/github_sync_job.rb +2 -1
- data/app/jobs/shipit/mark_deploy_healthy_job.rb +1 -0
- data/app/jobs/shipit/merge_pull_requests_job.rb +1 -0
- data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
- data/app/jobs/shipit/perform_task_job.rb +12 -5
- data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
- data/app/jobs/shipit/reap_dead_tasks_job.rb +21 -0
- data/app/jobs/shipit/refresh_check_runs_job.rb +1 -0
- data/app/jobs/shipit/refresh_github_user_job.rb +1 -0
- data/app/jobs/shipit/refresh_pull_request_job.rb +1 -0
- data/app/jobs/shipit/refresh_statuses_job.rb +1 -0
- data/app/jobs/shipit/setup_github_hook_job.rb +1 -0
- data/app/jobs/shipit/update_estimated_deploy_duration_job.rb +1 -0
- data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +4 -3
- data/app/models/concerns/shipit/deferred_touch.rb +4 -3
- data/app/models/shipit/anonymous_user.rb +5 -0
- data/app/models/shipit/api_client.rb +3 -2
- data/app/models/shipit/application_record.rb +2 -1
- data/app/models/shipit/check_run.rb +4 -3
- data/app/models/shipit/command_line_user.rb +1 -0
- data/app/models/shipit/commit.rb +11 -4
- data/app/models/shipit/commit_checks.rb +1 -0
- data/app/models/shipit/commit_deployment.rb +3 -2
- data/app/models/shipit/commit_deployment_status.rb +2 -1
- data/app/models/shipit/commit_message.rb +1 -0
- data/app/models/shipit/delivery.rb +4 -3
- data/app/models/shipit/deploy.rb +6 -17
- data/app/models/shipit/deploy_spec.rb +22 -3
- data/app/models/shipit/deploy_spec/bundler_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/file_system.rb +10 -3
- data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/lerna_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/npm_discovery.rb +5 -4
- data/app/models/shipit/deploy_spec/pypi_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
- data/app/models/shipit/deploy_stats.rb +2 -1
- data/app/models/shipit/duration.rb +3 -2
- data/app/models/shipit/ephemeral_commit_checks.rb +1 -0
- data/app/models/shipit/github_hook.rb +2 -1
- data/app/models/shipit/github_status.rb +2 -1
- data/app/models/shipit/hook.rb +6 -5
- data/app/models/shipit/membership.rb +3 -2
- data/app/models/shipit/output_chunk.rb +7 -2
- data/app/models/shipit/pull_request.rb +6 -5
- data/app/models/shipit/record.rb +18 -0
- data/app/models/shipit/release_status.rb +3 -2
- data/app/models/shipit/repository.rb +10 -5
- data/app/models/shipit/rollback.rb +1 -0
- data/app/models/shipit/stack.rb +50 -16
- data/app/models/shipit/status.rb +3 -2
- data/app/models/shipit/status/common.rb +7 -6
- data/app/models/shipit/status/group.rb +1 -0
- data/app/models/shipit/status/missing.rb +2 -1
- data/app/models/shipit/status/unknown.rb +2 -1
- data/app/models/shipit/task.rb +38 -5
- data/app/models/shipit/task_definition.rb +1 -0
- data/app/models/shipit/team.rb +2 -1
- data/app/models/shipit/undeployed_commit.rb +1 -0
- data/app/models/shipit/unlimited_api_client.rb +1 -0
- data/app/models/shipit/user.rb +10 -8
- data/app/models/shipit/variable_definition.rb +1 -0
- data/app/models/shipit/webhooks.rb +1 -0
- data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +1 -0
- data/app/models/shipit/webhooks/handlers/handler.rb +1 -0
- data/app/models/shipit/webhooks/handlers/membership_handler.rb +1 -0
- data/app/models/shipit/webhooks/handlers/push_handler.rb +1 -0
- data/app/models/shipit/webhooks/handlers/status_handler.rb +1 -0
- data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
- data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
- data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
- data/app/serializers/shipit/commit_serializer.rb +1 -0
- data/app/serializers/shipit/deploy_serializer.rb +2 -1
- data/app/serializers/shipit/hook_serializer.rb +1 -0
- data/app/serializers/shipit/pull_request_serializer.rb +1 -0
- data/app/serializers/shipit/rollback_serializer.rb +1 -0
- data/app/serializers/shipit/short_commit_serializer.rb +1 -0
- data/app/serializers/shipit/stack_serializer.rb +1 -0
- data/app/serializers/shipit/tail_task_serializer.rb +1 -0
- data/app/serializers/shipit/task_serializer.rb +2 -17
- data/app/serializers/shipit/user_serializer.rb +6 -1
- data/app/validators/ascii_only_validator.rb +1 -0
- data/app/validators/subset_validator.rb +1 -0
- data/app/views/layouts/shipit.html.erb +1 -1
- data/app/views/shipit/_variables.html.erb +1 -1
- data/app/views/shipit/ccmenu/project.xml.builder +2 -1
- data/app/views/shipit/deploys/show.html.erb +2 -2
- data/app/views/shipit/stacks/_header.html.erb +3 -0
- data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
- data/app/views/shipit/stacks/index.html.erb +1 -1
- data/app/views/shipit/tasks/show.html.erb +1 -1
- data/config/initializers/inflections.rb +2 -1
- data/config/locales/en.yml +3 -3
- data/config/routes.rb +10 -2
- data/db/migrate/20200226211925_add_index_to_tasks_status.rb +5 -0
- data/db/migrate/20200427135152_add_pull_request_head_sha_to_commit.rb +5 -0
- data/db/migrate/20200615181558_add_rollback_once_aborted_to.rb +5 -0
- data/lib/shipit.rb +12 -2
- data/lib/shipit/cast_value.rb +1 -0
- data/lib/shipit/command.rb +13 -12
- data/lib/shipit/commands.rb +5 -4
- data/lib/shipit/csv_serializer.rb +1 -0
- data/lib/shipit/deploy_commands.rb +1 -0
- data/lib/shipit/engine.rb +7 -2
- data/lib/shipit/environment_variables.rb +2 -1
- data/lib/shipit/first_parent_commits_iterator.rb +1 -0
- data/lib/shipit/flock.rb +1 -0
- data/lib/shipit/github_app.rb +7 -6
- data/lib/shipit/github_http_cache_middleware.rb +1 -0
- data/lib/shipit/null_serializer.rb +1 -0
- data/lib/shipit/octokit_check_runs.rb +3 -2
- data/lib/shipit/octokit_iterator.rb +3 -2
- data/lib/shipit/paginator.rb +3 -2
- data/lib/shipit/rollback_commands.rb +1 -0
- data/lib/shipit/same_site_cookie_middleware.rb +29 -0
- data/lib/shipit/simple_message_verifier.rb +1 -0
- data/lib/shipit/stack_commands.rb +3 -2
- data/lib/shipit/stat.rb +1 -0
- data/lib/shipit/task_commands.rb +2 -0
- data/lib/shipit/version.rb +2 -1
- data/lib/snippets/release-gem +5 -1
- data/lib/tasks/cron.rake +2 -0
- data/lib/tasks/dev.rake +3 -2
- data/lib/tasks/shipit.rake +15 -14
- data/lib/tasks/teams.rake +1 -0
- data/test/controllers/api/base_controller_test.rb +3 -2
- data/test/controllers/api/ccmenu_controller_test.rb +8 -7
- data/test/controllers/api/commits_controller_test.rb +3 -2
- data/test/controllers/api/deploys_controller_test.rb +15 -14
- data/test/controllers/api/hooks_controller_test.rb +8 -7
- data/test/controllers/api/locks_controller_test.rb +7 -6
- data/test/controllers/api/outputs_controller_test.rb +2 -1
- data/test/controllers/api/pull_requests_controller_test.rb +8 -7
- data/test/controllers/api/release_statuses_controller_test.rb +2 -1
- data/test/controllers/api/rollback_controller_test.rb +113 -0
- data/test/controllers/api/stacks_controller_test.rb +30 -9
- data/test/controllers/api/tasks_controller_test.rb +13 -12
- data/test/controllers/api_clients_controller_test.rb +5 -4
- data/test/controllers/ccmenu_controller_test.rb +4 -3
- data/test/controllers/commit_checks_controller_test.rb +4 -3
- data/test/controllers/commits_controller_test.rb +3 -2
- data/test/controllers/deploys_controller_test.rb +32 -21
- data/test/controllers/github_authentication_controller_test.rb +1 -0
- data/test/controllers/merge_status_controller_test.rb +7 -6
- data/test/controllers/pull_requests_controller_test.rb +4 -3
- data/test/controllers/release_statuses_controller_test.rb +3 -2
- data/test/controllers/rollbacks_controller_test.rb +9 -8
- data/test/controllers/stacks_controller_test.rb +33 -19
- data/test/controllers/status_controller_test.rb +1 -0
- data/test/controllers/tasks_controller_test.rb +19 -18
- data/test/controllers/webhooks_controller_test.rb +11 -10
- data/test/dummy/config/environments/development.rb +2 -0
- data/test/dummy/config/environments/test.rb +2 -0
- data/test/dummy/db/schema.rb +4 -1
- data/test/fixtures/shipit/commits.yml +15 -0
- data/test/fixtures/shipit/repositories.yml +4 -0
- data/test/fixtures/shipit/stacks.yml +90 -14
- data/test/fixtures/timeout +2 -1
- data/test/helpers/api_helper.rb +1 -0
- data/test/helpers/fixture_aliases_helper.rb +1 -0
- data/test/helpers/hooks_helper.rb +2 -1
- data/test/helpers/json_helper.rb +15 -11
- data/test/helpers/links_helper.rb +4 -3
- data/test/helpers/payloads_helper.rb +1 -0
- data/test/helpers/queries_helper.rb +3 -2
- data/test/jobs/cache_deploy_spec_job_test.rb +2 -1
- data/test/jobs/chunk_rollup_job_test.rb +1 -0
- data/test/jobs/deliver_hook_job_test.rb +1 -0
- data/test/jobs/destroy_stack_job_test.rb +1 -0
- data/test/jobs/emit_event_job_test.rb +2 -1
- data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
- data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
- data/test/jobs/github_sync_job_test.rb +1 -0
- data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
- data/test/jobs/merge_pull_requests_job_test.rb +1 -0
- data/test/jobs/perform_task_job_test.rb +4 -3
- data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
- data/test/jobs/reap_dead_tasks_job_test.rb +68 -0
- data/test/jobs/refresh_github_user_job_test.rb +1 -0
- data/test/jobs/refresh_status_job_test.rb +1 -0
- data/test/jobs/unique_job_test.rb +1 -0
- data/test/jobs/update_github_last_deployed_ref_job_test.rb +1 -0
- data/test/middleware/same_site_cookie_middleware_test.rb +52 -0
- data/test/models/api_client_test.rb +1 -0
- data/test/models/commit_checks_test.rb +1 -0
- data/test/models/commit_deployment_status_test.rb +1 -0
- data/test/models/commit_deployment_test.rb +2 -1
- data/test/models/commits_test.rb +72 -6
- data/test/models/delivery_test.rb +2 -1
- data/test/models/deploy_spec_test.rb +47 -42
- data/test/models/deploy_stats_test.rb +1 -0
- data/test/models/deploys_test.rb +31 -22
- data/test/models/duration_test.rb +1 -0
- data/test/models/github_hook_test.rb +1 -0
- data/test/models/hook_test.rb +18 -10
- data/test/models/membership_test.rb +1 -0
- data/test/models/output_chunk_test.rb +1 -0
- data/test/models/pull_request_test.rb +4 -3
- data/test/models/release_statuses_test.rb +1 -0
- data/test/models/rollbacks_test.rb +1 -0
- data/test/models/shipit/check_run_test.rb +1 -0
- data/test/models/shipit/repository_test.rb +1 -0
- data/test/models/shipit/wehbooks/handlers_test.rb +1 -0
- data/test/models/stacks_test.rb +30 -8
- data/test/models/status/group_test.rb +1 -0
- data/test/models/status/missing_test.rb +1 -0
- data/test/models/status_test.rb +1 -0
- data/test/models/task_definitions_test.rb +9 -8
- data/test/models/tasks_test.rb +18 -1
- data/test/models/team_test.rb +4 -2
- data/test/models/undeployed_commits_test.rb +1 -0
- data/test/models/users_test.rb +13 -5
- data/test/test_command_integration.rb +3 -2
- data/test/test_helper.rb +34 -31
- data/test/unit/anonymous_user_serializer_test.rb +14 -0
- data/test/unit/command_test.rb +8 -7
- data/test/unit/commands_test.rb +1 -0
- data/test/unit/commit_serializer_test.rb +16 -0
- data/test/unit/csv_serializer_test.rb +3 -2
- data/test/unit/deploy_commands_test.rb +5 -4
- data/test/unit/deploy_serializer_test.rb +17 -0
- data/test/unit/environment_variables_test.rb +5 -4
- data/test/unit/github_app_test.rb +1 -0
- data/test/unit/github_url_helper_test.rb +1 -0
- data/test/unit/rollback_commands_test.rb +2 -1
- data/test/unit/shipit_helper_test.rb +17 -0
- data/test/unit/shipit_test.rb +1 -0
- data/test/unit/user_serializer_test.rb +14 -0
- data/test/unit/variable_definition_test.rb +1 -0
- metadata +155 -130
data/test/models/deploys_test.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -247,6 +248,8 @@ module Shipit
|
|
|
247
248
|
end
|
|
248
249
|
|
|
249
250
|
test "transitioning to success enqueues a last-deployed git reference update" do
|
|
251
|
+
Shipit.stubs(:update_latest_deployed_ref).returns(true)
|
|
252
|
+
|
|
250
253
|
@deploy = shipit_deploys(:shipit_running)
|
|
251
254
|
assert_enqueued_with(job: UpdateGithubLastDeployedRefJob, args: [@deploy.stack]) do
|
|
252
255
|
@deploy.complete!
|
|
@@ -301,6 +304,20 @@ module Shipit
|
|
|
301
304
|
end
|
|
302
305
|
end
|
|
303
306
|
|
|
307
|
+
test "transitioning to aborted schedule a rollback to the designated deploy if set" do
|
|
308
|
+
@rollback_to = shipit_deploys(:shipit_pending)
|
|
309
|
+
@deploy = shipit_deploys(:shipit_running)
|
|
310
|
+
@deploy.ping
|
|
311
|
+
@deploy.pid = 42
|
|
312
|
+
@deploy.abort!(rollback_once_aborted: true, rollback_once_aborted_to: @rollback_to, aborted_by: @user)
|
|
313
|
+
|
|
314
|
+
assert_difference -> { @stack.rollbacks.count }, 1 do
|
|
315
|
+
assert_enqueued_with(job: PerformTaskJob) do
|
|
316
|
+
@deploy.aborted!
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
end
|
|
320
|
+
|
|
304
321
|
test "#build_rollback returns an unsaved record" do
|
|
305
322
|
assert @deploy.build_rollback.new_record?
|
|
306
323
|
end
|
|
@@ -429,6 +446,20 @@ module Shipit
|
|
|
429
446
|
assert_equal "Shipit::Rollback", last_deploy.type
|
|
430
447
|
end
|
|
431
448
|
|
|
449
|
+
test "#trigger_revert uses rollback_to if set" do
|
|
450
|
+
test_stack = create_test_stack
|
|
451
|
+
test_stack.save
|
|
452
|
+
test_stack.reload
|
|
453
|
+
|
|
454
|
+
running_deploy = shipit_deploys(:shipit_running)
|
|
455
|
+
rollback_to = shipit_deploys(:shipit_pending)
|
|
456
|
+
|
|
457
|
+
final_rollback = running_deploy.trigger_revert(rollback_to: rollback_to)
|
|
458
|
+
|
|
459
|
+
assert_equal "Shipit::Rollback", final_rollback.type
|
|
460
|
+
assert_equal 4, final_rollback.until_commit_id
|
|
461
|
+
end
|
|
462
|
+
|
|
432
463
|
test "#trigger_revert skips unsuccessful deploys when reverting" do
|
|
433
464
|
user_id = @user.id
|
|
434
465
|
test_stack = create_test_stack
|
|
@@ -865,9 +896,6 @@ module Shipit
|
|
|
865
896
|
until_commit: template_task.until_commit,
|
|
866
897
|
)
|
|
867
898
|
|
|
868
|
-
pull_request_response = stub(head: stub(sha: '6dcb09b5b57875f334f61aebed695e2e4193db5e'))
|
|
869
|
-
Shipit.github.api.expects(:pull_request).with('shopify/shipit-engine', 7).returns(pull_request_response)
|
|
870
|
-
|
|
871
899
|
expected_delta = deploy.commits.select(&:pull_request?).size + 1
|
|
872
900
|
assert_difference -> { CommitDeployment.count }, expected_delta do
|
|
873
901
|
assert_difference -> { CommitDeploymentStatus.count }, expected_delta do
|
|
@@ -879,25 +907,6 @@ module Shipit
|
|
|
879
907
|
refute_nil CommitDeployment.find_by(sha: deploy.until_commit.sha)
|
|
880
908
|
end
|
|
881
909
|
|
|
882
|
-
test "#create_commit_deployments handles API errors when loading pull request details" do
|
|
883
|
-
template_task = shipit_tasks(:shipit_pending)
|
|
884
|
-
deploy = template_task.stack.deploys.build(
|
|
885
|
-
since_commit: template_task.since_commit,
|
|
886
|
-
until_commit: template_task.until_commit,
|
|
887
|
-
)
|
|
888
|
-
|
|
889
|
-
Shipit.github.api.expects(:pull_request).with('shopify/shipit-engine', 7).raises(Octokit::NotFound)
|
|
890
|
-
|
|
891
|
-
expected_delta = 1 # Only the batch head
|
|
892
|
-
assert_difference -> { CommitDeployment.count }, expected_delta do
|
|
893
|
-
assert_difference -> { CommitDeploymentStatus.count }, expected_delta do
|
|
894
|
-
deploy.save!
|
|
895
|
-
end
|
|
896
|
-
end
|
|
897
|
-
|
|
898
|
-
refute_nil CommitDeployment.find_by(sha: deploy.until_commit.sha)
|
|
899
|
-
end
|
|
900
|
-
|
|
901
910
|
private
|
|
902
911
|
|
|
903
912
|
def expect_event(deploy)
|
data/test/models/hook_test.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -50,22 +51,29 @@ module Shipit
|
|
|
50
51
|
end
|
|
51
52
|
|
|
52
53
|
test ".emit calls #deliver on internal hooks" do
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
original_receivers = Shipit.internal_hook_receivers
|
|
55
|
+
FakeReceiver = Module.new
|
|
56
|
+
FakeReceiver.expects(:deliver).with(:deploy, @stack, 'foo' => 42)
|
|
56
57
|
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
Shipit.internal_hook_receivers << FakeReceiver
|
|
59
|
+
Hook.emit(:deploy, @stack, 'foo' => 42)
|
|
59
60
|
ensure
|
|
60
|
-
|
|
61
|
+
Shipit.internal_hook_receivers = original_receivers
|
|
61
62
|
end
|
|
62
63
|
|
|
63
64
|
test ".emit calls no internal hooks if there are no internal_hook_receivers" do
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
original_receivers = Shipit.internal_hook_receivers
|
|
66
|
+
Shipit.internal_hook_receivers = nil
|
|
67
|
+
Hook.emit(:deploy, @stack, 'foo' => 42)
|
|
67
68
|
ensure
|
|
68
|
-
|
|
69
|
+
Shipit.internal_hook_receivers = original_receivers
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
test ".coerce_payload coerces anonymous user correctly" do
|
|
73
|
+
locked_stack = Stack.first
|
|
74
|
+
locked_stack.lock("Some Reason", nil)
|
|
75
|
+
serialized = Hook.coerce_payload(stack: locked_stack)
|
|
76
|
+
assert_json("stack.lock_author.anonymous", true, document: serialized)
|
|
69
77
|
end
|
|
70
78
|
end
|
|
71
79
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -271,7 +272,7 @@ module Shipit
|
|
|
271
272
|
behind_by: 10,
|
|
272
273
|
),
|
|
273
274
|
)
|
|
274
|
-
spec = {'merge' => {'max_divergence' => {'commits' => 1}}}
|
|
275
|
+
spec = { 'merge' => { 'max_divergence' => { 'commits' => 1 } } }
|
|
275
276
|
@pr.stack.cached_deploy_spec = DeploySpec.new(spec)
|
|
276
277
|
assert_predicate @pr, :stale?
|
|
277
278
|
end
|
|
@@ -279,14 +280,14 @@ module Shipit
|
|
|
279
280
|
test "#stale? returns true when the branch falls behind the maximum age" do
|
|
280
281
|
@pr.base_commit = shipit_commits(:second)
|
|
281
282
|
@pr.head.committed_at = 2.hours.ago
|
|
282
|
-
spec = {'merge' => {'max_divergence' => {'age' => '1h'}}}
|
|
283
|
+
spec = { 'merge' => { 'max_divergence' => { 'age' => '1h' } } }
|
|
283
284
|
@pr.stack.cached_deploy_spec = DeploySpec.new(spec)
|
|
284
285
|
assert_predicate @pr, :stale?
|
|
285
286
|
end
|
|
286
287
|
|
|
287
288
|
test "#stale? is false when base_commit information is missing" do
|
|
288
289
|
@pr.base_commit = nil
|
|
289
|
-
spec = {'merge' => {'max_divergence' => {'age' => '1h', 'commits' => 10}}}
|
|
290
|
+
spec = { 'merge' => { 'max_divergence' => { 'age' => '1h', 'commits' => 10 } } }
|
|
290
291
|
@pr.stack.cached_deploy_spec = DeploySpec.new(spec)
|
|
291
292
|
refute_predicate @pr, :stale?
|
|
292
293
|
end
|
data/test/models/stacks_test.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
require 'securerandom'
|
|
3
4
|
|
|
@@ -70,11 +71,11 @@ module Shipit
|
|
|
70
71
|
|
|
71
72
|
last_commit = shipit_commits(:third)
|
|
72
73
|
deploy = @stack.trigger_deploy(last_commit, AnonymousUser.new)
|
|
73
|
-
assert_includes
|
|
74
|
+
assert_includes(FakeReceiver.hooks, [
|
|
74
75
|
:deploy,
|
|
75
76
|
@stack,
|
|
76
|
-
{deploy: deploy, status: "pending", stack: @stack},
|
|
77
|
-
]
|
|
77
|
+
{ deploy: deploy, status: "pending", stack: @stack },
|
|
78
|
+
])
|
|
78
79
|
ensure
|
|
79
80
|
Shipit.internal_hook_receivers = original_receivers
|
|
80
81
|
end
|
|
@@ -306,7 +307,7 @@ module Shipit
|
|
|
306
307
|
end
|
|
307
308
|
|
|
308
309
|
test "#monitoring returns deploy_spec's content" do
|
|
309
|
-
assert_equal [{'image' => 'https://example.com/monitor.png', 'width' => 200, 'height' => 300}], @stack.monitoring
|
|
310
|
+
assert_equal [{ 'image' => 'https://example.com/monitor.png', 'width' => 200, 'height' => 300 }], @stack.monitoring
|
|
310
311
|
end
|
|
311
312
|
|
|
312
313
|
test "#destroy deletes the related commits" do
|
|
@@ -338,7 +339,7 @@ module Shipit
|
|
|
338
339
|
time = Time.current
|
|
339
340
|
@stack.update(lock_reason: "Just for fun", lock_author: shipit_users(:walrus))
|
|
340
341
|
travel 1.day
|
|
341
|
-
expect_hook(:lock, @stack, locked: false, lock_details: {from: time, until: Time.current}, stack: @stack) do
|
|
342
|
+
expect_hook(:lock, @stack, locked: false, lock_details: { from: time, until: Time.current }, stack: @stack) do
|
|
342
343
|
@stack.update(lock_reason: nil)
|
|
343
344
|
end
|
|
344
345
|
end
|
|
@@ -389,7 +390,7 @@ module Shipit
|
|
|
389
390
|
|
|
390
391
|
test "updating the stack emit a hook" do
|
|
391
392
|
expect_hook(:stack, @stack, action: :updated, stack: @stack) do
|
|
392
|
-
@stack.update(
|
|
393
|
+
@stack.update(environment: 'foo')
|
|
393
394
|
end
|
|
394
395
|
end
|
|
395
396
|
|
|
@@ -483,7 +484,9 @@ module Shipit
|
|
|
483
484
|
|
|
484
485
|
assert_no_enqueued_jobs do
|
|
485
486
|
assert_no_difference -> { Deploy.count } do
|
|
486
|
-
@stack.trigger_continuous_delivery
|
|
487
|
+
value = @stack.trigger_continuous_delivery
|
|
488
|
+
|
|
489
|
+
assert_nil value
|
|
487
490
|
end
|
|
488
491
|
end
|
|
489
492
|
end
|
|
@@ -551,7 +554,24 @@ module Shipit
|
|
|
551
554
|
end
|
|
552
555
|
end
|
|
553
556
|
|
|
557
|
+
test "#trigger_continuous_delivery bails out if no DeploySpec has been cached" do
|
|
558
|
+
@stack = shipit_stacks(:check_deploy_spec)
|
|
559
|
+
deploy_spec = @stack.cached_deploy_spec
|
|
560
|
+
|
|
561
|
+
assert_predicate @stack, :deployable?
|
|
562
|
+
refute_predicate @stack, :deployed_too_recently?
|
|
563
|
+
assert(deploy_spec.blank?, "DeploySpec blank? returned false")
|
|
564
|
+
|
|
565
|
+
assert_no_enqueued_jobs(only: Shipit::PerformTaskJob) do
|
|
566
|
+
assert_no_difference -> { Deploy.count } do
|
|
567
|
+
@stack.trigger_continuous_delivery
|
|
568
|
+
end
|
|
569
|
+
end
|
|
570
|
+
end
|
|
571
|
+
|
|
554
572
|
test "#trigger_continuous_delivery enqueues deployment ref update job" do
|
|
573
|
+
Shipit.stubs(:update_latest_deployed_ref).returns(true)
|
|
574
|
+
|
|
555
575
|
@stack = shipit_stacks(:shipit_canaries)
|
|
556
576
|
shipit_tasks(:canaries_running).delete
|
|
557
577
|
|
|
@@ -567,6 +587,8 @@ module Shipit
|
|
|
567
587
|
end
|
|
568
588
|
|
|
569
589
|
test "#trigger_continuous_delivery executes ref update job with correct sha" do
|
|
590
|
+
Shipit.stubs(:update_latest_deployed_ref).returns(true)
|
|
591
|
+
|
|
570
592
|
@stack = shipit_stacks(:shipit_canaries)
|
|
571
593
|
shipit_tasks(:canaries_running).delete
|
|
572
594
|
|
|
@@ -598,7 +620,7 @@ module Shipit
|
|
|
598
620
|
@stack.tasks.delete_all
|
|
599
621
|
|
|
600
622
|
deploy = @stack.trigger_continuous_delivery
|
|
601
|
-
assert_equal({'SAFETY_DISABLED' => '0'}, deploy.env)
|
|
623
|
+
assert_equal({ 'SAFETY_DISABLED' => '0' }, deploy.env)
|
|
602
624
|
end
|
|
603
625
|
|
|
604
626
|
test "#continuous_delivery_delayed! bumps updated_at" do
|
data/test/models/status_test.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -11,10 +12,10 @@ module Shipit
|
|
|
11
12
|
'steps' => ['touch tmp/restart'],
|
|
12
13
|
'allow_concurrency' => true,
|
|
13
14
|
'variables' => [
|
|
14
|
-
{'name' => 'FOO', 'title' => 'Set to 0 to foo', 'default' => '1'},
|
|
15
|
-
{'name' => 'BAR', 'title' => 'Set to 1 to bar', 'default' => '0'},
|
|
16
|
-
{'name' => 'WALRUS', 'title' => 'Use with caution', 'default' => ' '},
|
|
17
|
-
{'name' => 'NODEFAULT', 'title' => 'Variable without default'},
|
|
15
|
+
{ 'name' => 'FOO', 'title' => 'Set to 0 to foo', 'default' => '1' },
|
|
16
|
+
{ 'name' => 'BAR', 'title' => 'Set to 1 to bar', 'default' => '0' },
|
|
17
|
+
{ 'name' => 'WALRUS', 'title' => 'Use with caution', 'default' => ' ' },
|
|
18
|
+
{ 'name' => 'NODEFAULT', 'title' => 'Variable without default' },
|
|
18
19
|
],
|
|
19
20
|
)
|
|
20
21
|
end
|
|
@@ -43,10 +44,10 @@ module Shipit
|
|
|
43
44
|
checklist: [],
|
|
44
45
|
allow_concurrency: true,
|
|
45
46
|
variables: [
|
|
46
|
-
{'name' => 'FOO', 'title' => 'Set to 0 to foo', 'default' => '1', 'select' => nil},
|
|
47
|
-
{'name' => 'BAR', 'title' => 'Set to 1 to bar', 'default' => '0', 'select' => nil},
|
|
48
|
-
{'name' => 'WALRUS', 'title' => 'Use with caution', 'default' => ' ', 'select' => nil},
|
|
49
|
-
{'name' => 'NODEFAULT', 'title' => 'Variable without default', 'default' => '', 'select' => nil},
|
|
47
|
+
{ 'name' => 'FOO', 'title' => 'Set to 0 to foo', 'default' => '1', 'select' => nil },
|
|
48
|
+
{ 'name' => 'BAR', 'title' => 'Set to 1 to bar', 'default' => '0', 'select' => nil },
|
|
49
|
+
{ 'name' => 'WALRUS', 'title' => 'Use with caution', 'default' => ' ', 'select' => nil },
|
|
50
|
+
{ 'name' => 'NODEFAULT', 'title' => 'Variable without default', 'default' => '', 'select' => nil },
|
|
50
51
|
],
|
|
51
52
|
}
|
|
52
53
|
assert_equal as_json, TaskDefinition.load(TaskDefinition.dump(@definition)).as_json
|
data/test/models/tasks_test.rb
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
4
5
|
class TasksTest < ActiveSupport::TestCase
|
|
5
6
|
test "#title interpolates env" do
|
|
6
7
|
task = shipit_tasks(:shipit_rendered_failover)
|
|
7
|
-
assert_equal({'POD_ID' => '12'}, task.env)
|
|
8
|
+
assert_equal({ 'POD_ID' => '12' }, task.env)
|
|
8
9
|
assert_equal 'Failover pod 12', task.title
|
|
9
10
|
end
|
|
10
11
|
|
|
@@ -30,5 +31,21 @@ module Shipit
|
|
|
30
31
|
|
|
31
32
|
task.write("hello\nworld")
|
|
32
33
|
end
|
|
34
|
+
|
|
35
|
+
test "#chunk_output truncates output exceeding the storage limit" do
|
|
36
|
+
task = shipit_tasks(:shipit)
|
|
37
|
+
task.chunks.delete_all
|
|
38
|
+
# Dont persist the chunk to the DB, as it may exceed the MySQL max packet size on CI
|
|
39
|
+
task.chunks.build(text: 'a' * (Task::OUTPUT_SIZE_LIMIT * 1.1))
|
|
40
|
+
|
|
41
|
+
output = task.chunk_output
|
|
42
|
+
|
|
43
|
+
assert output.size <= Task::OUTPUT_SIZE_LIMIT, "Output was not truncated to the limit"
|
|
44
|
+
# We don't use assert_includes because it will print the whole message
|
|
45
|
+
assert(
|
|
46
|
+
output.include?(Task::OUTPUT_TRUNCATED_MESSAGE),
|
|
47
|
+
"'#{Task::OUTPUT_TRUNCATED_MESSAGE.chomp}' was not present in the output",
|
|
48
|
+
)
|
|
49
|
+
end
|
|
33
50
|
end
|
|
34
51
|
end
|
data/test/models/team_test.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -11,16 +12,17 @@ module Shipit
|
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
test ".find_or_create_by_handle fetch the team from github if it's not in the db already" do
|
|
14
|
-
Shipit.github.api.expects(:org_teams).with('shopify', per_page: 100)
|
|
15
15
|
response = stub(rels: {}, data: [new_team])
|
|
16
|
+
Shipit.github.api.expects(:org_teams).with('shopify', per_page: 100).returns(response.data)
|
|
16
17
|
Shipit.github.api.expects(:last_response).returns(response)
|
|
18
|
+
|
|
17
19
|
assert_difference -> { Team.count }, 1 do
|
|
18
20
|
Team.find_or_create_by_handle('Shopify/new-team')
|
|
19
21
|
end
|
|
20
22
|
end
|
|
21
23
|
|
|
22
24
|
test "#refresh_members! fetch all the team members from github" do
|
|
23
|
-
response = stub(rels: {members: members_resource})
|
|
25
|
+
response = stub(rels: { members: members_resource })
|
|
24
26
|
Shipit.github.api.expects(:get).with(@team.api_url).returns(response)
|
|
25
27
|
assert_difference -> { User.count }, 1 do
|
|
26
28
|
@team.refresh_members!
|
data/test/models/users_test.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -91,8 +92,8 @@ module Shipit
|
|
|
91
92
|
|
|
92
93
|
stub_request(:get, @emails_url).to_return(
|
|
93
94
|
status: %w(200 OK),
|
|
94
|
-
body: [{email: expected_email}].to_json,
|
|
95
|
-
headers: {"Content-Type" => "application/json"},
|
|
95
|
+
body: [{ email: expected_email }].to_json,
|
|
96
|
+
headers: { "Content-Type" => "application/json" },
|
|
96
97
|
)
|
|
97
98
|
|
|
98
99
|
user = User.find_or_create_from_github(@github_user)
|
|
@@ -119,7 +120,7 @@ module Shipit
|
|
|
119
120
|
stub_request(:get, @emails_url).to_return(
|
|
120
121
|
status: %w(200 OK),
|
|
121
122
|
body: result_email_records.to_json,
|
|
122
|
-
headers: {"Content-Type" => "application/json"},
|
|
123
|
+
headers: { "Content-Type" => "application/json" },
|
|
123
124
|
)
|
|
124
125
|
|
|
125
126
|
user = User.find_or_create_from_github(@github_user)
|
|
@@ -141,7 +142,7 @@ module Shipit
|
|
|
141
142
|
stub_request(:get, @emails_url).to_return(
|
|
142
143
|
status: %w(200 OK),
|
|
143
144
|
body: result_email_records.to_json,
|
|
144
|
-
headers: {"Content-Type" => "application/json"},
|
|
145
|
+
headers: { "Content-Type" => "application/json" },
|
|
145
146
|
)
|
|
146
147
|
|
|
147
148
|
user = User.find_or_create_from_github(@github_user)
|
|
@@ -162,9 +163,16 @@ module Shipit
|
|
|
162
163
|
assert_nil user.email
|
|
163
164
|
end
|
|
164
165
|
|
|
166
|
+
test "find_or_create_from_github handles user 401" do
|
|
167
|
+
Shipit.preferred_org_emails = [@org_domain]
|
|
168
|
+
Octokit::Client.any_instance.expects(:emails).raises(Octokit::Unauthorized)
|
|
169
|
+
user = User.find_or_create_from_github(@minimal_github_user)
|
|
170
|
+
assert_nil user.email
|
|
171
|
+
end
|
|
172
|
+
|
|
165
173
|
test "#identifiers_for_ping returns a hash with the user's github_id, name, email and github_login" do
|
|
166
174
|
user = shipit_users(:bob)
|
|
167
|
-
expected_ouput = {github_id: user.github_id, name: user.name, email: user.email, github_login: user.login}
|
|
175
|
+
expected_ouput = { github_id: user.github_id, name: user.name, email: user.email, github_login: user.login }
|
|
168
176
|
assert_equal expected_ouput, user.identifiers_for_ping
|
|
169
177
|
end
|
|
170
178
|
|