shipit-engine 0.39.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 +40 -1
- 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 +10 -8
- 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 +2 -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 +4 -2
- 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 -2
- 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 +4 -3
- 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 +35 -16
- 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 +8 -6
- 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 +1 -1
- 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 +59 -56
- 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 +33 -28
- 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 +21 -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/ccmenu/project.xml.builder +2 -1
- data/app/views/shipit/continuous_delivery_schedules/show.html.erb +59 -0
- 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/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 +5 -4
- 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 -15
- 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 +1 -0
- 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 +34 -26
- 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 +29 -16
- 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 +2 -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 +7 -5
- data/test/controllers/status_controller_test.rb +1 -0
- data/test/controllers/tasks_controller_test.rb +5 -4
- data/test/controllers/webhooks_controller_test.rb +10 -9
- data/test/dummy/config/application.rb +1 -1
- 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 -1
- 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 +23 -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/stack_test.rb +30 -29
- 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 +21 -20
- data/test/test_command_integration.rb +1 -1
- data/test/test_helper.rb +11 -9
- 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 +10 -9
- 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 +53 -43
@@ -1,10 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'test_helper'
|
3
4
|
|
4
5
|
module Shipit
|
5
6
|
class RollbacksControllerTest < ActionController::TestCase
|
6
7
|
setup do
|
7
|
-
Deploy.where(status: %w
|
8
|
+
Deploy.where(status: %w[running pending]).update_all(status: 'success')
|
8
9
|
@stack = shipit_stacks(:shipit)
|
9
10
|
@deploy = shipit_deploys(:shipit)
|
10
11
|
session[:user_id] = shipit_users(:walrus).id
|
@@ -18,7 +19,7 @@ module Shipit
|
|
18
19
|
|
19
20
|
test ":create can receive an :env hash" do
|
20
21
|
env = { 'SAFETY_DISABLED' => '1' }
|
21
|
-
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id, env:
|
22
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id, env: } }
|
22
23
|
new_rollback = Rollback.last
|
23
24
|
assert_equal env, new_rollback.env
|
24
25
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'test_helper'
|
3
4
|
|
4
5
|
module Shipit
|
@@ -54,7 +55,7 @@ module Shipit
|
|
54
55
|
assert_response :forbidden
|
55
56
|
assert_equal(
|
56
57
|
'You must be a member of cyclimse/cooks or shopify/developers to access this application.',
|
57
|
-
response.body
|
58
|
+
response.body
|
58
59
|
)
|
59
60
|
end
|
60
61
|
|
@@ -98,6 +99,7 @@ module Shipit
|
|
98
99
|
test "#show handles locked stacks without a lock_author" do
|
99
100
|
@stack.update!(lock_reason: "I am a lock with no author")
|
100
101
|
get :show, params: { id: @stack.to_param }
|
102
|
+
assert_response :ok
|
101
103
|
end
|
102
104
|
|
103
105
|
test "#show auto-links URLs in lock reason" do
|
@@ -114,8 +116,8 @@ module Shipit
|
|
114
116
|
repo_name: 'rails',
|
115
117
|
repo_owner: 'rails',
|
116
118
|
environment: 'staging',
|
117
|
-
branch: 'staging'
|
118
|
-
}
|
119
|
+
branch: 'staging'
|
120
|
+
}
|
119
121
|
}
|
120
122
|
end
|
121
123
|
|
@@ -240,8 +242,8 @@ module Shipit
|
|
240
242
|
repo_owner: 'rails',
|
241
243
|
environment: 'staging',
|
242
244
|
branch: 'staging',
|
243
|
-
deploy_url: 'Javascript:alert(1);'
|
244
|
-
}
|
245
|
+
deploy_url: 'Javascript:alert(1);'
|
246
|
+
}
|
245
247
|
}
|
246
248
|
assert_response :success
|
247
249
|
assert_equal 'Deploy url is invalid', flash[:warning]
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'test_helper'
|
3
4
|
|
4
5
|
module Shipit
|
@@ -54,7 +55,7 @@ module Shipit
|
|
54
55
|
test "tasks with variables defined in the shipit.yml can be triggered with their variables set" do
|
55
56
|
env = { "FOO" => "0" }
|
56
57
|
|
57
|
-
post :create, params: { stack_id: @stack, definition_id: @definition.id, task: { env:
|
58
|
+
post :create, params: { stack_id: @stack, definition_id: @definition.id, task: { env: }, force: 'true' }
|
58
59
|
|
59
60
|
assert_redirected_to stack_tasks_path(@stack, Task.last)
|
60
61
|
end
|
@@ -113,7 +114,7 @@ module Shipit
|
|
113
114
|
|
114
115
|
get :tail, params: { stack_id: @stack.to_param, id: @task.id }, format: :json
|
115
116
|
assert_response :success
|
116
|
-
assert_json_keys %w
|
117
|
+
assert_json_keys %w[url status output]
|
117
118
|
assert_json 'status', @task.status
|
118
119
|
assert_json 'output', @task.chunk_output
|
119
120
|
assert_json 'url', "/shopify/shipit-engine/production/tasks/#{@task.id}/tail?last_byte=#{last_chunk}"
|
@@ -125,7 +126,7 @@ module Shipit
|
|
125
126
|
|
126
127
|
get :tail, params: { stack_id: @stack.to_param, id: @task.id, last_byte: "50" }, format: :json
|
127
128
|
assert_response :success
|
128
|
-
assert_json_keys %w
|
129
|
+
assert_json_keys %w[url status output]
|
129
130
|
end
|
130
131
|
|
131
132
|
test ":tail doesn't returns the next url if the task is finished" do
|
@@ -141,7 +142,7 @@ module Shipit
|
|
141
142
|
|
142
143
|
get :tail, params: { stack_id: @stack.to_param, id: @task.id }, format: :json
|
143
144
|
assert_response :success
|
144
|
-
assert_json_keys %w
|
145
|
+
assert_json_keys %w[status output rollback_url]
|
145
146
|
end
|
146
147
|
|
147
148
|
test ":lookup returns stack task url if the task is an instance of Task" do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'test_helper'
|
3
4
|
|
4
5
|
module Shipit
|
@@ -24,7 +25,7 @@ module Shipit
|
|
24
25
|
|
25
26
|
body = JSON.parse(payload(:push_master)).to_json
|
26
27
|
assert_enqueued_with(job: GithubSyncJob, args: [stack_id: @stack.id]) do
|
27
|
-
post :create, body
|
28
|
+
post :create, body:, as: :json
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
@@ -43,7 +44,7 @@ module Shipit
|
|
43
44
|
|
44
45
|
body = JSON.parse(payload(:status_master)).merge(repository_params).to_json
|
45
46
|
assert_difference 'commit.statuses.count', 1 do
|
46
|
-
post :create, body
|
47
|
+
post :create, body:, as: :json
|
47
48
|
end
|
48
49
|
|
49
50
|
status = commit.statuses.last
|
@@ -74,7 +75,7 @@ module Shipit
|
|
74
75
|
|
75
76
|
body = JSON.parse(payload(:check_suite_master)).to_json
|
76
77
|
assert_enqueued_with(job: RefreshCheckRunsJob) do
|
77
|
-
post :create, body
|
78
|
+
post :create, body:, as: :json
|
78
79
|
assert_response :ok
|
79
80
|
end
|
80
81
|
end
|
@@ -107,11 +108,11 @@ module Shipit
|
|
107
108
|
@request.headers['X-Github-Event'] = 'membership'
|
108
109
|
assert_difference -> { Team.count }, 1 do
|
109
110
|
post :create, as: :json, body: membership_params.merge(team: {
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
111
|
+
id: 48,
|
112
|
+
name: 'Ouiche Cooks',
|
113
|
+
slug: 'ouiche-cooks',
|
114
|
+
url: 'https://example.com'
|
115
|
+
}).to_json
|
115
116
|
assert_response :ok
|
116
117
|
end
|
117
118
|
end
|
@@ -201,7 +202,7 @@ module Shipit
|
|
201
202
|
login: 'george',
|
202
203
|
email: 'george@cyclim.se',
|
203
204
|
avatar_url: 'https://avatars.githubusercontent.com/u/42?v=3',
|
204
|
-
url: 'https://api.github.com/user/george'
|
205
|
+
url: 'https://api.github.com/user/george'
|
205
206
|
)
|
206
207
|
end
|
207
208
|
end
|
data/test/dummy/db/schema.rb
CHANGED
@@ -10,8 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
14
|
-
|
13
|
+
ActiveRecord::Schema[7.2].define(version: 2025_02_07_203053) do
|
15
14
|
create_table "api_clients", force: :cascade do |t|
|
16
15
|
t.text "permissions", limit: 65535
|
17
16
|
t.integer "creator_id", limit: 4
|
@@ -52,7 +51,7 @@ ActiveRecord::Schema.define(version: 2023_07_03_181143) do
|
|
52
51
|
create_table "commit_deployments", force: :cascade do |t|
|
53
52
|
t.integer "commit_id"
|
54
53
|
t.integer "task_id"
|
55
|
-
t.
|
54
|
+
t.bigint "github_id"
|
56
55
|
t.string "api_url"
|
57
56
|
t.datetime "created_at", null: false
|
58
57
|
t.datetime "updated_at", null: false
|
@@ -87,6 +86,34 @@ ActiveRecord::Schema.define(version: 2023_07_03_181143) do
|
|
87
86
|
t.index ["stack_id"], name: "index_commits_on_stack_id"
|
88
87
|
end
|
89
88
|
|
89
|
+
create_table "continuous_delivery_schedules", force: :cascade do |t|
|
90
|
+
t.integer "stack_id", null: false
|
91
|
+
t.boolean "sunday_enabled", default: true, null: false
|
92
|
+
t.time "sunday_start", default: "2000-01-01 00:00:00", null: false
|
93
|
+
t.time "sunday_end", default: "2000-01-01 23:59:00", null: false
|
94
|
+
t.boolean "monday_enabled", default: true, null: false
|
95
|
+
t.time "monday_start", default: "2000-01-01 00:00:00", null: false
|
96
|
+
t.time "monday_end", default: "2000-01-01 23:59:00", null: false
|
97
|
+
t.boolean "tuesday_enabled", default: true, null: false
|
98
|
+
t.time "tuesday_start", default: "2000-01-01 00:00:00", null: false
|
99
|
+
t.time "tuesday_end", default: "2000-01-01 23:59:00", null: false
|
100
|
+
t.boolean "wednesday_enabled", default: true, null: false
|
101
|
+
t.time "wednesday_start", default: "2000-01-01 00:00:00", null: false
|
102
|
+
t.time "wednesday_end", default: "2000-01-01 23:59:00", null: false
|
103
|
+
t.boolean "thursday_enabled", default: true, null: false
|
104
|
+
t.time "thursday_start", default: "2000-01-01 00:00:00", null: false
|
105
|
+
t.time "thursday_end", default: "2000-01-01 23:59:00", null: false
|
106
|
+
t.boolean "friday_enabled", default: true, null: false
|
107
|
+
t.time "friday_start", default: "2000-01-01 00:00:00", null: false
|
108
|
+
t.time "friday_end", default: "2000-01-01 23:59:00", null: false
|
109
|
+
t.boolean "saturday_enabled", default: true, null: false
|
110
|
+
t.time "saturday_start", default: "2000-01-01 00:00:00", null: false
|
111
|
+
t.time "saturday_end", default: "2000-01-01 23:59:00", null: false
|
112
|
+
t.datetime "created_at", null: false
|
113
|
+
t.datetime "updated_at", null: false
|
114
|
+
t.index ["stack_id"], name: "index_continuous_delivery_schedules_on_stack_id", unique: true
|
115
|
+
end
|
116
|
+
|
90
117
|
create_table "deliveries", force: :cascade do |t|
|
91
118
|
t.integer "hook_id", limit: 4, null: false
|
92
119
|
t.string "status", limit: 50, default: "pending", null: false
|
@@ -106,7 +133,7 @@ ActiveRecord::Schema.define(version: 2023_07_03_181143) do
|
|
106
133
|
|
107
134
|
create_table "github_hooks", force: :cascade do |t|
|
108
135
|
t.integer "stack_id", limit: 4
|
109
|
-
t.
|
136
|
+
t.bigint "github_id"
|
110
137
|
t.string "event", limit: 50, null: false
|
111
138
|
t.datetime "created_at"
|
112
139
|
t.datetime "updated_at"
|
@@ -313,7 +340,7 @@ ActiveRecord::Schema.define(version: 2023_07_03_181143) do
|
|
313
340
|
end
|
314
341
|
|
315
342
|
create_table "teams", force: :cascade do |t|
|
316
|
-
t.
|
343
|
+
t.bigint "github_id"
|
317
344
|
t.string "api_url", limit: 255
|
318
345
|
t.string "slug", limit: 255
|
319
346
|
t.string "name", limit: 255
|
@@ -324,7 +351,7 @@ ActiveRecord::Schema.define(version: 2023_07_03_181143) do
|
|
324
351
|
end
|
325
352
|
|
326
353
|
create_table "users", force: :cascade do |t|
|
327
|
-
t.
|
354
|
+
t.bigint "github_id"
|
328
355
|
t.string "name", limit: 255, null: false
|
329
356
|
t.string "email", limit: 255
|
330
357
|
t.string "login", limit: 39
|
@@ -258,7 +258,7 @@ canaries_fifth:
|
|
258
258
|
updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
|
259
259
|
created_at: <%= 1.day.ago.to_formatted_s(:db) %>
|
260
260
|
|
261
|
-
|
261
|
+
undeployed1:
|
262
262
|
id: 401
|
263
263
|
sha: 4d9278037b872fd9a6690523e411ecb3aa181355
|
264
264
|
message: "lets go"
|
@@ -271,7 +271,7 @@ undeployed_1:
|
|
271
271
|
deletions: 24
|
272
272
|
updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
|
273
273
|
|
274
|
-
|
274
|
+
undeployed2:
|
275
275
|
id: 402
|
276
276
|
sha: 4890fd8b5f2be05d1fedb763a3605ee461c39074
|
277
277
|
message: "sheep it!"
|
@@ -284,7 +284,7 @@ undeployed_2:
|
|
284
284
|
deletions: 1
|
285
285
|
updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
|
286
286
|
|
287
|
-
|
287
|
+
undeployed3:
|
288
288
|
id: 403
|
289
289
|
sha: 467578b362bf2b4df5903e1c7960929361c39074
|
290
290
|
message: "fix it!"
|
@@ -297,7 +297,7 @@ undeployed_3:
|
|
297
297
|
deletions: 64
|
298
298
|
updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
|
299
299
|
|
300
|
-
|
300
|
+
undeployed4:
|
301
301
|
id: 404
|
302
302
|
sha: 447578b362bf2b4df5903e1c7960929361c3435a
|
303
303
|
message: "Merge pull request #7 from shipit-engine/yoloshipit\n\nyoloshipit!"
|
@@ -310,7 +310,7 @@ undeployed_4:
|
|
310
310
|
deletions: 342
|
311
311
|
updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
|
312
312
|
|
313
|
-
|
313
|
+
undeployed5:
|
314
314
|
id: 405
|
315
315
|
sha: 457578b362bf2b4df5903e1c7960929361c3435a
|
316
316
|
message: "Merge pull request #7 from shipit-engine/yoloshipit\n\nyoloshipit!"
|
@@ -323,7 +323,7 @@ undeployed_5:
|
|
323
323
|
deletions: 342
|
324
324
|
updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
|
325
325
|
|
326
|
-
|
326
|
+
undeployed6:
|
327
327
|
id: 406
|
328
328
|
sha: 467578b362bf2b4df5903e1c7960929361c3435a
|
329
329
|
message: "Merge pull request #7 from shipit-engine/yoloshipit\n\nyoloshipit!"
|
@@ -336,7 +336,7 @@ undeployed_6:
|
|
336
336
|
deletions: 342
|
337
337
|
updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
|
338
338
|
|
339
|
-
|
339
|
+
undeployed7:
|
340
340
|
id: 407
|
341
341
|
sha: 477578b362bf2b4df5903e1c7960929361c3435a
|
342
342
|
message: "Merge pull request #7 from shipit-engine/yoloshipit\n\nyoloshipit!"
|
@@ -10,8 +10,7 @@ shipit:
|
|
10
10
|
cached_deploy_spec: |-
|
11
11
|
{
|
12
12
|
"machine": {
|
13
|
-
"environment": {
|
14
|
-
}
|
13
|
+
"environment": {}
|
15
14
|
},
|
16
15
|
"review": {
|
17
16
|
"checklist": [
|
@@ -28,9 +27,7 @@ shipit:
|
|
28
27
|
]
|
29
28
|
},
|
30
29
|
"dependencies": {
|
31
|
-
"override": [
|
32
|
-
|
33
|
-
]
|
30
|
+
"override": []
|
34
31
|
},
|
35
32
|
"deploy": {
|
36
33
|
"override": null,
|
@@ -494,8 +491,7 @@ review_stack:
|
|
494
491
|
cached_deploy_spec: |-
|
495
492
|
{
|
496
493
|
"machine": {
|
497
|
-
"environment": {
|
498
|
-
}
|
494
|
+
"environment": {}
|
499
495
|
},
|
500
496
|
"review": {
|
501
497
|
"checklist": [
|
@@ -512,9 +508,7 @@ review_stack:
|
|
512
508
|
]
|
513
509
|
},
|
514
510
|
"dependencies": {
|
515
|
-
"override": [
|
516
|
-
|
517
|
-
]
|
511
|
+
"override": []
|
518
512
|
},
|
519
513
|
"deploy": {
|
520
514
|
"override": null,
|
@@ -223,7 +223,7 @@ shipit_with_title_parsing_issue:
|
|
223
223
|
{
|
224
224
|
"id": "bad-title",
|
225
225
|
"action": "Task with bad title",
|
226
|
-
"title": "Using the
|
226
|
+
"title": "Using the %<WRONG_VARIABLE_NAME>",
|
227
227
|
"description": "This task uses the wrong variable name",
|
228
228
|
"variables": [
|
229
229
|
{"name": "VARIABLE_NAME", "title": "Any old variable"}
|
@@ -238,7 +238,7 @@ shipit_with_title_parsing_issue:
|
|
238
238
|
started_at: <%= (60 - 3).minutes.ago.to_formatted_s(:db) %>
|
239
239
|
ended_at: <%= (60 - 4).minutes.ago.to_formatted_s(:db) %>
|
240
240
|
|
241
|
-
|
241
|
+
shipit_undeployed1:
|
242
242
|
id: 201
|
243
243
|
user: walrus
|
244
244
|
since_commit_id: 401
|
@@ -252,7 +252,7 @@ shipit_undeployed_1:
|
|
252
252
|
started_at: <%= (60 - 1).minutes.ago.to_formatted_s(:db) %>
|
253
253
|
ended_at: <%= (60 - 3).minutes.ago.to_formatted_s(:db) %>
|
254
254
|
|
255
|
-
|
255
|
+
shipit_undeployed2:
|
256
256
|
id: 202
|
257
257
|
user: walrus
|
258
258
|
since_commit_id: 402
|
data/test/helpers/api_helper.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module ApiHelper
|
3
4
|
private
|
4
5
|
|
@@ -14,9 +15,7 @@ module Shipit
|
|
14
15
|
private
|
15
16
|
|
16
17
|
def process(_action, **kwargs)
|
17
|
-
if kwargs[:method] != "GET"
|
18
|
-
kwargs[:as] ||= :json
|
19
|
-
end
|
18
|
+
kwargs[:as] ||= :json if kwargs[:method] != "GET"
|
20
19
|
super
|
21
20
|
end
|
22
21
|
end
|
data/test/helpers/json_helper.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module JSONHelper
|
3
4
|
UNDEFINED = Object.new.freeze
|
4
5
|
private_constant :UNDEFINED
|
@@ -8,7 +9,7 @@ module JSONHelper
|
|
8
9
|
end
|
9
10
|
|
10
11
|
def assert_json_document(document, path, expected_value = UNDEFINED)
|
11
|
-
value = follow_path(path.to_s.split('.'), document:
|
12
|
+
value = follow_path(path.to_s.split('.'), document:)
|
12
13
|
if block_given?
|
13
14
|
yield value
|
14
15
|
elsif expected_value == UNDEFINED
|
@@ -26,7 +27,7 @@ module JSONHelper
|
|
26
27
|
path = nil
|
27
28
|
end
|
28
29
|
|
29
|
-
value = follow_path(path.to_s.split('.'), document:
|
30
|
+
value = follow_path(path.to_s.split('.'), document:)
|
30
31
|
case value
|
31
32
|
when Hash
|
32
33
|
assert_equal(keys.sort, value.keys.sort)
|
@@ -38,7 +39,7 @@ module JSONHelper
|
|
38
39
|
def assert_no_json(path, document: response.body)
|
39
40
|
segments = path.to_s.split('.')
|
40
41
|
last_segment = segments.pop
|
41
|
-
leaf = follow_path(segments, document:
|
42
|
+
leaf = follow_path(segments, document:)
|
42
43
|
case leaf
|
43
44
|
when Hash
|
44
45
|
refute(leaf.key?(last_segment), "Expected #{leaf.inspect} not to include #{last_segment.inspect}")
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module QueriesHelper
|
3
4
|
def assert_no_queries(ignored_sql = nil, &block)
|
4
5
|
assert_queries(0, ignored_sql, &block)
|
@@ -31,15 +32,14 @@ module QueriesHelper
|
|
31
32
|
/^BEGIN/,
|
32
33
|
/^COMMIT/,
|
33
34
|
/^SHOW FULL FIELDS/,
|
34
|
-
/^SHOW TABLES LIKE
|
35
|
+
/^SHOW TABLES LIKE/
|
35
36
|
]
|
36
37
|
|
37
38
|
# FIXME: this needs to be refactored so specific database can add their own
|
38
39
|
# ignored SQL. This ignored SQL is for Oracle.
|
39
40
|
ignored_sql.concat([/^select .*nextval/i, /^SAVEPOINT/, /^ROLLBACK TO/, /^\s*select .* from all_triggers/im])
|
40
41
|
|
41
|
-
attr_reader :ignore
|
42
|
-
attr_reader :log
|
42
|
+
attr_reader :ignore, :log
|
43
43
|
|
44
44
|
def initialize(ignore = nil)
|
45
45
|
@ignore = ignore || self.class.ignored_sql
|
@@ -52,6 +52,7 @@ module QueriesHelper
|
|
52
52
|
# FIXME: this seems bad. we should probably have a better way to indicate
|
53
53
|
# the query was cached
|
54
54
|
return if values[:name] == 'CACHE' || ignore.any? { |x| x =~ sql }
|
55
|
+
|
55
56
|
log << sql
|
56
57
|
end
|
57
58
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'test_helper'
|
3
4
|
|
4
5
|
module Shipit
|
@@ -10,12 +11,12 @@ module Shipit
|
|
10
11
|
end
|
11
12
|
|
12
13
|
test "#perform checkout the repository to the last recorded commit and cache the deploy spec" do
|
13
|
-
@stack.update!(cached_deploy_spec: DeploySpec.new('review' => { 'checklist' => %w
|
14
|
+
@stack.update!(cached_deploy_spec: DeploySpec.new('review' => { 'checklist' => %w[foo bar] }))
|
14
15
|
|
15
16
|
dir = Pathname(Dir.tmpdir)
|
16
17
|
StackCommands.any_instance.expects(:with_temporary_working_directory).with(commit: @last_commit).yields(dir)
|
17
18
|
|
18
|
-
assert_equal %w
|
19
|
+
assert_equal %w[foo bar], @stack.checklist
|
19
20
|
@job.perform(@stack)
|
20
21
|
assert_equal [], @stack.reload.checklist
|
21
22
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'test_helper'
|
3
4
|
|
4
5
|
module Shipit
|
@@ -25,7 +26,7 @@ module Shipit
|
|
25
26
|
test "#peform ignores non-finished jobs" do
|
26
27
|
logger = mock
|
27
28
|
logger.expects(:error).once
|
28
|
-
@job.stubs(logger:
|
29
|
+
@job.stubs(logger:)
|
29
30
|
|
30
31
|
@task.update_attribute(:status, :pending)
|
31
32
|
|
@@ -35,7 +36,7 @@ module Shipit
|
|
35
36
|
test "#perform ignores tasks already rolled up" do
|
36
37
|
logger = mock
|
37
38
|
logger.expects(:error).once
|
38
|
-
@job.stubs(logger:
|
39
|
+
@job.stubs(logger:)
|
39
40
|
|
40
41
|
@task.rolled_up = true
|
41
42
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'test_helper'
|
3
4
|
|
4
5
|
module Shipit
|
@@ -24,5 +25,16 @@ module Shipit
|
|
24
25
|
@job.perform(stack)
|
25
26
|
end
|
26
27
|
end
|
28
|
+
|
29
|
+
test "perform destroys the all Status of related commits" do
|
30
|
+
stack = shipit_stacks(:shipit)
|
31
|
+
Shipit.legacy_github_api.stubs(:remove_hook)
|
32
|
+
|
33
|
+
assert_changes -> { Status.count }, 'Statuses are not deleted' do
|
34
|
+
@job.perform(stack)
|
35
|
+
end
|
36
|
+
|
37
|
+
refute_predicate Status.count, :zero?
|
38
|
+
end
|
27
39
|
end
|
28
40
|
end
|