shipit-engine 0.28.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 +41 -2
- data/Rakefile +4 -2
- data/app/assets/images/archive-solid.svg +1 -0
- data/app/assets/stylesheets/_pages/_stacks.scss +76 -3
- data/app/assets/stylesheets/_structure/_main.scss +2 -1
- data/app/assets/stylesheets/merge_status.scss +0 -3
- data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +13 -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 +37 -5
- data/app/controllers/shipit/api/tasks_controller.rb +6 -5
- data/app/controllers/shipit/api_clients_controller.rb +50 -0
- 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 +19 -14
- 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 +78 -14
- 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 +5 -132
- 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 +5 -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 +4 -1
- 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 +3 -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 +3 -2
- 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 +2 -1
- data/app/jobs/shipit/github_sync_job.rb +3 -2
- data/app/jobs/shipit/{mark_deploy_healty_job.rb → 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 +14 -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 +6 -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 +31 -12
- data/app/models/shipit/commit_checks.rb +1 -0
- data/app/models/shipit/commit_deployment.rb +17 -12
- data/app/models/shipit/commit_deployment_status.rb +8 -3
- data/app/models/shipit/commit_message.rb +1 -0
- data/app/models/shipit/delivery.rb +4 -3
- data/app/models/shipit/deploy.rb +40 -10
- data/app/models/shipit/deploy_spec.rb +22 -3
- data/app/models/shipit/deploy_spec/bundler_discovery.rb +2 -1
- 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 +58 -0
- 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 +3 -2
- 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 +13 -7
- data/app/models/shipit/record.rb +18 -0
- data/app/models/shipit/release_status.rb +3 -2
- data/app/models/shipit/repository.rb +43 -0
- data/app/models/shipit/rollback.rb +1 -0
- data/app/models/shipit/stack.rb +109 -50
- 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 +64 -9
- 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 +29 -5
- data/app/models/shipit/variable_definition.rb +1 -0
- data/app/models/shipit/webhooks.rb +33 -0
- data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +20 -0
- data/app/models/shipit/webhooks/handlers/handler.rb +41 -0
- data/app/models/shipit/webhooks/handlers/membership_handler.rb +46 -0
- data/app/models/shipit/webhooks/handlers/push_handler.rb +21 -0
- data/app/models/shipit/webhooks/handlers/status_handler.rb +27 -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 +7 -1
- 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 +4 -3
- data/app/validators/subset_validator.rb +1 -0
- data/app/views/layouts/_head.html.erb +0 -0
- data/app/views/layouts/shipit.html.erb +6 -4
- data/app/views/shipit/_variables.html.erb +1 -1
- data/app/views/shipit/api_clients/index.html.erb +36 -0
- data/app/views/shipit/api_clients/new.html.erb +33 -0
- data/app/views/shipit/api_clients/show.html.erb +35 -0
- data/app/views/shipit/ccmenu/project.xml.builder +2 -1
- data/app/views/shipit/deploys/new.html.erb +17 -12
- data/app/views/shipit/deploys/show.html.erb +2 -2
- data/app/views/shipit/merge_status/logged_out.erb +1 -1
- data/app/views/shipit/stacks/_header.html.erb +27 -12
- data/app/views/shipit/stacks/_links.html.erb +1 -0
- data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
- data/app/views/shipit/stacks/index.html.erb +7 -2
- data/app/views/shipit/stacks/settings.html.erb +19 -0
- data/app/views/shipit/stacks/statistics.html.erb +82 -0
- data/app/views/shipit/tasks/show.html.erb +1 -1
- data/config/initializers/inflections.rb +2 -1
- data/config/locales/en.yml +18 -5
- data/config/routes.rb +14 -2
- data/db/migrate/20191209231045_create_shipit_repositories.rb +12 -0
- data/db/migrate/20191209231307_add_repository_reference_to_stacks.rb +15 -0
- data/db/migrate/20191216162728_backfill_repository_data.rb +22 -0
- data/db/migrate/20191216163010_remove_repository_information_from_stacks.rb +20 -0
- data/db/migrate/20191219205202_add_archived_since_to_stacks.rb +6 -0
- data/db/migrate/20200102175621_optional_task_commits.rb +6 -0
- data/db/migrate/20200109132519_add_sha_to_commit_deployments.rb +5 -0
- 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 +18 -20
- data/lib/shipit/cast_value.rb +1 -0
- data/lib/shipit/command.rb +14 -18
- 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 +11 -2
- data/lib/shipit/environment_variables.rb +11 -1
- data/lib/shipit/first_parent_commits_iterator.rb +1 -0
- data/lib/shipit/flock.rb +1 -0
- data/lib/shipit/github_app.rb +60 -6
- data/lib/shipit/github_http_cache_middleware.rb +57 -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 +6 -3
- data/lib/shipit/stat.rb +1 -0
- data/lib/shipit/task_commands.rb +22 -14
- 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 +16 -17
- 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 +9 -8
- 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 +3 -2
- 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 +44 -15
- data/test/controllers/api/tasks_controller_test.rb +13 -12
- data/test/controllers/api_clients_controller_test.rb +104 -0
- 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 +33 -22
- data/test/controllers/github_authentication_controller_test.rb +1 -0
- data/test/controllers/merge_status_controller_test.rb +27 -9
- 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 +64 -15
- data/test/controllers/status_controller_test.rb +1 -0
- data/test/controllers/tasks_controller_test.rb +20 -19
- data/test/controllers/webhooks_controller_test.rb +36 -9
- data/test/dummy/config/application.rb +1 -1
- data/test/dummy/config/environments/development.rb +24 -4
- data/test/dummy/config/environments/test.rb +2 -0
- data/test/dummy/db/schema.rb +25 -11
- data/test/dummy/db/seeds.rb +34 -17
- data/test/fixtures/shipit/commit_deployment_statuses.yml +4 -4
- data/test/fixtures/shipit/commit_deployments.yml +8 -8
- data/test/fixtures/shipit/commits.yml +38 -0
- data/test/fixtures/shipit/repositories.yml +27 -0
- data/test/fixtures/shipit/stacks.yml +190 -30
- data/test/fixtures/shipit/tasks.yml +66 -3
- 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 +2 -1
- data/test/jobs/destroy_stack_job_test.rb +10 -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 +5 -4
- 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 +13 -11
- 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 +34 -4
- data/test/models/commit_deployment_test.rb +9 -11
- data/test/models/commits_test.rb +99 -7
- data/test/models/delivery_test.rb +3 -2
- data/test/models/deploy_spec_test.rb +47 -42
- data/test/models/deploy_stats_test.rb +113 -0
- data/test/models/deploys_test.rb +60 -13
- data/test/models/duration_test.rb +1 -0
- data/test/models/github_hook_test.rb +1 -0
- data/test/models/hook_test.rb +20 -16
- data/test/models/membership_test.rb +1 -0
- data/test/models/output_chunk_test.rb +1 -0
- data/test/models/pull_request_test.rb +18 -11
- 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 +77 -0
- data/test/models/shipit/wehbooks/handlers_test.rb +27 -0
- data/test/models/stacks_test.rb +110 -56
- 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 +14 -0
- data/test/models/users_test.rb +109 -1
- data/test/test_command_integration.rb +3 -2
- data/test/test_helper.rb +38 -34
- data/test/unit/anonymous_user_serializer_test.rb +14 -0
- data/test/unit/command_test.rb +12 -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 +14 -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 +165 -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 +215 -157
- data/lib/shipit/strip_cache_control.rb +0 -40
@@ -0,0 +1,104 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
module Shipit
|
6
|
+
class ApiClientsControllerTest < ActionController::TestCase
|
7
|
+
setup do
|
8
|
+
@routes = Shipit::Engine.routes
|
9
|
+
@api_client = shipit_api_clients(:here_come_the_walrus)
|
10
|
+
session[:user_id] = shipit_users(:walrus).id
|
11
|
+
end
|
12
|
+
|
13
|
+
test "GitHub authentication is mandatory" do
|
14
|
+
session[:user_id] = nil
|
15
|
+
get :index
|
16
|
+
assert_redirected_to '/github/auth/github?origin=http%3A%2F%2Ftest.host%2Fapi_clients'
|
17
|
+
end
|
18
|
+
|
19
|
+
test "current_user must be a member of at least a Shipit.github_teams" do
|
20
|
+
session[:user_id] = shipit_users(:bob).id
|
21
|
+
Shipit.stubs(:github_teams).returns([shipit_teams(:cyclimse_cooks), shipit_teams(:shopify_developers)])
|
22
|
+
get :index
|
23
|
+
assert_response :forbidden
|
24
|
+
assert_equal(
|
25
|
+
'You must be a member of cyclimse/cooks or shopify/developers to access this application.',
|
26
|
+
response.body,
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
test "#index is successful with a valid user" do
|
31
|
+
get :index
|
32
|
+
assert_response :ok
|
33
|
+
end
|
34
|
+
|
35
|
+
test "#new is success" do
|
36
|
+
get :new
|
37
|
+
assert_response :ok
|
38
|
+
end
|
39
|
+
|
40
|
+
test "#create creates a new api_client" do
|
41
|
+
assert_difference "ApiClient.count", +1 do
|
42
|
+
post :create, params: {
|
43
|
+
api_client: {
|
44
|
+
name: 'walrus_app',
|
45
|
+
permissions: [
|
46
|
+
'read:stack',
|
47
|
+
'lock:stack',
|
48
|
+
],
|
49
|
+
},
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
assert_redirected_to api_client_path(ApiClient.last)
|
54
|
+
end
|
55
|
+
|
56
|
+
test "#create attaches the current user to the created api client" do
|
57
|
+
post :create, params: {
|
58
|
+
api_client: {
|
59
|
+
name: 'walrus_app',
|
60
|
+
permissions: [
|
61
|
+
'read:stack',
|
62
|
+
'lock:stack',
|
63
|
+
],
|
64
|
+
},
|
65
|
+
}
|
66
|
+
|
67
|
+
assert_equal shipit_users(:walrus).id, ApiClient.last.creator.id
|
68
|
+
end
|
69
|
+
|
70
|
+
test "#create when not valid renders new" do
|
71
|
+
assert_no_difference "Stack.count" do
|
72
|
+
post :create, params: { api_client: { name: 'walrus_app', permissions: ['invalid'] } }
|
73
|
+
end
|
74
|
+
|
75
|
+
assert flash[:warning]
|
76
|
+
assert_response :success
|
77
|
+
end
|
78
|
+
|
79
|
+
test "#show is success" do
|
80
|
+
get :show, params: { id: @api_client.id }
|
81
|
+
assert_response :ok
|
82
|
+
end
|
83
|
+
|
84
|
+
test "#update updates an existing api_client" do
|
85
|
+
new_permissions = [
|
86
|
+
'read:stack',
|
87
|
+
'lock:stack',
|
88
|
+
]
|
89
|
+
|
90
|
+
assert_difference "ApiClient.count", 0 do
|
91
|
+
patch :update, params: {
|
92
|
+
id: @api_client.id,
|
93
|
+
api_client: {
|
94
|
+
permissions: new_permissions,
|
95
|
+
},
|
96
|
+
}
|
97
|
+
end
|
98
|
+
@api_client.reload
|
99
|
+
|
100
|
+
assert_redirected_to api_client_path(@api_client)
|
101
|
+
assert_equal new_permissions, @api_client.permissions
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'uri'
|
2
3
|
require 'test_helper'
|
3
4
|
|
@@ -10,7 +11,7 @@ module Shipit
|
|
10
11
|
end
|
11
12
|
|
12
13
|
test ":fetch returns ok with json" do
|
13
|
-
get :fetch, params: {stack_id: @stack.to_param}
|
14
|
+
get :fetch, params: { stack_id: @stack.to_param }
|
14
15
|
assert_response :ok
|
15
16
|
data = JSON.parse(response.body)
|
16
17
|
assert_includes data, 'ccmenu_url'
|
@@ -18,12 +19,12 @@ module Shipit
|
|
18
19
|
|
19
20
|
test ":fetch creates a read only api client" do
|
20
21
|
assert_difference 'ApiClient.count' do
|
21
|
-
get :fetch, params: {stack_id: @stack.to_param}
|
22
|
+
get :fetch, params: { stack_id: @stack.to_param }
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
26
|
test ":fetch url includes api token on query string" do
|
26
|
-
get :fetch, params: {stack_id: @stack.to_param}
|
27
|
+
get :fetch, params: { stack_id: @stack.to_param }
|
27
28
|
data = JSON.parse(response.body)
|
28
29
|
client = ApiClient.last
|
29
30
|
query = Rack::Utils.parse_nested_query(URI(data['ccmenu_url']).query)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
module Shipit
|
@@ -12,7 +13,7 @@ module Shipit
|
|
12
13
|
end
|
13
14
|
|
14
15
|
test ":tail is success" do
|
15
|
-
get :tail, params: {stack_id: @stack.to_param, sha: @commit.sha}
|
16
|
+
get :tail, params: { stack_id: @stack.to_param, sha: @commit.sha }
|
16
17
|
assert_response :success
|
17
18
|
assert_json 'output', 'foobar'
|
18
19
|
assert_json 'url', stack_tail_commit_checks_path(@stack, sha: @commit.sha, since: 6)
|
@@ -21,14 +22,14 @@ module Shipit
|
|
21
22
|
|
22
23
|
test ":tail doesn't provide another url if the task is finished" do
|
23
24
|
@checks.status = 'success'
|
24
|
-
get :tail, params: {stack_id: @stack.to_param, sha: @commit.sha}
|
25
|
+
get :tail, params: { stack_id: @stack.to_param, sha: @commit.sha }
|
25
26
|
assert_response :success
|
26
27
|
assert_json 'url', nil
|
27
28
|
end
|
28
29
|
|
29
30
|
test ":tail returns only the output after the provided offset" do
|
30
31
|
@checks.status = 'success'
|
31
|
-
get :tail, params: {stack_id: @stack.to_param, sha: @commit.sha, since: 5}
|
32
|
+
get :tail, params: { stack_id: @stack.to_param, sha: @commit.sha, since: 5 }
|
32
33
|
assert_response :success
|
33
34
|
assert_json 'output', 'r'
|
34
35
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
module Shipit
|
@@ -15,7 +16,7 @@ module Shipit
|
|
15
16
|
patch(:update, params: {
|
16
17
|
stack_id: @stack.to_param,
|
17
18
|
id: @commit.id,
|
18
|
-
commit: {locked: true},
|
19
|
+
commit: { locked: true },
|
19
20
|
})
|
20
21
|
|
21
22
|
assert_response(:ok)
|
@@ -30,7 +31,7 @@ module Shipit
|
|
30
31
|
patch(:update, params: {
|
31
32
|
stack_id: @stack.to_param,
|
32
33
|
id: @commit.id,
|
33
|
-
commit: {locked: false},
|
34
|
+
commit: { locked: false },
|
34
35
|
})
|
35
36
|
|
36
37
|
assert_response(:ok)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
module Shipit
|
@@ -12,30 +13,30 @@ module Shipit
|
|
12
13
|
end
|
13
14
|
|
14
15
|
test ":show is success" do
|
15
|
-
get :show, params: {stack_id: @stack.to_param, id: @stack.deploys.last.id}
|
16
|
+
get :show, params: { stack_id: @stack.to_param, id: @stack.deploys.last.id }
|
16
17
|
assert_response :success
|
17
18
|
end
|
18
19
|
|
19
20
|
test "deploys can be observed as raw text" do
|
20
|
-
get :show, params: {stack_id: @stack, id: @deploy.id, format: 'txt'}
|
21
|
+
get :show, params: { stack_id: @stack, id: @deploy.id, format: 'txt' }
|
21
22
|
assert_response :success
|
22
|
-
assert_equal("text/plain", @response.
|
23
|
+
assert_equal("text/plain", @response.media_type)
|
23
24
|
end
|
24
25
|
|
25
26
|
test ":new is success" do
|
26
|
-
get :new, params: {stack_id: @stack.to_param, sha: @commit.sha}
|
27
|
+
get :new, params: { stack_id: @stack.to_param, sha: @commit.sha }
|
27
28
|
assert_response :success
|
28
29
|
end
|
29
30
|
|
30
31
|
test ":new works for not yet deployed stacks" do
|
31
32
|
@stack = shipit_stacks(:undeployed_stack)
|
32
|
-
get :new, params: {stack_id: @stack.to_param, sha: @stack.commits.last.sha}
|
33
|
+
get :new, params: { stack_id: @stack.to_param, sha: @stack.commits.last.sha }
|
33
34
|
end
|
34
35
|
|
35
36
|
test ":new shows a warning if a deploy is already running" do
|
36
37
|
shipit_deploys(:shipit_running).update!(allow_concurrency: false, status: 'running')
|
37
38
|
|
38
|
-
get :new, params: {stack_id: @stack.to_param, sha: @commit.sha}
|
39
|
+
get :new, params: { stack_id: @stack.to_param, sha: @commit.sha }
|
39
40
|
assert_response :success
|
40
41
|
assert_select '.warning.concurrent-deploy h2' do |elements|
|
41
42
|
assert_equal 'Lando Walrussian is already deploying!', elements.first.text
|
@@ -43,21 +44,31 @@ module Shipit
|
|
43
44
|
assert_select '#new_deploy #force', 1
|
44
45
|
end
|
45
46
|
|
47
|
+
test ":new selects default value" do
|
48
|
+
@stack = shipit_stacks(:shipit_undeployed)
|
49
|
+
get :new, params: { stack_id: @stack.to_param, sha: @stack.commits.last.sha }
|
50
|
+
assert_response :success
|
51
|
+
|
52
|
+
assert_select '.variables-fields option[selected=selected]' do |elements|
|
53
|
+
assert_equal 'us-central', elements.first.text
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
46
57
|
test ":create persists a new deploy" do
|
47
58
|
assert_difference '@stack.deploys.count', 1 do
|
48
|
-
post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id}}
|
59
|
+
post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id } }
|
49
60
|
end
|
50
61
|
end
|
51
62
|
|
52
63
|
test ":create can receive an :env hash" do
|
53
|
-
env = {'SAFETY_DISABLED' => '1'}
|
54
|
-
post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id, env: env}}
|
64
|
+
env = { 'SAFETY_DISABLED' => '1' }
|
65
|
+
post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id, env: env } }
|
55
66
|
new_deploy = Deploy.last
|
56
67
|
assert_equal env, new_deploy.env
|
57
68
|
end
|
58
69
|
|
59
70
|
test ":create ignore :env keys not declared in the deploy spec" do
|
60
|
-
post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id, env: {'H4X0R' => '1'}}}
|
71
|
+
post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id, env: { 'H4X0R' => '1' } } }
|
61
72
|
new_deploy = Deploy.last
|
62
73
|
assert_equal({}, new_deploy.env)
|
63
74
|
end
|
@@ -66,7 +77,7 @@ module Shipit
|
|
66
77
|
shipit_deploys(:shipit_running).update_column(:status, 'running')
|
67
78
|
|
68
79
|
assert_difference '@stack.deploys.count', 1 do
|
69
|
-
post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id}, force: 'true'}
|
80
|
+
post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id }, force: 'true' }
|
70
81
|
end
|
71
82
|
end
|
72
83
|
|
@@ -74,26 +85,26 @@ module Shipit
|
|
74
85
|
shipit_deploys(:shipit_running).update!(allow_concurrency: false, status: 'running')
|
75
86
|
|
76
87
|
assert_no_difference '@stack.deploys.count' do
|
77
|
-
post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id}}
|
88
|
+
post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id } }
|
78
89
|
end
|
79
90
|
assert_redirected_to new_stack_deploy_path(@stack, sha: @commit.sha)
|
80
91
|
end
|
81
92
|
|
82
93
|
test ":create redirects to the new deploy" do
|
83
|
-
post :create, params: {stack_id: @stack.to_param, deploy: {until_commit_id: @commit.id}}
|
94
|
+
post :create, params: { stack_id: @stack.to_param, deploy: { until_commit_id: @commit.id } }
|
84
95
|
new_deploy = Deploy.last
|
85
96
|
assert_redirected_to stack_deploy_path(@stack, new_deploy)
|
86
97
|
end
|
87
98
|
|
88
99
|
test ":rollback is success" do
|
89
|
-
get :rollback, params: {stack_id: @stack.to_param, id: @deploy.id}
|
100
|
+
get :rollback, params: { stack_id: @stack.to_param, id: @deploy.id }
|
90
101
|
assert_response :success
|
91
102
|
end
|
92
103
|
|
93
104
|
test ":rollback shows a warning if a deploy is already running" do
|
94
105
|
shipit_deploys(:shipit_running).update!(allow_concurrency: false, status: 'running')
|
95
106
|
|
96
|
-
get :rollback, params: {stack_id: @stack.to_param, id: @deploy.id}
|
107
|
+
get :rollback, params: { stack_id: @stack.to_param, id: @deploy.id }
|
97
108
|
assert_response :success
|
98
109
|
assert_select '.warning.concurrent-deploy h2' do |elements|
|
99
110
|
assert_equal 'Lando Walrussian is already deploying!', elements.first.text
|
@@ -118,13 +129,13 @@ module Shipit
|
|
118
129
|
|
119
130
|
rollback_commit = @stack.commits.where(id: 2).first
|
120
131
|
|
121
|
-
get :show, params: {stack_id: @stack, id: latest_deploy.id, format: 'html'}
|
132
|
+
get :show, params: { stack_id: @stack, id: latest_deploy.id, format: 'html' }
|
122
133
|
|
123
134
|
expected_result = "Abort and Rollback to <span class=\"short-sha-no-bg\">#{rollback_commit.short_sha}</span>"
|
124
135
|
expected_rolling_back_element = "Aborting with Rollback... to <span class=\"short-sha-no-bg\">#{rollback_commit.short_sha}</span>"
|
125
136
|
|
126
|
-
assert_select 'span.caption--ready', {html: expected_result}, "rollback button element was not found, or did not match the expected result of '#{expected_result}'"
|
127
|
-
assert_select 'span.caption--pending', {html: expected_rolling_back_element}, "ready rollback button element was not found, or did not match the expected result of '#{expected_rolling_back_element}'"
|
137
|
+
assert_select 'span.caption--ready', { html: expected_result }, "rollback button element was not found, or did not match the expected result of '#{expected_result}'"
|
138
|
+
assert_select 'span.caption--pending', { html: expected_rolling_back_element }, "ready rollback button element was not found, or did not match the expected result of '#{expected_rolling_back_element}'"
|
128
139
|
end
|
129
140
|
|
130
141
|
test ":rollback (regression) works correctly when a previous deploy is not found" do
|
@@ -140,17 +151,17 @@ module Shipit
|
|
140
151
|
|
141
152
|
rollback_commit = @stack.commits.where(id: rollback_commit_id).take
|
142
153
|
|
143
|
-
get :show, params: {stack_id: @stack, id: latest_deploy.id, format: 'html'}
|
154
|
+
get :show, params: { stack_id: @stack, id: latest_deploy.id, format: 'html' }
|
144
155
|
|
145
156
|
expected_result = "Abort and Rollback to <span class=\"short-sha-no-bg\">#{rollback_commit.short_sha}</span>"
|
146
157
|
expected_rolling_back_element = "Aborting with Rollback... to <span class=\"short-sha-no-bg\">#{rollback_commit.short_sha}</span>"
|
147
158
|
|
148
|
-
assert_select 'span.caption--ready', {html: expected_result}, "rollback button element was not found, or did not match the expected result of '#{expected_result}'"
|
149
|
-
assert_select 'span.caption--pending', {html: expected_rolling_back_element}, "ready rollback button element was not found, or did not match the expected result of '#{expected_rolling_back_element}'"
|
159
|
+
assert_select 'span.caption--ready', { html: expected_result }, "rollback button element was not found, or did not match the expected result of '#{expected_result}'"
|
160
|
+
assert_select 'span.caption--pending', { html: expected_rolling_back_element }, "ready rollback button element was not found, or did not match the expected result of '#{expected_rolling_back_element}'"
|
150
161
|
end
|
151
162
|
|
152
163
|
test ":revert redirect to the proper rollback page" do
|
153
|
-
get :revert, params: {stack_id: @stack.to_param, id: shipit_deploys(:shipit2).id}
|
164
|
+
get :revert, params: { stack_id: @stack.to_param, id: shipit_deploys(:shipit2).id }
|
154
165
|
assert_redirected_to rollback_stack_deploy_path(@stack, shipit_deploys(:shipit))
|
155
166
|
end
|
156
167
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
module Shipit
|
@@ -9,27 +10,27 @@ module Shipit
|
|
9
10
|
end
|
10
11
|
|
11
12
|
test "GET show" do
|
12
|
-
get :show, params: {referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master'}
|
13
|
+
get :show, params: { referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master' }
|
13
14
|
assert_response :ok
|
14
15
|
assert_includes response.body, 'Ready to ship!'
|
15
16
|
end
|
16
17
|
|
17
18
|
test "GET show when there is no matching stacks" do
|
18
|
-
get :show, params: {referrer: 'https://github.com/Shopify/unknown-repo/pull/42', branch: 'master'}
|
19
|
+
get :show, params: { referrer: 'https://github.com/Shopify/unknown-repo/pull/42', branch: 'master' }
|
19
20
|
assert_response :ok
|
20
21
|
assert_predicate response.body, :blank?
|
21
22
|
end
|
22
23
|
|
23
24
|
test "GET anonymous show returns a login message" do
|
24
25
|
session.delete(:user_id)
|
25
|
-
get :show, params: {referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master'}
|
26
|
+
get :show, params: { referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master' }
|
26
27
|
assert_response :ok
|
27
28
|
assert_includes response.body.downcase, 'please log in'
|
28
29
|
end
|
29
30
|
|
30
31
|
test "GET anonymous show when there is no matching stack is blank" do
|
31
32
|
session.delete(:user_id)
|
32
|
-
get :show, params: {referrer: 'https://github.com/Shopify/unknown-repo/pull/42', branch: 'master'}
|
33
|
+
get :show, params: { referrer: 'https://github.com/Shopify/unknown-repo/pull/42', branch: 'master' }
|
33
34
|
assert_response :ok
|
34
35
|
assert_predicate response.body, :blank?
|
35
36
|
end
|
@@ -37,21 +38,38 @@ module Shipit
|
|
37
38
|
test "GET show prefers stacks with merge_queue_enabled" do
|
38
39
|
existing = shipit_stacks(:shipit)
|
39
40
|
Shipit::Stack.where(
|
40
|
-
|
41
|
-
repo_name: existing.repo_name,
|
41
|
+
repository: existing.repository,
|
42
42
|
).update_all(merge_queue_enabled: false)
|
43
43
|
|
44
44
|
Shipit::Stack.create(
|
45
|
-
|
46
|
-
repo_name: existing.repo_name,
|
45
|
+
repository: existing.repository,
|
47
46
|
environment: 'foo',
|
48
47
|
branch: existing.branch,
|
49
48
|
merge_queue_enabled: true,
|
50
49
|
)
|
51
50
|
|
52
|
-
get :show, params: {referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master'}
|
51
|
+
get :show, params: { referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master' }
|
53
52
|
assert_response :ok
|
54
53
|
assert_includes response.body, 'shipit-engine/foo'
|
55
54
|
end
|
55
|
+
|
56
|
+
test "GET show prefers locked stacks above all else" do
|
57
|
+
existing = shipit_stacks(:shipit)
|
58
|
+
Shipit::Stack.where(
|
59
|
+
repository: existing.repository,
|
60
|
+
).update_all(lock_reason: 'testing', merge_queue_enabled: false, locked_since: Time.now.utc)
|
61
|
+
|
62
|
+
# Shipit would otherwise prefer this, because it has the merge queue enabled
|
63
|
+
Shipit::Stack.create(
|
64
|
+
repository: existing.repository,
|
65
|
+
environment: 'foo',
|
66
|
+
branch: existing.branch,
|
67
|
+
merge_queue_enabled: true,
|
68
|
+
)
|
69
|
+
|
70
|
+
get :show, params: { referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master' }
|
71
|
+
assert_response :ok
|
72
|
+
assert_includes response.body, 'locked'
|
73
|
+
end
|
56
74
|
end
|
57
75
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
4
|
module Shipit
|
@@ -9,21 +10,21 @@ module Shipit
|
|
9
10
|
end
|
10
11
|
|
11
12
|
test "#index shows pending pull requests" do
|
12
|
-
get :index, params: {stack_id: @stack.to_param}
|
13
|
+
get :index, params: { stack_id: @stack.to_param }
|
13
14
|
assert_response :success
|
14
15
|
assert_select '.pr-list .pr', @stack.pull_requests.pending.count
|
15
16
|
end
|
16
17
|
|
17
18
|
test "#add can enqueue a pull request" do
|
18
19
|
assert_difference -> { PullRequest.count }, +1 do
|
19
|
-
post :create, params: {stack_id: @stack.to_param, number_or_url: '#5'}
|
20
|
+
post :create, params: { stack_id: @stack.to_param, number_or_url: '#5' }
|
20
21
|
end
|
21
22
|
assert_redirected_to stack_pull_requests_path(@stack)
|
22
23
|
end
|
23
24
|
|
24
25
|
test "#destroy can cancel a pending pull request" do
|
25
26
|
assert_predicate @pr, :pending?
|
26
|
-
delete :destroy, params: {stack_id: @stack.to_param, id: @pr.id}
|
27
|
+
delete :destroy, params: { stack_id: @stack.to_param, id: @pr.id }
|
27
28
|
assert_redirected_to stack_pull_requests_path(@stack)
|
28
29
|
assert_predicate @pr.reload, :canceled?
|
29
30
|
end
|