shipit-engine 0.38.0 → 0.40.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 +48 -4
- data/Rakefile +2 -1
- data/app/assets/javascripts/shipit/continuous_delivery_schedule.js.coffee +15 -0
- 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 +1 -0
- data/app/controllers/concerns/shipit/authentication.rb +1 -0
- data/app/controllers/concerns/shipit/pagination.rb +3 -2
- data/app/controllers/shipit/api/base_controller.rb +12 -10
- data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
- data/app/controllers/shipit/api/commits_controller.rb +2 -3
- data/app/controllers/shipit/api/deploys_controller.rb +6 -1
- data/app/controllers/shipit/api/hooks_controller.rb +4 -3
- data/app/controllers/shipit/api/locks_controller.rb +1 -0
- data/app/controllers/shipit/api/merge_requests_controller.rb +6 -5
- data/app/controllers/shipit/api/outputs_controller.rb +1 -0
- data/app/controllers/shipit/api/release_statuses_controller.rb +2 -1
- data/app/controllers/shipit/api/rollbacks_controller.rb +1 -0
- data/app/controllers/shipit/api/stacks_controller.rb +15 -14
- data/app/controllers/shipit/api/tasks_controller.rb +6 -5
- data/app/controllers/shipit/api_clients_controller.rb +6 -7
- data/app/controllers/shipit/ccmenu_url_controller.rb +3 -2
- data/app/controllers/shipit/commit_checks_controller.rb +2 -1
- data/app/controllers/shipit/commits_controller.rb +1 -0
- data/app/controllers/shipit/continuous_delivery_schedules_controller.rb +42 -0
- data/app/controllers/shipit/deploys_controller.rb +6 -5
- data/app/controllers/shipit/github_authentication_controller.rb +6 -0
- data/app/controllers/shipit/merge_requests_controller.rb +1 -0
- data/app/controllers/shipit/merge_status_controller.rb +30 -26
- data/app/controllers/shipit/release_statuses_controller.rb +1 -0
- data/app/controllers/shipit/repositories_controller.rb +4 -7
- data/app/controllers/shipit/rollbacks_controller.rb +2 -1
- data/app/controllers/shipit/shipit_controller.rb +1 -0
- data/app/controllers/shipit/stacks_controller.rb +27 -31
- data/app/controllers/shipit/status_controller.rb +1 -0
- data/app/controllers/shipit/tasks_controller.rb +3 -1
- data/app/controllers/shipit/webhooks_controller.rb +2 -1
- data/app/helpers/shipit/api_clients_helper.rb +1 -0
- data/app/helpers/shipit/chunks_helper.rb +3 -1
- data/app/helpers/shipit/deploys_helper.rb +7 -3
- data/app/helpers/shipit/github_url_helper.rb +5 -4
- data/app/helpers/shipit/merge_status_helper.rb +1 -0
- data/app/helpers/shipit/shipit_helper.rb +11 -10
- data/app/helpers/shipit/stacks_helper.rb +10 -11
- data/app/helpers/shipit/tasks_helper.rb +2 -1
- data/app/jobs/shipit/background_job/unique.rb +3 -2
- data/app/jobs/shipit/background_job.rb +9 -1
- data/app/jobs/shipit/cache_deploy_spec_job.rb +2 -1
- data/app/jobs/shipit/chunk_rollup_job.rb +1 -0
- data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
- data/app/jobs/shipit/continuous_delivery_job.rb +5 -0
- data/app/jobs/shipit/create_on_github_job.rb +1 -0
- data/app/jobs/shipit/create_release_statuses_job.rb +2 -0
- data/app/jobs/shipit/deferred_touch_job.rb +1 -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_repository_job.rb +1 -0
- data/app/jobs/shipit/destroy_stack_job.rb +36 -15
- data/app/jobs/shipit/emit_event_job.rb +1 -0
- 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 +4 -2
- data/app/jobs/shipit/mark_deploy_healthy_job.rb +1 -0
- data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
- data/app/jobs/shipit/perform_task_job.rb +1 -0
- data/app/jobs/shipit/process_merge_requests_job.rb +2 -0
- data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
- data/app/jobs/shipit/reap_dead_tasks_job.rb +1 -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_merge_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 +6 -7
- data/app/models/concerns/shipit/deferred_touch.rb +5 -2
- data/app/models/shipit/anonymous_user.rb +4 -5
- data/app/models/shipit/api_client.rb +5 -3
- data/app/models/shipit/application_record.rb +1 -0
- data/app/models/shipit/check_run.rb +7 -6
- data/app/models/shipit/command_line_user.rb +4 -5
- data/app/models/shipit/commit.rb +46 -32
- data/app/models/shipit/commit_checks.rb +4 -2
- data/app/models/shipit/commit_deployment.rb +7 -5
- data/app/models/shipit/commit_deployment_status.rb +5 -3
- data/app/models/shipit/commit_message.rb +2 -0
- data/app/models/shipit/continuous_delivery_schedule.rb +84 -0
- data/app/models/shipit/delivery.rb +5 -4
- data/app/models/shipit/deploy.rb +46 -26
- data/app/models/shipit/deploy_spec/bundler_discovery.rb +3 -1
- data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/file_system.rb +48 -17
- data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +4 -3
- data/app/models/shipit/deploy_spec/lerna_discovery.rb +32 -31
- data/app/models/shipit/deploy_spec/npm_discovery.rb +18 -13
- data/app/models/shipit/deploy_spec/pypi_discovery.rb +5 -4
- data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec.rb +25 -30
- data/app/models/shipit/deploy_stats.rb +6 -1
- data/app/models/shipit/duration.rb +5 -3
- data/app/models/shipit/ephemeral_commit_checks.rb +8 -7
- data/app/models/shipit/github_hook.rb +1 -0
- data/app/models/shipit/github_status.rb +1 -0
- data/app/models/shipit/hook.rb +9 -7
- data/app/models/shipit/membership.rb +1 -0
- data/app/models/shipit/merge_request.rb +26 -16
- data/app/models/shipit/output_chunk.rb +1 -0
- data/app/models/shipit/provisioning_handler.rb +1 -0
- data/app/models/shipit/pull_request.rb +2 -2
- data/app/models/shipit/record.rb +1 -0
- data/app/models/shipit/release_status.rb +4 -3
- data/app/models/shipit/repository.rb +12 -11
- data/app/models/shipit/review_stack.rb +3 -1
- data/app/models/shipit/review_stack_provisioning_queue.rb +2 -2
- data/app/models/shipit/rollback.rb +2 -0
- data/app/models/shipit/stack.rb +71 -60
- data/app/models/shipit/status/common.rb +1 -0
- data/app/models/shipit/status/group.rb +5 -3
- data/app/models/shipit/status/missing.rb +2 -1
- data/app/models/shipit/status/unknown.rb +1 -0
- data/app/models/shipit/status.rb +5 -4
- data/app/models/shipit/task.rb +40 -31
- data/app/models/shipit/task_definition.rb +10 -7
- data/app/models/shipit/task_execution_strategy/default.rb +13 -13
- data/app/models/shipit/team.rb +13 -12
- data/app/models/shipit/undeployed_commit.rb +8 -3
- data/app/models/shipit/unlimited_api_client.rb +2 -2
- data/app/models/shipit/user.rb +23 -16
- data/app/models/shipit/variable_definition.rb +2 -1
- 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/pull_request/assigned_handler.rb +10 -10
- data/app/models/shipit/webhooks/handlers/pull_request/closed_handler.rb +1 -1
- data/app/models/shipit/webhooks/handlers/pull_request/edited_handler.rb +10 -10
- data/app/models/shipit/webhooks/handlers/pull_request/label_capturing_handler.rb +2 -2
- data/app/models/shipit/webhooks/handlers/pull_request/labeled_handler.rb +2 -2
- data/app/models/shipit/webhooks/handlers/pull_request/reopened_handler.rb +1 -1
- data/app/models/shipit/webhooks/handlers/pull_request/review_stack_adapter.rb +3 -3
- data/app/models/shipit/webhooks/handlers/pull_request/unlabeled_handler.rb +1 -1
- data/app/models/shipit/webhooks/handlers/push_handler.rb +2 -1
- data/app/models/shipit/webhooks/handlers/status_handler.rb +1 -0
- data/app/models/shipit/webhooks.rb +3 -2
- 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 +2 -1
- data/app/serializers/shipit/deploy_serializer.rb +1 -0
- data/app/serializers/shipit/hook_serializer.rb +1 -0
- data/app/serializers/shipit/merge_request_serializer.rb +2 -1
- 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 +4 -3
- data/app/serializers/shipit/tail_task_serializer.rb +4 -1
- data/app/serializers/shipit/task_serializer.rb +1 -0
- data/app/serializers/shipit/user_serializer.rb +1 -0
- data/app/validators/ascii_only_validator.rb +4 -3
- data/app/validators/subset_validator.rb +1 -0
- data/app/views/shipit/_variables.html.erb +1 -1
- data/app/views/shipit/ccmenu/project.xml.builder +2 -1
- data/app/views/shipit/continuous_delivery_schedules/show.html.erb +59 -0
- data/app/views/shipit/merge_status/failure.html.erb +1 -1
- data/app/views/shipit/missing_settings.html.erb +1 -1
- data/app/views/shipit/stacks/_settings_form.erb +1 -0
- data/config/initializers/inflections.rb +1 -0
- data/config/locales/en.yml +1 -0
- data/config/routes.rb +21 -18
- data/config/secrets.development.example.yml +1 -1
- data/config/secrets.development.shopify.yml +1 -1
- data/db/migrate/20240821003007_add_continuous_delivery_schedules.rb +13 -0
- data/db/migrate/20250207203053_embiggen_github_ids.rb +8 -0
- data/lib/shipit/cast_value.rb +1 -0
- data/lib/shipit/command.rb +29 -9
- data/lib/shipit/commands.rb +4 -2
- data/lib/shipit/csv_serializer.rb +3 -0
- data/lib/shipit/deploy_commands.rb +2 -1
- data/lib/shipit/engine.rb +6 -5
- data/lib/shipit/environment_variables.rb +2 -0
- data/lib/shipit/first_parent_commits_iterator.rb +2 -3
- data/lib/shipit/flock.rb +11 -9
- data/lib/shipit/github_app.rb +14 -16
- 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 +2 -3
- data/lib/shipit/octokit_iterator.rb +2 -0
- data/lib/shipit/paginator.rb +1 -0
- data/lib/shipit/rollback_commands.rb +2 -1
- data/lib/shipit/same_site_cookie_middleware.rb +1 -0
- data/lib/shipit/simple_message_verifier.rb +1 -0
- data/lib/shipit/stack_commands.rb +35 -27
- data/lib/shipit/stat.rb +1 -0
- data/lib/shipit/task_commands.rb +7 -6
- data/lib/shipit/version.rb +2 -1
- data/lib/shipit.rb +30 -17
- data/lib/tasks/cron.rake +2 -1
- data/lib/tasks/dev.rake +3 -2
- data/lib/tasks/shipit.rake +3 -2
- data/lib/tasks/teams.rake +3 -2
- data/test/controllers/api/base_controller_test.rb +1 -0
- data/test/controllers/api/ccmenu_controller_test.rb +4 -3
- data/test/controllers/api/commits_controller_test.rb +1 -0
- data/test/controllers/api/deploys_controller_test.rb +26 -1
- data/test/controllers/api/hooks_controller_test.rb +6 -5
- data/test/controllers/api/locks_controller_test.rb +1 -0
- data/test/controllers/api/merge_requests_controller_test.rb +1 -0
- data/test/controllers/api/outputs_controller_test.rb +1 -0
- data/test/controllers/api/release_statuses_controller_test.rb +4 -3
- data/test/controllers/api/rollback_controller_test.rb +3 -2
- data/test/controllers/api/stacks_controller_test.rb +13 -12
- data/test/controllers/api/tasks_controller_test.rb +7 -6
- data/test/controllers/api_clients_controller_test.rb +10 -10
- data/test/controllers/ccmenu_controller_test.rb +1 -0
- data/test/controllers/commit_checks_controller_test.rb +1 -0
- data/test/controllers/commits_controller_test.rb +9 -8
- data/test/controllers/continuous_delivery_schedules_controller_test.rb +66 -0
- data/test/controllers/deploys_controller_test.rb +4 -2
- data/test/controllers/github_authentication_controller_test.rb +6 -4
- data/test/controllers/merge_requests_controller_test.rb +1 -0
- data/test/controllers/merge_status_controller_test.rb +5 -4
- data/test/controllers/release_statuses_controller_test.rb +1 -0
- data/test/controllers/repositories_controller_test.rb +6 -5
- data/test/controllers/rollbacks_controller_test.rb +3 -2
- data/test/controllers/stacks_controller_test.rb +8 -6
- data/test/controllers/status_controller_test.rb +1 -0
- data/test/controllers/tasks_controller_test.rb +13 -5
- data/test/controllers/webhooks_controller_test.rb +10 -9
- data/test/dummy/config/application.rb +2 -1
- data/test/dummy/config/initializers/0_load_development_secrets.rb +2 -2
- data/test/dummy/config/secrets.development.json +3 -0
- data/test/dummy/config/secrets.test.json +21 -0
- data/test/dummy/db/schema.rb +33 -6
- data/test/fixtures/shipit/commits.yml +7 -7
- data/test/fixtures/shipit/stacks.yml +4 -10
- data/test/fixtures/shipit/tasks.yml +3 -3
- data/test/helpers/api_helper.rb +2 -3
- data/test/helpers/fixture_aliases_helper.rb +1 -0
- data/test/helpers/hooks_helper.rb +1 -0
- data/test/helpers/json_helper.rb +4 -3
- data/test/helpers/links_helper.rb +2 -1
- data/test/helpers/payloads_helper.rb +1 -0
- data/test/helpers/queries_helper.rb +4 -3
- data/test/jobs/cache_deploy_spec_job_test.rb +3 -2
- data/test/jobs/chunk_rollup_job_test.rb +3 -2
- data/test/jobs/deliver_hook_job_test.rb +1 -0
- data/test/jobs/destroy_repository_job_test.rb +1 -0
- data/test/jobs/destroy_stack_job_test.rb +12 -0
- data/test/jobs/emit_event_job_test.rb +1 -0
- 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 +22 -21
- data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
- data/test/jobs/perform_task_job_test.rb +3 -3
- data/test/jobs/process_merge_requests_job_test.rb +7 -6
- data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
- data/test/jobs/reap_dead_tasks_job_test.rb +1 -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/shipit/background_job_test.rb +35 -0
- data/test/jobs/shipit/continuous_delivery_job_test.rb +31 -0
- data/test/jobs/unique_job_test.rb +3 -1
- data/test/jobs/update_github_last_deployed_ref_job_test.rb +1 -0
- data/test/middleware/same_site_cookie_middleware_test.rb +2 -2
- data/test/models/api_client_test.rb +1 -0
- data/test/models/commit_checks_test.rb +2 -1
- data/test/models/commit_deployment_status_test.rb +2 -2
- data/test/models/commit_deployment_test.rb +4 -3
- data/test/models/commits_test.rb +72 -70
- data/test/models/delivery_test.rb +3 -2
- data/test/models/deploy_spec_test.rb +113 -109
- data/test/models/deploy_stats_test.rb +1 -0
- data/test/models/deploys_test.rb +65 -56
- data/test/models/duration_test.rb +1 -1
- data/test/models/github_hook_test.rb +1 -0
- data/test/models/hook_test.rb +7 -4
- data/test/models/membership_test.rb +1 -0
- data/test/models/merge_request_test.rb +26 -20
- data/test/models/release_statuses_test.rb +2 -1
- data/test/models/rollbacks_test.rb +4 -3
- data/test/models/shipit/check_run_test.rb +16 -15
- data/test/models/shipit/continuous_delivery_schedule_test.rb +109 -0
- data/test/models/shipit/deploy_spec/file_system_test.rb +54 -10
- data/test/models/shipit/pull_request_test.rb +9 -9
- data/test/models/shipit/repository_test.rb +3 -2
- data/test/models/shipit/review_stack_provisioning_queue_test.rb +2 -2
- data/test/models/shipit/{stacks_test.rb → stack_test.rb} +48 -34
- data/test/models/shipit/webhooks/handlers/pull_request/closed_handler_test.rb +36 -34
- data/test/models/shipit/webhooks/handlers/pull_request/label_capturing_handler_test.rb +28 -28
- data/test/models/shipit/webhooks/handlers/pull_request/labeled_handler_test.rb +42 -42
- data/test/models/shipit/webhooks/handlers/pull_request/opened_handler_test.rb +33 -33
- data/test/models/shipit/webhooks/handlers/pull_request/reopened_handler_test.rb +37 -37
- data/test/models/shipit/webhooks/handlers/pull_request/review_stack_adapter_test.rb +1 -1
- data/test/models/shipit/webhooks/handlers/pull_request/unlabeled_handler_test.rb +44 -42
- data/test/models/shipit/webhooks/handlers_test.rb +1 -0
- data/test/models/status/group_test.rb +3 -2
- data/test/models/status/missing_test.rb +1 -0
- data/test/models/status_test.rb +2 -1
- data/test/models/task_definitions_test.rb +7 -6
- data/test/models/tasks_test.rb +5 -4
- data/test/models/team_test.rb +5 -4
- data/test/models/undeployed_commits_test.rb +10 -9
- data/test/models/users_test.rb +29 -20
- data/test/test_command_integration.rb +1 -1
- data/test/test_helper.rb +12 -10
- data/test/unit/anonymous_user_serializer_test.rb +1 -0
- data/test/unit/command_test.rb +10 -1
- data/test/unit/commands_test.rb +1 -0
- data/test/unit/commit_serializer_test.rb +1 -0
- data/test/unit/csv_serializer_test.rb +3 -2
- data/test/unit/deploy_commands_test.rb +33 -23
- data/test/unit/deploy_serializer_test.rb +1 -0
- data/test/unit/environment_variables_test.rb +2 -1
- data/test/unit/github_app_test.rb +11 -10
- data/test/unit/github_apps_test.rb +19 -18
- data/test/unit/github_url_helper_test.rb +1 -0
- data/test/unit/line_buffer_test.rb +1 -1
- data/test/unit/rollback_commands_test.rb +2 -1
- data/test/unit/shipit_helper_test.rb +1 -0
- data/test/unit/shipit_test.rb +47 -1
- data/test/unit/user_serializer_test.rb +1 -0
- data/test/unit/variable_definition_test.rb +4 -3
- metadata +61 -47
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'test_helper'
|
3
4
|
|
4
5
|
module Shipit
|
@@ -33,14 +34,14 @@ module Shipit
|
|
33
34
|
assert_difference -> { @commit.check_runs.count }, +1 do
|
34
35
|
@commit.check_runs.create_or_update_from_github!(
|
35
36
|
@stack.id,
|
36
|
-
github_check_run(conclusion: 'success', completed_at:
|
37
|
+
github_check_run(conclusion: 'success', completed_at:)
|
37
38
|
)
|
38
39
|
end
|
39
40
|
|
40
41
|
assert_enqueued_with(job: RefreshCheckRunsJob) do
|
41
42
|
@commit.check_runs.create_or_update_from_github!(
|
42
43
|
@stack.id,
|
43
|
-
github_check_run(conclusion: nil, completed_at:
|
44
|
+
github_check_run(conclusion: nil, completed_at:)
|
44
45
|
)
|
45
46
|
end
|
46
47
|
|
@@ -50,9 +51,9 @@ module Shipit
|
|
50
51
|
@stack.id,
|
51
52
|
github_check_run(
|
52
53
|
conclusion: 'action_required',
|
53
|
-
completed_at
|
54
|
-
started_at: completed_at + 1.minute
|
55
|
-
)
|
54
|
+
completed_at:,
|
55
|
+
started_at: completed_at + 1.minute
|
56
|
+
)
|
56
57
|
)
|
57
58
|
end
|
58
59
|
|
@@ -62,12 +63,12 @@ module Shipit
|
|
62
63
|
test ".create_or_update_from_github! is idempotent" do
|
63
64
|
completed_at = Time.now
|
64
65
|
assert_difference -> { @commit.check_runs.count }, +1 do
|
65
|
-
@commit.check_runs.create_or_update_from_github!(@stack.id, github_check_run(completed_at:
|
66
|
+
@commit.check_runs.create_or_update_from_github!(@stack.id, github_check_run(completed_at:))
|
66
67
|
end
|
67
68
|
|
68
69
|
assert_no_difference -> { @commit.check_runs.count } do
|
69
70
|
assert_no_enqueued_jobs(only: RefreshCheckRunsJob) do
|
70
|
-
@commit.check_runs.create_or_update_from_github!(@stack.id, github_check_run(completed_at:
|
71
|
+
@commit.check_runs.create_or_update_from_github!(@stack.id, github_check_run(completed_at:))
|
71
72
|
end
|
72
73
|
end
|
73
74
|
end
|
@@ -77,7 +78,7 @@ module Shipit
|
|
77
78
|
assert_difference -> { @commit.check_runs.count }, +1 do
|
78
79
|
@commit.check_runs.create_or_update_from_github!(
|
79
80
|
@stack.id,
|
80
|
-
github_check_run(conclusion: 'success', completed_at:
|
81
|
+
github_check_run(conclusion: 'success', completed_at:)
|
81
82
|
)
|
82
83
|
end
|
83
84
|
|
@@ -109,7 +110,7 @@ module Shipit
|
|
109
110
|
assert_difference -> { @commit.check_runs.count }, +1 do
|
110
111
|
@commit.check_runs.create_or_update_from_github!(
|
111
112
|
@stack.id,
|
112
|
-
github_check_run(conclusion: 'success', completed_at:
|
113
|
+
github_check_run(conclusion: 'success', completed_at:)
|
113
114
|
)
|
114
115
|
end
|
115
116
|
|
@@ -143,10 +144,10 @@ module Shipit
|
|
143
144
|
'neutral' => 'success',
|
144
145
|
'cancelled' => 'failure',
|
145
146
|
'timed_out' => 'error',
|
146
|
-
'action_required' => 'pending'
|
147
|
+
'action_required' => 'pending'
|
147
148
|
}.each do |conclusion, expected_status|
|
148
149
|
test "#state is #{expected_status.inspect} when conclusion is #{conclusion.inspect}" do
|
149
|
-
@check_run.update!(conclusion:
|
150
|
+
@check_run.update!(conclusion:)
|
150
151
|
assert_equal expected_status, @check_run.state
|
151
152
|
end
|
152
153
|
end
|
@@ -156,15 +157,15 @@ module Shipit
|
|
156
157
|
def github_check_run(conclusion: 'success', completed_at: Time.now, started_at: Time.now - 1.minute)
|
157
158
|
OpenStruct.new(
|
158
159
|
id: 424_242,
|
159
|
-
conclusion
|
160
|
+
conclusion:,
|
160
161
|
output: OpenStruct.new(
|
161
|
-
description: 'This is a description'
|
162
|
+
description: 'This is a description'
|
162
163
|
),
|
163
164
|
name: 'Test Suite',
|
164
165
|
html_url: 'http://example.com/run',
|
165
166
|
details_url: 'http://example.com/details',
|
166
|
-
completed_at
|
167
|
-
started_at:
|
167
|
+
completed_at:,
|
168
|
+
started_at:
|
168
169
|
)
|
169
170
|
end
|
170
171
|
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
module Shipit
|
6
|
+
class ContinuousDeliveryScheduleTest < ActiveSupport::TestCase
|
7
|
+
test "defaults to all the time" do
|
8
|
+
stack = shipit_stacks(:shipit)
|
9
|
+
schedule = stack.build_continuous_delivery_schedule
|
10
|
+
|
11
|
+
assert(schedule.valid?)
|
12
|
+
|
13
|
+
Shipit::ContinuousDeliverySchedule::DAYS.each do |day|
|
14
|
+
assert(schedule.read_attribute("#{day}_enabled"))
|
15
|
+
|
16
|
+
day_start = schedule.read_attribute("#{day}_start")
|
17
|
+
assert_equal(day_start.at_beginning_of_day, day_start)
|
18
|
+
|
19
|
+
day_end = schedule.read_attribute("#{day}_end")
|
20
|
+
assert_equal(day_end.at_end_of_day.at_beginning_of_minute, day_end)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
test "#get_deployment_window" do
|
25
|
+
schedule = Shipit::ContinuousDeliverySchedule.new(
|
26
|
+
monday_enabled: false,
|
27
|
+
monday_start: "09:15",
|
28
|
+
monday_end: "17:30"
|
29
|
+
)
|
30
|
+
|
31
|
+
monday = Date.current.monday
|
32
|
+
|
33
|
+
deployment_window = schedule.get_deployment_window(monday)
|
34
|
+
|
35
|
+
refute(deployment_window.enabled?)
|
36
|
+
|
37
|
+
starts_at = deployment_window.starts_at
|
38
|
+
assert_equal(monday, starts_at.to_date)
|
39
|
+
assert_equal(9, starts_at.hour)
|
40
|
+
assert_equal(15, starts_at.min)
|
41
|
+
assert_equal(starts_at.at_beginning_of_minute, starts_at)
|
42
|
+
|
43
|
+
ends_at = deployment_window.ends_at
|
44
|
+
assert_equal(monday, ends_at.to_date)
|
45
|
+
assert_equal(17, ends_at.hour)
|
46
|
+
assert_equal(30, ends_at.min)
|
47
|
+
assert_equal(ends_at.at_end_of_minute, ends_at)
|
48
|
+
end
|
49
|
+
|
50
|
+
test "#can_deploy? is false if the day is disabled" do
|
51
|
+
schedule = Shipit::ContinuousDeliverySchedule.new(
|
52
|
+
tuesday_enabled: false,
|
53
|
+
tuesday_start: "00:00",
|
54
|
+
tuesday_end: "23:59"
|
55
|
+
)
|
56
|
+
|
57
|
+
tuesday = Date.current.monday.advance(days: 1).beginning_of_day
|
58
|
+
|
59
|
+
refute(schedule.can_deploy?(tuesday))
|
60
|
+
end
|
61
|
+
|
62
|
+
test "#can_deploy? is true when the current time is within the window" do
|
63
|
+
schedule = Shipit::ContinuousDeliverySchedule.new(
|
64
|
+
wednesday_enabled: true,
|
65
|
+
wednesday_start: "09:15",
|
66
|
+
wednesday_end: "17:30"
|
67
|
+
)
|
68
|
+
|
69
|
+
wednesday = Date.current.monday.advance(days: 2).beginning_of_day
|
70
|
+
|
71
|
+
refute(schedule.can_deploy?(wednesday))
|
72
|
+
assert(schedule.can_deploy?(wednesday.advance(hours: 9, minutes: 15)))
|
73
|
+
assert(schedule.can_deploy?(wednesday.advance(hours: 12)))
|
74
|
+
assert(schedule.can_deploy?(wednesday.advance(hours: 17, minutes: 30).at_end_of_minute))
|
75
|
+
refute(schedule.can_deploy?(wednesday.advance(hours: 17, minutes: 31)))
|
76
|
+
end
|
77
|
+
|
78
|
+
test "validates that end times must come after start times" do
|
79
|
+
schedule = Shipit::ContinuousDeliverySchedule.new(
|
80
|
+
thursday_start: "15:00",
|
81
|
+
thursday_end: "14:00"
|
82
|
+
)
|
83
|
+
|
84
|
+
schedule.validate
|
85
|
+
assert(schedule.errors.include?(:thursday_end))
|
86
|
+
assert_equal(["must be after start (03:00 PM)"], schedule.errors.messages_for(:thursday_end))
|
87
|
+
end
|
88
|
+
|
89
|
+
test "validates `*_enabled` fields" do
|
90
|
+
schedule = Shipit::ContinuousDeliverySchedule.new(
|
91
|
+
friday_enabled: nil
|
92
|
+
)
|
93
|
+
|
94
|
+
schedule.validate
|
95
|
+
assert_equal(["is not included in the list"], schedule.errors.messages_for(:friday_enabled))
|
96
|
+
end
|
97
|
+
|
98
|
+
test "requires `_start` and `_end` fields" do
|
99
|
+
schedule = Shipit::ContinuousDeliverySchedule.new(
|
100
|
+
saturday_start: nil,
|
101
|
+
saturday_end: nil
|
102
|
+
)
|
103
|
+
|
104
|
+
schedule.validate
|
105
|
+
assert_equal(["can't be blank"], schedule.errors.messages_for(:saturday_start))
|
106
|
+
assert_equal(["can't be blank"], schedule.errors.messages_for(:saturday_end))
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'test_helper'
|
3
4
|
require 'tmpdir'
|
4
5
|
|
@@ -7,8 +8,9 @@ module Shipit
|
|
7
8
|
class FileSystemTest < ActiveSupport::TestCase
|
8
9
|
test 'deploy.pre calls "exit 1" if there is a bare shipit file and Shipit is configured to ignore' do
|
9
10
|
Shipit.expects(:respect_bare_shipit_file?).returns(false).at_least_once
|
10
|
-
|
11
|
-
deploy_spec.
|
11
|
+
stack = shipit_stacks(:shipit)
|
12
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, stack)
|
13
|
+
deploy_spec.expects(:config_file_path).returns("#{Pathname.new(Dir.tmpdir)}/shipit.yml").at_least_once
|
12
14
|
deploy_spec.expects(:read_config).never
|
13
15
|
pre_commands = deploy_spec.send(:config, 'deploy', 'pre')
|
14
16
|
assert pre_commands.include?('exit 1')
|
@@ -18,8 +20,9 @@ module Shipit
|
|
18
20
|
|
19
21
|
test 'deploy.pre does not call "exit 1" if Shipit is not configured to do so' do
|
20
22
|
Shipit.expects(:respect_bare_shipit_file?).returns(true).at_least_once
|
21
|
-
|
22
|
-
deploy_spec.
|
23
|
+
stack = shipit_stacks(:shipit)
|
24
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, stack)
|
25
|
+
deploy_spec.expects(:config_file_path).returns("#{Pathname.new(Dir.tmpdir)}/shipit.yml").at_least_once
|
23
26
|
deploy_spec.expects(:read_config).returns(SafeYAML.load(deploy_spec_yaml))
|
24
27
|
pre_commands = deploy_spec.send(:config, 'deploy', 'pre')
|
25
28
|
refute pre_commands.include?('exit 1')
|
@@ -29,8 +32,9 @@ module Shipit
|
|
29
32
|
test 'Shipit.respect_bare_shipit_file? has no effect if the file is not a bare file' do
|
30
33
|
[true, false].each do |obey_val|
|
31
34
|
Shipit.expects(:respect_bare_shipit_file?).returns(obey_val).at_least_once
|
32
|
-
|
33
|
-
deploy_spec.
|
35
|
+
stack = shipit_stacks(:shipit)
|
36
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, stack)
|
37
|
+
deploy_spec.expects(:config_file_path).returns("#{Pathname.new(Dir.tmpdir)}/shipit.env.yml").at_least_once
|
34
38
|
deploy_spec.expects(:read_config).returns(SafeYAML.load(deploy_spec_yaml))
|
35
39
|
pre_commands = deploy_spec.send(:config, 'deploy', 'pre')
|
36
40
|
refute pre_commands.include?('exit 1')
|
@@ -40,8 +44,9 @@ module Shipit
|
|
40
44
|
|
41
45
|
test '#load_config does not error if the file is empty' do
|
42
46
|
Shipit.expects(:respect_bare_shipit_file?).returns(true).at_least_once
|
43
|
-
|
44
|
-
deploy_spec.
|
47
|
+
stack = shipit_stacks(:shipit)
|
48
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, stack)
|
49
|
+
deploy_spec.expects(:config_file_path).returns("#{Pathname.new(Dir.tmpdir)}/shipit.env.yml").at_least_once
|
45
50
|
deploy_spec.expects(:read_config).at_least_once.returns(false)
|
46
51
|
loaded_config = deploy_spec.send(:cacheable_config)
|
47
52
|
refute loaded_config == false
|
@@ -49,8 +54,9 @@ module Shipit
|
|
49
54
|
|
50
55
|
test '#load_config does not error if there is no "deploy" key' do
|
51
56
|
Shipit.expects(:respect_bare_shipit_file?).returns(false).at_least_once
|
52
|
-
|
53
|
-
deploy_spec.
|
57
|
+
stack = shipit_stacks(:shipit)
|
58
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, stack)
|
59
|
+
deploy_spec.expects(:config_file_path).returns("#{Pathname.new(Dir.tmpdir)}/shipit.yml").at_least_once
|
54
60
|
deploy_spec.expects(:read_config).never
|
55
61
|
loaded_config = deploy_spec.send(:load_config)
|
56
62
|
assert loaded_config.key?("deploy")
|
@@ -58,6 +64,35 @@ module Shipit
|
|
58
64
|
assert loaded_config["deploy"]["pre"].include?('exit 1')
|
59
65
|
end
|
60
66
|
|
67
|
+
test '#load_config builds proper config if inherit_from is present' do
|
68
|
+
Shipit.expects(:respect_bare_shipit_file?).returns(true).at_least_once
|
69
|
+
stack = shipit_stacks(:shipit)
|
70
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, stack)
|
71
|
+
deploy_spec.expects(:config_file_path).returns(Pathname.new("#{Dir.tmpdir}/shipit_1.yml")).at_least_once
|
72
|
+
deploy_spec.expects(:read_config).returns(SafeYAML.load(deploy_spec_inherit_from_yaml), SafeYAML.load(deploy_spec_yaml)).at_least_once
|
73
|
+
Pathname.any_instance.stubs(:exist?).returns(true)
|
74
|
+
loaded_config = deploy_spec.send(:load_config)
|
75
|
+
assert loaded_config.key?("deploy")
|
76
|
+
assert loaded_config["deploy"].key?("pre")
|
77
|
+
assert loaded_config["deploy"]["pre"].include?("test 2")
|
78
|
+
assert loaded_config["deploy"]["override"].include?("test 11")
|
79
|
+
assert_not loaded_config.include?(Shipit::DeploySpec::FileSystem::SHIPIT_CONFIG_INHERIT_FROM_KEY)
|
80
|
+
end
|
81
|
+
|
82
|
+
test '#load_config builds valid config if inherit_from path is missing' do
|
83
|
+
Shipit.expects(:respect_bare_shipit_file?).returns(true).at_least_once
|
84
|
+
stack = shipit_stacks(:shipit)
|
85
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, stack)
|
86
|
+
deploy_spec.expects(:config_file_path).returns(Pathname.new("#{Dir.tmpdir}/shipit_1.yml")).at_least_once
|
87
|
+
deploy_spec.expects(:read_config).returns(SafeYAML.load(deploy_spec_inherit_from_yaml)).at_least_once
|
88
|
+
Pathname.any_instance.stubs(:exist?).returns(false)
|
89
|
+
loaded_config = deploy_spec.send(:load_config)
|
90
|
+
assert loaded_config.key?("deploy")
|
91
|
+
assert_not loaded_config["deploy"].include?("pre")
|
92
|
+
assert loaded_config["deploy"]["override"].include?("test 11")
|
93
|
+
assert_not loaded_config.include?(Shipit::DeploySpec::FileSystem::SHIPIT_CONFIG_INHERIT_FROM_KEY)
|
94
|
+
end
|
95
|
+
|
61
96
|
def deploy_spec_yaml
|
62
97
|
<<~EOYAML
|
63
98
|
deploy:
|
@@ -68,6 +103,15 @@ module Shipit
|
|
68
103
|
EOYAML
|
69
104
|
end
|
70
105
|
|
106
|
+
def deploy_spec_inherit_from_yaml
|
107
|
+
<<~EOYAML
|
108
|
+
inherit_from: shipit.yml
|
109
|
+
deploy:
|
110
|
+
override:
|
111
|
+
- test 11
|
112
|
+
EOYAML
|
113
|
+
end
|
114
|
+
|
71
115
|
def deploy_spec_missing_deploy_yaml
|
72
116
|
<<~EOYAML
|
73
117
|
production_platform:
|
@@ -8,28 +8,28 @@ module Shipit
|
|
8
8
|
github_pull_request = resource(
|
9
9
|
{
|
10
10
|
url: "https://api.github.com/repos/Codertocat/Hello-World/pulls/2",
|
11
|
-
id:
|
11
|
+
id: 279_147_437,
|
12
12
|
number: 2,
|
13
13
|
state: "open",
|
14
14
|
additions: 100,
|
15
15
|
deletions: 101,
|
16
16
|
title: "Update the README with new information.",
|
17
17
|
head: {
|
18
|
-
sha: "ec26c3e57ca3a959ca5aad62de7213c562f8c821"
|
18
|
+
sha: "ec26c3e57ca3a959ca5aad62de7213c562f8c821"
|
19
19
|
},
|
20
20
|
user: {
|
21
|
-
login: "Codertocat"
|
21
|
+
login: "Codertocat"
|
22
22
|
},
|
23
23
|
assignees: [
|
24
24
|
{
|
25
|
-
login: "bob"
|
26
|
-
}
|
25
|
+
login: "bob"
|
26
|
+
}
|
27
27
|
],
|
28
28
|
labels: [
|
29
29
|
{
|
30
|
-
name: "deploy"
|
31
|
-
}
|
32
|
-
]
|
30
|
+
name: "deploy"
|
31
|
+
}
|
32
|
+
]
|
33
33
|
}
|
34
34
|
)
|
35
35
|
stack = shipit_stacks(:review_stack)
|
@@ -37,7 +37,7 @@ module Shipit
|
|
37
37
|
|
38
38
|
stack.pull_request.github_pull_request = github_pull_request
|
39
39
|
|
40
|
-
assert_equal
|
40
|
+
assert_equal 279_147_437, pull_request.github_id
|
41
41
|
assert_equal 2, pull_request.number
|
42
42
|
assert_equal "https://api.github.com/repos/Codertocat/Hello-World/pulls/2", pull_request.api_url
|
43
43
|
assert_equal "Update the README with new information.", pull_request.title
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'test_helper'
|
3
4
|
|
4
5
|
module Shipit
|
@@ -23,7 +24,7 @@ module Shipit
|
|
23
24
|
error = assert_raises(ActiveRecord::RecordInvalid) do
|
24
25
|
Repository.create!(
|
25
26
|
owner: @repository.owner.upcase,
|
26
|
-
name: @repository.name.upcase
|
27
|
+
name: @repository.name.upcase
|
27
28
|
)
|
28
29
|
end
|
29
30
|
assert_equal 'Validation failed: Name cannot be used more than once', error.message
|
@@ -71,7 +72,7 @@ module Shipit
|
|
71
72
|
owner = "repository-owner"
|
72
73
|
name = "repository-name"
|
73
74
|
github_repo_name = [owner, name].join("/")
|
74
|
-
expected_repository = Repository.create(owner
|
75
|
+
expected_repository = Repository.create(owner:, name:)
|
75
76
|
|
76
77
|
found_repository = Repository.from_github_repo_name(github_repo_name)
|
77
78
|
|
@@ -39,7 +39,7 @@ module Shipit
|
|
39
39
|
def setup_provisioning_handler(for_stack:, provision:)
|
40
40
|
provisioning_handler_instance = mock("ProvisioningHandler instance")
|
41
41
|
provisioning_handler_instance.expects(:provision?).returns(provision)
|
42
|
-
provisioning_handler_instance.expects(:up).returns(true) if
|
42
|
+
provisioning_handler_instance.expects(:up).returns(true) if provision
|
43
43
|
provisioning_handler_class = mock("ProvisioningHandler class")
|
44
44
|
provisioning_handler_class.expects(:new).at_least_once.with(for_stack).returns(provisioning_handler_instance)
|
45
45
|
Shipit::ProvisioningHandler.expects(:fetch).at_least_once.returns(provisioning_handler_class)
|
@@ -50,7 +50,7 @@ module Shipit
|
|
50
50
|
def provisionable_review_stack
|
51
51
|
review_stack = shipit_stacks(:review_stack)
|
52
52
|
review_stack.update(
|
53
|
-
provision_status: :deprovisioned
|
53
|
+
provision_status: :deprovisioned
|
54
54
|
)
|
55
55
|
|
56
56
|
review_stack
|
@@ -1,9 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'test_helper'
|
3
4
|
require 'securerandom'
|
4
5
|
|
5
6
|
module Shipit
|
6
|
-
class
|
7
|
+
class StackTest < ActiveSupport::TestCase
|
7
8
|
def setup
|
8
9
|
@stack = shipit_stacks(:shipit)
|
9
10
|
@expected_base_path = Rails.root.join('data', 'stacks', @stack.to_param).to_s
|
@@ -82,10 +83,10 @@ module Shipit
|
|
82
83
|
last_commit = shipit_commits(:third)
|
83
84
|
deploy = @stack.trigger_deploy(last_commit, AnonymousUser.new)
|
84
85
|
assert_includes(FakeReceiver.hooks, [
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
86
|
+
:deploy,
|
87
|
+
@stack,
|
88
|
+
{ deploy:, status: "pending", stack: @stack }
|
89
|
+
])
|
89
90
|
ensure
|
90
91
|
Shipit.internal_hook_receivers = original_receivers
|
91
92
|
end
|
@@ -262,7 +263,7 @@ module Shipit
|
|
262
263
|
stack = Stack.create!(
|
263
264
|
repository: Repository.new(owner: "foo", name: "bar"),
|
264
265
|
environment: 'production',
|
265
|
-
branch: 'main'
|
266
|
+
branch: 'main'
|
266
267
|
)
|
267
268
|
commit = shipit_commits(:first)
|
268
269
|
stack.commits << commit
|
@@ -704,12 +705,12 @@ module Shipit
|
|
704
705
|
assert_equal shipit_commits(:fifth), @stack.next_commit_to_deploy
|
705
706
|
end
|
706
707
|
|
707
|
-
test "#next_commit_to_deploy respects the deploy.max_commits directive" do
|
708
|
+
test "#next_commit_to_deploy respects the deploy.max_commits directive given the commit is deployable" do
|
708
709
|
@stack.tasks.destroy_all
|
709
710
|
|
710
|
-
|
711
|
-
|
712
|
-
assert_predicate
|
711
|
+
third_commit = shipit_commits(:third)
|
712
|
+
third_commit.statuses.create!(stack_id: @stack.id, state: 'success', context: 'ci/travis')
|
713
|
+
assert_predicate third_commit, :deployable?
|
713
714
|
|
714
715
|
assert_equal shipit_commits(:third), @stack.next_commit_to_deploy
|
715
716
|
|
@@ -717,6 +718,19 @@ module Shipit
|
|
717
718
|
assert_equal shipit_commits(:third), @stack.next_commit_to_deploy
|
718
719
|
end
|
719
720
|
|
721
|
+
test "#next_commit_to_deploy deploys the first deployable commit when deploy.max_commits directive fails to find a deployable commit" do
|
722
|
+
@stack.tasks.destroy_all
|
723
|
+
|
724
|
+
third_commit = shipit_commits(:third)
|
725
|
+
third_commit.statuses.create!(stack_id: @stack.id, state: 'success', context: 'ci/travis')
|
726
|
+
assert_predicate third_commit, :deployable?
|
727
|
+
|
728
|
+
assert_equal shipit_commits(:third), @stack.next_commit_to_deploy
|
729
|
+
|
730
|
+
@stack.expects(:maximum_commits_per_deploy).returns(1).at_least_once
|
731
|
+
assert_equal shipit_commits(:third), @stack.next_commit_to_deploy
|
732
|
+
end
|
733
|
+
|
720
734
|
test "setting #lock_reason also sets #locked_since" do
|
721
735
|
assert_predicate @stack.locked_since, :nil?
|
722
736
|
|
@@ -802,7 +816,7 @@ module Shipit
|
|
802
816
|
assert !commits.empty?
|
803
817
|
commits.each { |c| refute_predicate c, :deployable? }
|
804
818
|
|
805
|
-
assert_nil @stack.next_expected_commit_to_deploy(commits:
|
819
|
+
assert_nil @stack.next_expected_commit_to_deploy(commits:)
|
806
820
|
end
|
807
821
|
|
808
822
|
test "#next_expected_commit_to_deploy returns nil if all deployable commits are active" do
|
@@ -812,7 +826,7 @@ module Shipit
|
|
812
826
|
assert !commits.empty?
|
813
827
|
commits.each { |c| assert_predicate c, :active? }
|
814
828
|
|
815
|
-
assert_nil @stack.next_expected_commit_to_deploy(commits:
|
829
|
+
assert_nil @stack.next_expected_commit_to_deploy(commits:)
|
816
830
|
end
|
817
831
|
|
818
832
|
test "#next_expected_commit_to_deploy returns nil if there are no commits" do
|
@@ -825,7 +839,7 @@ module Shipit
|
|
825
839
|
|
826
840
|
assert !commits.empty?
|
827
841
|
|
828
|
-
most_recent_limited = @stack.next_expected_commit_to_deploy(commits:
|
842
|
+
most_recent_limited = @stack.next_expected_commit_to_deploy(commits:)
|
829
843
|
most_recent = commits.find { |c| !c.active? && c.deployable? }
|
830
844
|
|
831
845
|
assert most_recent.id > most_recent_limited.id
|
@@ -844,16 +858,16 @@ module Shipit
|
|
844
858
|
test "#lock_reverted_commits! locks all commits between the original and reverted commits" do
|
845
859
|
reverted_commit = @stack.undeployed_commits.first
|
846
860
|
revert_author = shipit_users(:bob)
|
847
|
-
generate_revert_commit(stack: @stack, reverted_commit
|
861
|
+
generate_revert_commit(stack: @stack, reverted_commit:, author: revert_author)
|
848
862
|
@stack.reload
|
849
863
|
|
850
864
|
assert_equal(
|
851
865
|
[
|
852
866
|
['Revert "whoami"', false, nil],
|
853
867
|
["whoami", false, nil],
|
854
|
-
["fix all the things", false, nil]
|
868
|
+
["fix all the things", false, nil]
|
855
869
|
],
|
856
|
-
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
870
|
+
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
857
871
|
)
|
858
872
|
|
859
873
|
@stack.lock_reverted_commits!
|
@@ -863,27 +877,27 @@ module Shipit
|
|
863
877
|
[
|
864
878
|
['Revert "whoami"', false, nil],
|
865
879
|
["whoami", true, revert_author.id],
|
866
|
-
["fix all the things", false, nil]
|
880
|
+
["fix all the things", false, nil]
|
867
881
|
],
|
868
|
-
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
882
|
+
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
869
883
|
)
|
870
884
|
end
|
871
885
|
|
872
886
|
test "#lock_reverted_commits! is a no-op if the reverted commit has already shipped" do
|
873
887
|
reverted_commit = shipit_commits(:first)
|
874
888
|
revert_author = shipit_users(:bob)
|
875
|
-
generate_revert_commit(stack: @stack, reverted_commit
|
889
|
+
generate_revert_commit(stack: @stack, reverted_commit:, author: revert_author)
|
876
890
|
@stack.reload
|
877
891
|
|
878
892
|
initial_state = [
|
879
893
|
['Revert "lets go"', false, nil],
|
880
894
|
["whoami", false, nil],
|
881
|
-
["fix all the things", false, nil]
|
895
|
+
["fix all the things", false, nil]
|
882
896
|
]
|
883
897
|
|
884
898
|
assert_equal(
|
885
899
|
initial_state,
|
886
|
-
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
900
|
+
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
887
901
|
)
|
888
902
|
|
889
903
|
@stack.lock_reverted_commits!
|
@@ -891,7 +905,7 @@ module Shipit
|
|
891
905
|
|
892
906
|
assert_equal(
|
893
907
|
initial_state,
|
894
|
-
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
908
|
+
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
895
909
|
)
|
896
910
|
end
|
897
911
|
|
@@ -909,9 +923,9 @@ module Shipit
|
|
909
923
|
['Revert "whoami"', false, nil],
|
910
924
|
['Revert "fix all the things"', false, nil],
|
911
925
|
["whoami", false, nil],
|
912
|
-
["fix all the things", false, nil]
|
926
|
+
["fix all the things", false, nil]
|
913
927
|
],
|
914
|
-
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
928
|
+
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
915
929
|
)
|
916
930
|
|
917
931
|
@stack.lock_reverted_commits!
|
@@ -922,9 +936,9 @@ module Shipit
|
|
922
936
|
['Revert "whoami"', false, nil],
|
923
937
|
['Revert "fix all the things"', true, second_revert_author.id],
|
924
938
|
["whoami", true, first_revert_author.id],
|
925
|
-
["fix all the things", true, first_revert_author.id]
|
939
|
+
["fix all the things", true, first_revert_author.id]
|
926
940
|
],
|
927
|
-
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
941
|
+
@stack.undeployed_commits.map { |c| [c.message, c.locked, c.lock_author_id] }
|
928
942
|
)
|
929
943
|
end
|
930
944
|
|
@@ -949,16 +963,16 @@ module Shipit
|
|
949
963
|
@stack.cached_deploy_spec = create_deploy_spec(
|
950
964
|
"links" => {
|
951
965
|
"logs" => "http://logs.$GITHUB_REPO_NAME.$ENVIRONMENT.domain.com",
|
952
|
-
"monitoring" => "https://graphs.$GITHUB_REPO_NAME.$ENVIRONMENT.domain.com"
|
953
|
-
}
|
966
|
+
"monitoring" => "https://graphs.$GITHUB_REPO_NAME.$ENVIRONMENT.domain.com"
|
967
|
+
}
|
954
968
|
)
|
955
969
|
|
956
970
|
assert_equal(
|
957
971
|
{
|
958
972
|
"logs" => "http://logs.expected-repository-name.expected-environment.domain.com",
|
959
|
-
"monitoring" => "https://graphs.expected-repository-name.expected-environment.domain.com"
|
973
|
+
"monitoring" => "https://graphs.expected-repository-name.expected-environment.domain.com"
|
960
974
|
},
|
961
|
-
@stack.links
|
975
|
+
@stack.links
|
962
976
|
)
|
963
977
|
end
|
964
978
|
|
@@ -969,12 +983,12 @@ module Shipit
|
|
969
983
|
'GITHUB_REPO_OWNER' => @stack.repository.owner,
|
970
984
|
'GITHUB_REPO_NAME' => @stack.repository.name,
|
971
985
|
'DEPLOY_URL' => @stack.deploy_url,
|
972
|
-
'BRANCH' => @stack.branch
|
986
|
+
'BRANCH' => @stack.branch
|
973
987
|
}
|
974
988
|
|
975
989
|
assert_equal(
|
976
990
|
@stack.env,
|
977
|
-
expected_environment
|
991
|
+
expected_environment
|
978
992
|
)
|
979
993
|
end
|
980
994
|
|
@@ -1000,10 +1014,10 @@ module Shipit
|
|
1000
1014
|
stack.commits.create(
|
1001
1015
|
sha: SecureRandom.hex(20),
|
1002
1016
|
message: "Revert \"#{reverted_commit.message_header}\"",
|
1003
|
-
author
|
1017
|
+
author:,
|
1004
1018
|
committer: author,
|
1005
1019
|
authored_at: Time.zone.now,
|
1006
|
-
committed_at: Time.zone.now
|
1020
|
+
committed_at: Time.zone.now
|
1007
1021
|
)
|
1008
1022
|
end
|
1009
1023
|
|