shipit-engine 0.30.0 → 0.34.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 +19 -4
- data/Rakefile +4 -2
- data/app/assets/images/magic-solid.svg +1 -0
- data/app/assets/javascripts/shipit/repositories_search.js.coffee +60 -0
- data/app/assets/javascripts/shipit/{search.js.coffee → stack_search.js.coffee} +0 -0
- data/app/assets/stylesheets/_pages/_deploy.scss +0 -2
- data/app/assets/stylesheets/_pages/_repositories.scss +148 -0
- data/app/assets/stylesheets/_pages/_stacks.scss +19 -3
- data/app/assets/stylesheets/merge_status.scss +0 -3
- data/app/assets/stylesheets/shipit.scss +1 -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 +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 +6 -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/merge_requests_controller.rb +37 -0
- data/app/controllers/shipit/api/outputs_controller.rb +2 -1
- data/app/controllers/shipit/api/release_statuses_controller.rb +3 -2
- data/app/controllers/shipit/api/rollbacks_controller.rb +34 -0
- data/app/controllers/shipit/api/stacks_controller.rb +32 -5
- data/app/controllers/shipit/api/tasks_controller.rb +6 -5
- data/app/controllers/shipit/api_clients_controller.rb +4 -3
- data/app/controllers/shipit/ccmenu_url_controller.rb +4 -3
- data/app/controllers/shipit/commit_checks_controller.rb +2 -1
- data/app/controllers/shipit/commits_controller.rb +2 -1
- data/app/controllers/shipit/deploys_controller.rb +4 -3
- data/app/controllers/shipit/github_authentication_controller.rb +4 -3
- data/app/controllers/shipit/merge_requests_controller.rb +31 -0
- data/app/controllers/shipit/merge_status_controller.rb +31 -30
- data/app/controllers/shipit/release_statuses_controller.rb +3 -2
- data/app/controllers/shipit/repositories_controller.rb +74 -0
- 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 +24 -9
- data/app/controllers/shipit/status_controller.rb +2 -1
- data/app/controllers/shipit/tasks_controller.rb +7 -6
- data/app/controllers/shipit/webhooks_controller.rb +26 -6
- data/app/helpers/shipit/chunks_helper.rb +3 -2
- data/app/helpers/shipit/deploys_helper.rb +4 -3
- data/app/helpers/shipit/github_url_helper.rb +9 -0
- data/app/helpers/shipit/merge_status_helper.rb +1 -0
- data/app/helpers/shipit/shipit_helper.rb +1 -1
- 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 +1 -0
- data/app/jobs/shipit/cache_deploy_spec_job.rb +1 -0
- data/app/jobs/shipit/chunk_rollup_job.rb +4 -0
- data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
- data/app/jobs/shipit/continuous_delivery_job.rb +2 -1
- data/app/jobs/shipit/create_on_github_job.rb +7 -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 +2 -1
- data/app/jobs/shipit/destroy_job.rb +1 -0
- data/app/jobs/shipit/destroy_repository_job.rb +24 -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 +1 -0
- data/app/jobs/shipit/github_sync_job.rb +15 -10
- 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 +5 -92
- data/app/jobs/shipit/process_merge_requests_job.rb +32 -0
- 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_merge_request_job.rb +11 -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 +5 -4
- data/app/models/concerns/shipit/deferred_touch.rb +4 -3
- data/app/models/shipit/anonymous_user.rb +15 -2
- 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 +41 -4
- data/app/models/shipit/command_line_user.rb +5 -0
- data/app/models/shipit/commit.rb +42 -24
- data/app/models/shipit/commit_checks.rb +15 -13
- data/app/models/shipit/commit_deployment.rb +6 -5
- data/app/models/shipit/commit_deployment_status.rb +5 -4
- data/app/models/shipit/commit_message.rb +1 -0
- data/app/models/shipit/delivery.rb +4 -3
- data/app/models/shipit/deploy.rb +23 -28
- data/app/models/shipit/deploy_spec.rb +38 -7
- data/app/models/shipit/deploy_spec/bundler_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/file_system.rb +20 -7
- data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/lerna_discovery.rb +13 -4
- data/app/models/shipit/deploy_spec/npm_discovery.rb +5 -4
- data/app/models/shipit/deploy_spec/pypi_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
- data/app/models/shipit/deploy_stats.rb +2 -1
- data/app/models/shipit/duration.rb +5 -2
- data/app/models/shipit/ephemeral_commit_checks.rb +1 -0
- data/app/models/shipit/github_hook.rb +2 -1
- data/app/models/shipit/github_status.rb +2 -1
- data/app/models/shipit/hook.rb +34 -7
- data/app/models/shipit/membership.rb +3 -2
- data/app/models/shipit/merge_request.rb +304 -0
- data/app/models/shipit/output_chunk.rb +7 -2
- data/app/models/shipit/provisioning_handler.rb +32 -0
- data/app/models/shipit/provisioning_handler/base.rb +30 -0
- data/app/models/shipit/provisioning_handler/unregistered_provisioning_handler.rb +35 -0
- data/app/models/shipit/pull_request.rb +28 -266
- data/app/models/shipit/pull_request_assignment.rb +10 -0
- data/app/models/shipit/record.rb +18 -0
- data/app/models/shipit/release_status.rb +4 -3
- data/app/models/shipit/repository.rb +71 -6
- data/app/models/shipit/review_stack.rb +130 -0
- data/app/models/shipit/review_stack_provisioning_queue.rb +39 -0
- data/app/models/shipit/rollback.rb +1 -0
- data/app/models/shipit/stack.rb +144 -44
- data/app/models/shipit/status.rb +3 -2
- data/app/models/shipit/status/common.rb +7 -6
- data/app/models/shipit/status/group.rb +2 -1
- data/app/models/shipit/status/missing.rb +2 -1
- data/app/models/shipit/status/unknown.rb +2 -1
- data/app/models/shipit/task.rb +98 -12
- data/app/models/shipit/task_definition.rb +1 -0
- data/app/models/shipit/task_execution_strategy/base.rb +20 -0
- data/app/models/shipit/task_execution_strategy/default.rb +109 -0
- data/app/models/shipit/team.rb +6 -3
- 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 +19 -8
- data/app/models/shipit/variable_definition.rb +1 -0
- data/app/models/shipit/webhooks.rb +11 -0
- data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +1 -0
- data/app/models/shipit/webhooks/handlers/handler.rb +1 -0
- data/app/models/shipit/webhooks/handlers/membership_handler.rb +1 -0
- data/app/models/shipit/webhooks/handlers/pull_request/assigned_handler.rb +74 -0
- data/app/models/shipit/webhooks/handlers/pull_request/closed_handler.rb +68 -0
- data/app/models/shipit/webhooks/handlers/pull_request/edited_handler.rb +74 -0
- data/app/models/shipit/webhooks/handlers/pull_request/label_capturing_handler.rb +127 -0
- data/app/models/shipit/webhooks/handlers/pull_request/labeled_handler.rb +106 -0
- data/app/models/shipit/webhooks/handlers/pull_request/opened_handler.rb +83 -0
- data/app/models/shipit/webhooks/handlers/pull_request/reopened_handler.rb +88 -0
- data/app/models/shipit/webhooks/handlers/pull_request/review_stack_adapter.rb +103 -0
- data/app/models/shipit/webhooks/handlers/pull_request/unlabeled_handler.rb +107 -0
- data/app/models/shipit/webhooks/handlers/push_handler.rb +5 -1
- data/app/models/shipit/webhooks/handlers/status_handler.rb +1 -0
- data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
- data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
- data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
- data/app/serializers/shipit/commit_serializer.rb +1 -0
- data/app/serializers/shipit/deploy_serializer.rb +8 -1
- data/app/serializers/shipit/hook_serializer.rb +1 -0
- data/app/serializers/shipit/merge_request_serializer.rb +21 -0
- data/app/serializers/shipit/pull_request_serializer.rb +6 -8
- data/app/serializers/shipit/review_stack_serializer.rb +7 -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 +8 -6
- data/app/serializers/shipit/tail_task_serializer.rb +11 -2
- data/app/serializers/shipit/task_serializer.rb +2 -17
- data/app/serializers/shipit/user_serializer.rb +6 -1
- data/app/validators/ascii_only_validator.rb +1 -0
- data/app/validators/subset_validator.rb +2 -1
- data/app/views/layouts/merge_status.html.erb +1 -1
- data/app/views/layouts/shipit.html.erb +1 -1
- data/app/views/shipit/_variables.html.erb +1 -1
- data/app/views/shipit/ccmenu/project.xml.builder +2 -1
- data/app/views/shipit/deploys/show.html.erb +2 -2
- data/app/views/shipit/merge_requests/_merge_request.html.erb +29 -0
- data/app/views/shipit/{pull_requests → merge_requests}/index.html.erb +2 -2
- data/app/views/shipit/merge_requests/merge_requests/_pull_request.html.erb +29 -0
- data/app/views/shipit/merge_requests/merge_requests/index.html.erb +20 -0
- data/app/views/shipit/merge_status/_merge_queue_button.html.erb +3 -3
- data/app/views/shipit/merge_status/backlogged.html.erb +1 -1
- data/app/views/shipit/merge_status/failure.html.erb +1 -1
- data/app/views/shipit/merge_status/locked.html.erb +1 -1
- data/app/views/shipit/merge_status/success.html.erb +2 -2
- data/app/views/shipit/repositories/_header.html.erb +19 -0
- data/app/views/shipit/repositories/index.html.erb +31 -0
- data/app/views/shipit/repositories/new.html.erb +23 -0
- data/app/views/shipit/repositories/settings.html.erb +53 -0
- data/app/views/shipit/repositories/show.html.erb +30 -0
- data/app/views/shipit/stacks/_banners.html.erb +15 -1
- data/app/views/shipit/stacks/_header.html.erb +20 -7
- data/app/views/shipit/stacks/_stack.html.erb +8 -0
- data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
- data/app/views/shipit/stacks/index.html.erb +3 -2
- data/app/views/shipit/stacks/new.html.erb +1 -1
- data/app/views/shipit/stacks/settings.html.erb +5 -5
- data/app/views/shipit/stacks/show.html.erb +1 -1
- data/app/views/shipit/tasks/_task_output.html.erb +1 -1
- data/app/views/shipit/tasks/show.html.erb +1 -1
- data/config/initializers/inflections.rb +2 -1
- data/config/locales/en.yml +4 -3
- data/config/routes.rb +25 -7
- data/config/secrets.development.example.yml +24 -0
- data/config/secrets.development.shopify.yml +20 -9
- 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/db/migrate/20200706145406_add_review_stacks.rb +12 -0
- data/db/migrate/20200804144639_rename_pull_request_to_merge_request.rb +7 -0
- data/db/migrate/20200804161512_rename_commits_pull_request_id_to_merge_request_id.rb +5 -0
- data/db/migrate/20200813134712_recreate_shipit_pull_requests.rb +22 -0
- data/db/migrate/20200813194056_create_pull_request_assignments.rb +8 -0
- data/db/migrate/20201001125502_add_provision_pr_stacks_flag_to_repositories.rb +7 -0
- data/db/migrate/20201008145809_add_retry_attempt_to_tasks.rb +5 -0
- data/db/migrate/20201008152744_add_max_retries_to_tasks.rb +5 -0
- data/db/migrate/20210325194053_remove_stacks_branch_default.rb +5 -0
- data/db/migrate/20210504200438_add_github_updated_at_to_check_runs.rb +5 -0
- data/lib/shipit.rb +61 -17
- data/lib/shipit/cast_value.rb +1 -0
- data/lib/shipit/command.rb +20 -21
- data/lib/shipit/commands.rb +14 -6
- data/lib/shipit/csv_serializer.rb +1 -0
- data/lib/shipit/deploy_commands.rb +1 -0
- data/lib/shipit/engine.rb +9 -2
- data/lib/shipit/environment_variables.rb +11 -1
- data/lib/shipit/first_parent_commits_iterator.rb +1 -0
- data/lib/shipit/flock.rb +9 -1
- data/lib/shipit/github_app.rb +15 -12
- data/lib/shipit/github_http_cache_middleware.rb +1 -0
- data/lib/shipit/null_serializer.rb +1 -0
- data/lib/shipit/octokit_check_runs.rb +3 -2
- data/lib/shipit/octokit_iterator.rb +4 -3
- data/lib/shipit/paginator.rb +3 -2
- data/lib/shipit/review_stack_commands.rb +8 -0
- 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 +3 -2
- data/lib/shipit/stack_commands.rb +37 -7
- data/lib/shipit/stat.rb +1 -0
- data/lib/shipit/task_commands.rb +23 -16
- data/lib/shipit/version.rb +2 -1
- data/lib/snippets/publish-lerna-independent-packages +35 -34
- data/lib/snippets/publish-lerna-independent-packages-legacy +39 -0
- data/lib/snippets/release-gem +5 -1
- data/lib/tasks/cron.rake +13 -2
- data/lib/tasks/dev.rake +3 -2
- data/lib/tasks/shipit.rake +15 -14
- data/lib/tasks/teams.rake +1 -0
- data/test/controllers/api/base_controller_test.rb +3 -2
- data/test/controllers/api/ccmenu_controller_test.rb +9 -8
- data/test/controllers/api/commits_controller_test.rb +3 -2
- data/test/controllers/api/deploys_controller_test.rb +32 -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/{pull_requests_controller_test.rb → merge_requests_controller_test.rb} +17 -16
- data/test/controllers/api/outputs_controller_test.rb +3 -1
- 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 +71 -16
- data/test/controllers/api/tasks_controller_test.rb +13 -12
- data/test/controllers/api_clients_controller_test.rb +5 -4
- data/test/controllers/ccmenu_controller_test.rb +4 -3
- data/test/controllers/commit_checks_controller_test.rb +4 -3
- data/test/controllers/commits_controller_test.rb +3 -2
- data/test/controllers/deploys_controller_test.rb +32 -21
- data/test/controllers/github_authentication_controller_test.rb +1 -0
- data/test/controllers/merge_requests_controller_test.rb +32 -0
- data/test/controllers/merge_status_controller_test.rb +7 -6
- data/test/controllers/release_statuses_controller_test.rb +3 -2
- data/test/controllers/repositories_controller_test.rb +71 -0
- data/test/controllers/rollbacks_controller_test.rb +9 -8
- data/test/controllers/stacks_controller_test.rb +41 -19
- data/test/controllers/status_controller_test.rb +1 -0
- data/test/controllers/tasks_controller_test.rb +32 -19
- data/test/controllers/webhooks_controller_test.rb +33 -17
- data/test/dummy/app/assets/config/manifest.js +3 -0
- data/test/dummy/config/application.rb +7 -2
- data/test/dummy/config/database.yml +9 -0
- data/test/dummy/config/environments/development.rb +3 -4
- data/test/dummy/config/environments/test.rb +2 -5
- data/test/dummy/config/secrets_double_github_app.yml +79 -0
- data/test/dummy/db/schema.rb +59 -17
- data/test/dummy/db/seeds.rb +2 -1
- data/test/fixtures/payloads/check_suite_master.json +4 -32
- data/test/fixtures/payloads/invalid_pull_request.json +117 -0
- data/test/fixtures/payloads/provision_disabled_pull_request.json +454 -0
- data/test/fixtures/payloads/pull_request_assigned.json +480 -0
- data/test/fixtures/payloads/pull_request_closed.json +454 -0
- data/test/fixtures/payloads/pull_request_labeled.json +461 -0
- data/test/fixtures/payloads/pull_request_opened.json +454 -0
- data/test/fixtures/payloads/pull_request_reopened.json +454 -0
- data/test/fixtures/payloads/pull_request_unlabeled.json +454 -0
- data/test/fixtures/payloads/pull_request_with_no_repo.json +454 -0
- data/test/fixtures/payloads/push_master.json +1 -1
- data/test/fixtures/payloads/push_not_master.json +1 -1
- data/test/fixtures/shipit/commits.yml +31 -3
- data/test/fixtures/shipit/hooks.yml +1 -0
- data/test/fixtures/shipit/merge_requests.yml +141 -0
- data/test/fixtures/shipit/pull_request_assignments.yml +3 -0
- data/test/fixtures/shipit/pull_requests.yml +10 -131
- data/test/fixtures/shipit/repositories.yml +5 -0
- data/test/fixtures/shipit/stacks.yml +235 -14
- data/test/fixtures/shipit/statuses.yml +9 -0
- data/test/fixtures/shipit/tasks.yml +4 -1
- data/test/fixtures/shipit/users.yml +7 -0
- 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 +20 -12
- data/test/helpers/links_helper.rb +4 -3
- data/test/helpers/payloads_helper.rb +5 -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 +16 -1
- data/test/jobs/deliver_hook_job_test.rb +1 -0
- data/test/jobs/destroy_repository_job_test.rb +27 -0
- data/test/jobs/destroy_stack_job_test.rb +1 -0
- data/test/jobs/emit_event_job_test.rb +2 -1
- data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
- data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
- data/test/jobs/github_sync_job_test.rb +3 -1
- data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
- data/test/jobs/perform_task_job_test.rb +12 -11
- data/test/jobs/{merge_pull_requests_job_test.rb → process_merge_requests_job_test.rb} +19 -18
- data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
- data/test/jobs/reap_dead_tasks_job_test.rb +68 -0
- data/test/jobs/refresh_github_user_job_test.rb +1 -0
- data/test/jobs/refresh_status_job_test.rb +1 -0
- data/test/jobs/unique_job_test.rb +1 -0
- data/test/jobs/update_github_last_deployed_ref_job_test.rb +1 -0
- data/test/lib/shipit/deploy_commands_test.rb +16 -0
- data/test/lib/shipit/task_commands_test.rb +17 -0
- data/test/middleware/same_site_cookie_middleware_test.rb +52 -0
- data/test/models/api_client_test.rb +1 -0
- data/test/models/commit_checks_test.rb +1 -0
- data/test/models/commit_deployment_status_test.rb +4 -3
- data/test/models/commit_deployment_test.rb +2 -1
- data/test/models/commits_test.rb +96 -19
- data/test/models/delivery_test.rb +2 -1
- data/test/models/deploy_spec_test.rb +110 -65
- data/test/models/deploy_stats_test.rb +1 -0
- data/test/models/deploys_test.rb +197 -36
- data/test/models/duration_test.rb +1 -0
- data/test/models/github_hook_test.rb +1 -0
- data/test/models/hook_test.rb +47 -10
- data/test/models/membership_test.rb +1 -0
- data/test/models/{pull_request_test.rb → merge_request_test.rb} +53 -37
- data/test/models/pull_request_assignment_test.rb +16 -0
- 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 +125 -5
- data/test/models/shipit/provisioning_handler/base_test.rb +33 -0
- data/test/models/shipit/provisioning_handler/unregistered_provisioning_handler_test.rb +49 -0
- data/test/models/shipit/provisioning_handler_test.rb +64 -0
- data/test/models/shipit/pull_request_test.rb +52 -0
- data/test/models/shipit/repository_test.rb +6 -1
- data/test/models/shipit/review_stack_provision_status_test.rb +77 -0
- data/test/models/shipit/review_stack_provisioning_queue_test.rb +63 -0
- data/test/models/shipit/review_stack_test.rb +91 -0
- data/test/models/{stacks_test.rb → shipit/stacks_test.rb} +121 -16
- data/test/models/shipit/webhooks/handlers/pull_request/assigned_handler_test.rb +45 -0
- data/test/models/shipit/webhooks/handlers/pull_request/closed_handler_test.rb +192 -0
- data/test/models/shipit/webhooks/handlers/pull_request/edited_handler_test.rb +47 -0
- data/test/models/shipit/webhooks/handlers/pull_request/label_capturing_handler_test.rb +209 -0
- data/test/models/shipit/webhooks/handlers/pull_request/labeled_handler_test.rb +332 -0
- data/test/models/shipit/webhooks/handlers/pull_request/opened_handler_test.rb +238 -0
- data/test/models/shipit/webhooks/handlers/pull_request/reopened_handler_test.rb +282 -0
- data/test/models/shipit/webhooks/handlers/pull_request/review_stack_adapter_test.rb +107 -0
- data/test/models/shipit/webhooks/handlers/pull_request/unlabeled_handler_test.rb +324 -0
- data/test/models/shipit/{wehbooks → webhooks}/handlers_test.rb +1 -0
- 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 +81 -1
- data/test/models/team_test.rb +4 -2
- data/test/models/undeployed_commits_test.rb +1 -0
- data/test/models/users_test.rb +13 -5
- data/test/serializers/shipit/pull_request_serializer_test.rb +29 -0
- data/test/test_command_integration.rb +3 -2
- data/test/test_helper.rb +49 -31
- data/test/unit/anonymous_user_serializer_test.rb +14 -0
- data/test/unit/command_test.rb +16 -10
- 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 +75 -18
- 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 +3 -3
- data/test/unit/github_apps_test.rb +416 -0
- data/test/unit/github_url_helper_test.rb +6 -0
- data/test/unit/rollback_commands_test.rb +2 -1
- data/test/unit/shipit_deployment_checks_test.rb +77 -0
- data/test/unit/shipit_helper_test.rb +17 -0
- data/test/unit/shipit_task_execution_strategy_test.rb +47 -0
- data/test/unit/shipit_test.rb +15 -0
- data/test/unit/user_serializer_test.rb +14 -0
- data/test/unit/variable_definition_test.rb +1 -0
- metadata +320 -178
- data/app/controllers/shipit/api/pull_requests_controller.rb +0 -36
- data/app/controllers/shipit/pull_requests_controller.rb +0 -30
- data/app/jobs/shipit/merge_pull_requests_job.rb +0 -31
- data/app/jobs/shipit/refresh_pull_request_job.rb +0 -10
- data/app/views/shipit/pull_requests/_pull_request.html.erb +0 -29
- data/test/controllers/pull_requests_controller_test.rb +0 -31
- data/test/fixtures/shipit/output_chunks.yml +0 -47
- data/test/models/output_chunk_test.rb +0 -20
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'test_helper'
|
|
3
|
+
|
|
4
|
+
module Shipit
|
|
5
|
+
class MergeRequestsControllerTest < ActionController::TestCase
|
|
6
|
+
setup do
|
|
7
|
+
@stack = shipit_stacks(:shipit)
|
|
8
|
+
@pr = shipit_merge_requests(:shipit_pending)
|
|
9
|
+
session[:user_id] = shipit_users(:walrus).id
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
test "#index shows pending pull requests" do
|
|
13
|
+
get :index, params: { stack_id: @stack.to_param }
|
|
14
|
+
assert_response :success
|
|
15
|
+
assert_select '.pr-list .pr', @stack.merge_requests.pending.count
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
test "#add can enqueue a pull request" do
|
|
19
|
+
assert_difference -> { MergeRequest.count }, +1 do
|
|
20
|
+
post :create, params: { stack_id: @stack.to_param, number_or_url: '#5' }
|
|
21
|
+
end
|
|
22
|
+
assert_redirected_to stack_merge_requests_path(@stack)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test "#destroy can cancel a pending pull request" do
|
|
26
|
+
assert_predicate @pr, :pending?
|
|
27
|
+
delete :destroy, params: { stack_id: @stack.to_param, id: @pr.id }
|
|
28
|
+
assert_redirected_to stack_merge_requests_path(@stack)
|
|
29
|
+
assert_predicate @pr.reload, :canceled?
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
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
|
|
@@ -47,7 +48,7 @@ module Shipit
|
|
|
47
48
|
merge_queue_enabled: true,
|
|
48
49
|
)
|
|
49
50
|
|
|
50
|
-
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' }
|
|
51
52
|
assert_response :ok
|
|
52
53
|
assert_includes response.body, 'shipit-engine/foo'
|
|
53
54
|
end
|
|
@@ -66,7 +67,7 @@ module Shipit
|
|
|
66
67
|
merge_queue_enabled: true,
|
|
67
68
|
)
|
|
68
69
|
|
|
69
|
-
get :show, params: {referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master'}
|
|
70
|
+
get :show, params: { referrer: 'https://github.com/Shopify/shipit-engine/pull/42', branch: 'master' }
|
|
70
71
|
assert_response :ok
|
|
71
72
|
assert_includes response.body, 'locked'
|
|
72
73
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -10,7 +11,7 @@ module Shipit
|
|
|
10
11
|
|
|
11
12
|
test ":create allow users to append release statuses and mark the deploy as success" do
|
|
12
13
|
assert_difference -> { ReleaseStatus.count }, +1 do
|
|
13
|
-
post :create, params: {stack_id: @stack, deploy_id: @deploy.id, status: 'success'}
|
|
14
|
+
post :create, params: { stack_id: @stack, deploy_id: @deploy.id, status: 'success' }
|
|
14
15
|
assert_response :created
|
|
15
16
|
end
|
|
16
17
|
|
|
@@ -23,7 +24,7 @@ module Shipit
|
|
|
23
24
|
|
|
24
25
|
test ":create allow users to append release statuses and mark the deploy as faulty" do
|
|
25
26
|
assert_difference -> { ReleaseStatus.count }, +1 do
|
|
26
|
-
post :create, params: {stack_id: @stack, deploy_id: @deploy.id, status: 'failure'}
|
|
27
|
+
post :create, params: { stack_id: @stack, deploy_id: @deploy.id, status: 'failure' }
|
|
27
28
|
assert_response :created
|
|
28
29
|
end
|
|
29
30
|
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'test_helper'
|
|
3
|
+
|
|
4
|
+
module Shipit
|
|
5
|
+
class RepositoriesControllerTest < ActionController::TestCase
|
|
6
|
+
setup do
|
|
7
|
+
@routes = Shipit::Engine.routes
|
|
8
|
+
@repository = shipit_repositories(:shipit)
|
|
9
|
+
session[:user_id] = shipit_users(:walrus).id
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
test "GitHub authentication is mandatory" do
|
|
13
|
+
session[:user_id] = nil
|
|
14
|
+
get :index
|
|
15
|
+
assert_redirected_to '/github/auth/github?origin=http%3A%2F%2Ftest.host%2Frepositories'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
test "current_user must be a member of at least a Shipit.github_teams" do
|
|
19
|
+
session[:user_id] = shipit_users(:bob).id
|
|
20
|
+
Shipit.stubs(:github_teams).returns([shipit_teams(:cyclimse_cooks), shipit_teams(:shopify_developers)])
|
|
21
|
+
get :index
|
|
22
|
+
assert_response :forbidden
|
|
23
|
+
assert_equal(
|
|
24
|
+
'You must be a member of cyclimse/cooks or shopify/developers to access this application.',
|
|
25
|
+
response.body,
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
test "#show is success" do
|
|
30
|
+
get :show, params: { id: @repository.to_param }
|
|
31
|
+
assert_response :ok
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
test "#create creates a repository and redirects to it" do
|
|
35
|
+
assert_difference "Repository.count" do
|
|
36
|
+
post :create, params: {
|
|
37
|
+
repository: {
|
|
38
|
+
name: 'valid',
|
|
39
|
+
owner: 'repository',
|
|
40
|
+
},
|
|
41
|
+
}
|
|
42
|
+
end
|
|
43
|
+
assert_redirected_to repository_path(Repository.last)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
test "#create when not valid renders new" do
|
|
47
|
+
assert_no_difference "Repository.count" do
|
|
48
|
+
post :create, params: {
|
|
49
|
+
repository: {
|
|
50
|
+
owner: 'some',
|
|
51
|
+
name: 'owner/path',
|
|
52
|
+
},
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
assert_response :success
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
test "#destroy enqueues a DestroyRepositoryJob" do
|
|
59
|
+
assert_enqueued_with(job: DestroyRepositoryJob, args: [@repository]) do
|
|
60
|
+
delete :destroy, params: { id: @repository.to_param }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
assert_redirected_to repositories_path
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
test "#settings is success" do
|
|
67
|
+
get :settings, params: { id: @repository.to_param }
|
|
68
|
+
assert_response :success
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -11,37 +12,37 @@ module Shipit
|
|
|
11
12
|
|
|
12
13
|
test ":create persists a new rollback" do
|
|
13
14
|
assert_difference '@stack.rollbacks.count', 1 do
|
|
14
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
|
|
15
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
|
|
15
16
|
end
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
test ":create can receive an :env hash" do
|
|
19
|
-
env = {'SAFETY_DISABLED' => '1'}
|
|
20
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id, env: env}}
|
|
20
|
+
env = { 'SAFETY_DISABLED' => '1' }
|
|
21
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id, env: env } }
|
|
21
22
|
new_rollback = Rollback.last
|
|
22
23
|
assert_equal env, new_rollback.env
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
test ":create ignore :env keys not declared in the deploy spec" do
|
|
26
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id, env: {'H4X0R' => '1'}}}
|
|
27
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id, env: { 'H4X0R' => '1' } } }
|
|
27
28
|
new_rollback = Rollback.last
|
|
28
29
|
assert_equal({}, new_rollback.env)
|
|
29
30
|
end
|
|
30
31
|
|
|
31
32
|
test ":create redirects to the new deploy" do
|
|
32
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
|
|
33
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
|
|
33
34
|
assert_redirected_to stack_deploy_path(@stack, Rollback.last)
|
|
34
35
|
end
|
|
35
36
|
|
|
36
37
|
test ":create locks deploys" do
|
|
37
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
|
|
38
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
|
|
38
39
|
assert @stack.reload.locked?
|
|
39
40
|
end
|
|
40
41
|
|
|
41
42
|
test ":create redirects back to the :new page if there is an active deploy" do
|
|
42
43
|
shipit_deploys(:shipit_running).update!(allow_concurrency: false, status: 'running')
|
|
43
44
|
assert_no_difference '@stack.deploys.count' do
|
|
44
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}}
|
|
45
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id } }
|
|
45
46
|
end
|
|
46
47
|
assert_redirected_to rollback_stack_deploy_path(@stack, @deploy)
|
|
47
48
|
end
|
|
@@ -49,7 +50,7 @@ module Shipit
|
|
|
49
50
|
test ":create with `force` option ignore the active deploys" do
|
|
50
51
|
shipit_deploys(:shipit_running).update_column(:status, 'running')
|
|
51
52
|
assert_difference '@stack.deploys.count', 1 do
|
|
52
|
-
post :create, params: {stack_id: @stack.to_param, rollback: {parent_id: @deploy.id}, force: 'true'}
|
|
53
|
+
post :create, params: { stack_id: @stack.to_param, rollback: { parent_id: @deploy.id }, force: 'true' }
|
|
53
54
|
end
|
|
54
55
|
assert_redirected_to stack_deploy_path(@stack, Rollback.last)
|
|
55
56
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -46,13 +47,32 @@ module Shipit
|
|
|
46
47
|
)
|
|
47
48
|
end
|
|
48
49
|
|
|
50
|
+
test "#index list all stacks" do
|
|
51
|
+
get :index, params: { show_archived: true }
|
|
52
|
+
assert_response :ok
|
|
53
|
+
assert_select ".stack", count: Stack.count
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
test "#index list all not archived stacks" do
|
|
57
|
+
get :index
|
|
58
|
+
assert_response :ok
|
|
59
|
+
assert_select ".stack", count: Stack.not_archived.count
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
test "#index list a repo stacks if the :repo params is passed" do
|
|
63
|
+
repo = shipit_repositories(:shipit)
|
|
64
|
+
get :index, params: { repo: repo.full_name }
|
|
65
|
+
assert_response :ok
|
|
66
|
+
assert_select ".stack", count: repo.stacks.count
|
|
67
|
+
end
|
|
68
|
+
|
|
49
69
|
test "#show is success" do
|
|
50
|
-
get :show, params: {id: @stack.to_param}
|
|
70
|
+
get :show, params: { id: @stack.to_param }
|
|
51
71
|
assert_response :ok
|
|
52
72
|
end
|
|
53
73
|
|
|
54
74
|
test "#show with faulty and validating deploys is success" do
|
|
55
|
-
get :show, params: {id: shipit_stacks(:shipit_canaries).to_param}
|
|
75
|
+
get :show, params: { id: shipit_stacks(:shipit_canaries).to_param }
|
|
56
76
|
assert_response :ok
|
|
57
77
|
end
|
|
58
78
|
|
|
@@ -60,18 +80,18 @@ module Shipit
|
|
|
60
80
|
@stack = shipit_stacks(:check_runs)
|
|
61
81
|
assert_not_equal 0, CheckRun.where(stack_id: @stack.id).count
|
|
62
82
|
|
|
63
|
-
get :show, params: {id: @stack.to_param}
|
|
83
|
+
get :show, params: { id: @stack.to_param }
|
|
64
84
|
assert_response :ok
|
|
65
85
|
end
|
|
66
86
|
|
|
67
87
|
test "#show handles locked stacks without a lock_author" do
|
|
68
88
|
@stack.update!(lock_reason: "I am a lock with no author")
|
|
69
|
-
get :show, params: {id: @stack.to_param}
|
|
89
|
+
get :show, params: { id: @stack.to_param }
|
|
70
90
|
end
|
|
71
91
|
|
|
72
92
|
test "#show auto-links URLs in lock reason" do
|
|
73
93
|
@stack.update!(lock_reason: 'http://google.com')
|
|
74
|
-
get :show, params: {id: @stack.to_param}
|
|
94
|
+
get :show, params: { id: @stack.to_param }
|
|
75
95
|
assert_response :ok
|
|
76
96
|
assert_select 'a[href="http://google.com"]'
|
|
77
97
|
end
|
|
@@ -93,38 +113,38 @@ module Shipit
|
|
|
93
113
|
|
|
94
114
|
test "#create when not valid renders new" do
|
|
95
115
|
assert_no_difference "Stack.count" do
|
|
96
|
-
post :create, params: {stack: {repo_owner: 'some', repo_name: 'owner/path'}}
|
|
116
|
+
post :create, params: { stack: { repo_owner: 'some', repo_name: 'owner/path' } }
|
|
97
117
|
end
|
|
98
118
|
assert_response :success
|
|
99
119
|
end
|
|
100
120
|
|
|
101
121
|
test "#destroy enqueues a DestroyStackJob" do
|
|
102
122
|
assert_enqueued_with(job: DestroyStackJob, args: [@stack]) do
|
|
103
|
-
delete :destroy, params: {id: @stack.to_param}
|
|
123
|
+
delete :destroy, params: { id: @stack.to_param }
|
|
104
124
|
end
|
|
105
125
|
assert_redirected_to stacks_path
|
|
106
126
|
end
|
|
107
127
|
|
|
108
128
|
test "#settings is success" do
|
|
109
|
-
get :settings, params: {id: @stack.to_param}
|
|
129
|
+
get :settings, params: { id: @stack.to_param }
|
|
110
130
|
assert_response :success
|
|
111
131
|
end
|
|
112
132
|
|
|
113
133
|
test "#statistics is success" do
|
|
114
|
-
get :statistics, params: {id: @stack.to_param}
|
|
134
|
+
get :statistics, params: { id: @stack.to_param }
|
|
115
135
|
assert_response :success
|
|
116
136
|
end
|
|
117
137
|
|
|
118
138
|
test "#statistics redirects to #show if no deploys are present" do
|
|
119
139
|
@stack.deploys.destroy_all
|
|
120
|
-
get :statistics, params: {id: @stack.to_param}
|
|
140
|
+
get :statistics, params: { id: @stack.to_param }
|
|
121
141
|
assert_redirected_to stack_path(@stack)
|
|
122
142
|
end
|
|
123
143
|
|
|
124
144
|
test "#update allows to lock the stack" do
|
|
125
145
|
refute @stack.locked?
|
|
126
146
|
|
|
127
|
-
patch :update, params: {id: @stack.to_param, stack: {lock_reason: 'Went out to eat some chips!'}}
|
|
147
|
+
patch :update, params: { id: @stack.to_param, stack: { lock_reason: 'Went out to eat some chips!' } }
|
|
128
148
|
@stack.reload
|
|
129
149
|
assert @stack.locked?
|
|
130
150
|
assert_equal shipit_users(:walrus), @stack.lock_author
|
|
@@ -134,7 +154,7 @@ module Shipit
|
|
|
134
154
|
@stack.update!(lock_reason: 'Went out to eat some chips!')
|
|
135
155
|
assert @stack.locked?
|
|
136
156
|
|
|
137
|
-
patch :update, params: {id: @stack.to_param, stack: {lock_reason: ''}}
|
|
157
|
+
patch :update, params: { id: @stack.to_param, stack: { lock_reason: '' } }
|
|
138
158
|
@stack.reload
|
|
139
159
|
refute @stack.locked?
|
|
140
160
|
assert_instance_of AnonymousUser, @stack.lock_author
|
|
@@ -144,7 +164,7 @@ module Shipit
|
|
|
144
164
|
refute @stack.archived?
|
|
145
165
|
refute @stack.locked?
|
|
146
166
|
|
|
147
|
-
patch :update, params: {id: @stack.to_param, stack: {archived: "true"}}
|
|
167
|
+
patch :update, params: { id: @stack.to_param, stack: { archived: "true" } }
|
|
148
168
|
@stack.reload
|
|
149
169
|
assert @stack.archived?
|
|
150
170
|
assert @stack.locked?
|
|
@@ -157,10 +177,12 @@ module Shipit
|
|
|
157
177
|
assert @stack.locked?
|
|
158
178
|
assert @stack.archived?
|
|
159
179
|
|
|
160
|
-
patch :update, params: {id: @stack.to_param, stack: {archived: "false"}}
|
|
180
|
+
patch :update, params: { id: @stack.to_param, stack: { archived: "false" } }
|
|
161
181
|
@stack.reload
|
|
162
182
|
refute @stack.archived?
|
|
163
183
|
refute @stack.locked?
|
|
184
|
+
assert_nil @stack.locked_since
|
|
185
|
+
assert_nil @stack.lock_reason
|
|
164
186
|
assert_instance_of AnonymousUser, @stack.lock_author
|
|
165
187
|
end
|
|
166
188
|
|
|
@@ -170,7 +192,7 @@ module Shipit
|
|
|
170
192
|
assert_enqueued_with(job: RefreshStatusesJob, args: [stack_id: @stack.id]) do
|
|
171
193
|
assert_enqueued_with(job: RefreshCheckRunsJob, args: [stack_id: @stack.id]) do
|
|
172
194
|
assert_enqueued_with(job: GithubSyncJob, args: [stack_id: @stack.id]) do
|
|
173
|
-
post :refresh, params: {id: @stack.to_param}
|
|
195
|
+
post :refresh, params: { id: @stack.to_param }
|
|
174
196
|
end
|
|
175
197
|
end
|
|
176
198
|
end
|
|
@@ -180,23 +202,23 @@ module Shipit
|
|
|
180
202
|
|
|
181
203
|
test "#clear_git_cache queues a ClearGitCacheJob" do
|
|
182
204
|
assert_enqueued_with(job: ClearGitCacheJob, args: [@stack]) do
|
|
183
|
-
post :clear_git_cache, params: {id: @stack.to_param}
|
|
205
|
+
post :clear_git_cache, params: { id: @stack.to_param }
|
|
184
206
|
end
|
|
185
207
|
assert_redirected_to stack_settings_path(@stack)
|
|
186
208
|
end
|
|
187
209
|
|
|
188
210
|
test "#clear_git_cache displays a flash message" do
|
|
189
|
-
post :clear_git_cache, params: {id: @stack.to_param}
|
|
211
|
+
post :clear_git_cache, params: { id: @stack.to_param }
|
|
190
212
|
assert_equal 'Git Cache clearing scheduled', flash[:success]
|
|
191
213
|
end
|
|
192
214
|
|
|
193
215
|
test "#update redirects to return_to parameter" do
|
|
194
|
-
patch :update, params: {id: @stack.to_param, stack: {ignore_ci: false}, return_to: stack_path(@stack)}
|
|
216
|
+
patch :update, params: { id: @stack.to_param, stack: { ignore_ci: false }, return_to: stack_path(@stack) }
|
|
195
217
|
assert_redirected_to stack_path(@stack)
|
|
196
218
|
end
|
|
197
219
|
|
|
198
220
|
test "#lookup redirects to the canonical URL" do
|
|
199
|
-
get :lookup, params: {id: @stack.id}
|
|
221
|
+
get :lookup, params: { id: @stack.id }
|
|
200
222
|
assert_redirected_to stack_path(@stack)
|
|
201
223
|
end
|
|
202
224
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -11,7 +12,7 @@ module Shipit
|
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
test "tasks defined in the shipit.yml can be displayed" do
|
|
14
|
-
get :new, params: {stack_id: @stack, definition_id: @definition.id}
|
|
15
|
+
get :new, params: { stack_id: @stack, definition_id: @definition.id }
|
|
15
16
|
assert_response :ok
|
|
16
17
|
end
|
|
17
18
|
|
|
@@ -20,7 +21,7 @@ module Shipit
|
|
|
20
21
|
|
|
21
22
|
assert_predicate @stack, :active_task?
|
|
22
23
|
assert_no_difference -> { @stack.tasks.count } do
|
|
23
|
-
post :create, params: {stack_id: @stack, definition_id: @definition.id}
|
|
24
|
+
post :create, params: { stack_id: @stack, definition_id: @definition.id }
|
|
24
25
|
end
|
|
25
26
|
assert_redirected_to new_stack_tasks_path(@stack, @definition)
|
|
26
27
|
end
|
|
@@ -30,7 +31,7 @@ module Shipit
|
|
|
30
31
|
|
|
31
32
|
assert_predicate @stack, :active_task?
|
|
32
33
|
assert_difference -> { @stack.tasks.count } do
|
|
33
|
-
post :create, params: {stack_id: @stack, definition_id: @definition.id, force: 'true'}
|
|
34
|
+
post :create, params: { stack_id: @stack, definition_id: @definition.id, force: 'true' }
|
|
34
35
|
end
|
|
35
36
|
assert_redirected_to stack_task_path(@stack, Task.last)
|
|
36
37
|
end
|
|
@@ -38,26 +39,26 @@ module Shipit
|
|
|
38
39
|
test "tasks defined in the shipit.yml can be triggered while the stack is being deployed if specified as such" do
|
|
39
40
|
@definition = @stack.find_task_definition('flush_cache')
|
|
40
41
|
assert_difference -> { @stack.tasks.count } do
|
|
41
|
-
post :create, params: {stack_id: @stack, definition_id: @definition.id}
|
|
42
|
+
post :create, params: { stack_id: @stack, definition_id: @definition.id }
|
|
42
43
|
end
|
|
43
44
|
assert_redirected_to stack_task_path(@stack, Task.last)
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
test "tasks with variables defined in the shipit.yml can be triggered with their variables set" do
|
|
47
|
-
env = {"FOO" => "0"}
|
|
48
|
+
env = { "FOO" => "0" }
|
|
48
49
|
|
|
49
|
-
post :create, params: {stack_id: @stack, definition_id: @definition.id, task: {env: env}, force: 'true'}
|
|
50
|
+
post :create, params: { stack_id: @stack, definition_id: @definition.id, task: { env: env }, force: 'true' }
|
|
50
51
|
|
|
51
52
|
assert_redirected_to stack_tasks_path(@stack, Task.last)
|
|
52
53
|
end
|
|
53
54
|
|
|
54
55
|
test "triggered tasks can be observed" do
|
|
55
|
-
get :show, params: {stack_id: @stack, id: @task.id}
|
|
56
|
+
get :show, params: { stack_id: @stack, id: @task.id }
|
|
56
57
|
assert_response :ok
|
|
57
58
|
end
|
|
58
59
|
|
|
59
60
|
test "triggered tasks can be observed as raw text" do
|
|
60
|
-
get :show, params: {stack_id: @stack, id: @task.id}, format: 'txt'
|
|
61
|
+
get :show, params: { stack_id: @stack, id: @task.id }, format: 'txt'
|
|
61
62
|
assert_response :success
|
|
62
63
|
assert_equal("text/plain", @response.media_type)
|
|
63
64
|
end
|
|
@@ -65,7 +66,7 @@ module Shipit
|
|
|
65
66
|
test ":abort call abort! on the deploy" do
|
|
66
67
|
@task = shipit_deploys(:shipit_running)
|
|
67
68
|
@task.ping
|
|
68
|
-
post :abort, params: {stack_id: @stack.to_param, id: @task.id}
|
|
69
|
+
post :abort, params: { stack_id: @stack.to_param, id: @task.id }
|
|
69
70
|
|
|
70
71
|
@task.reload
|
|
71
72
|
assert_response :success
|
|
@@ -77,7 +78,7 @@ module Shipit
|
|
|
77
78
|
test ":abort schedule the rollback if `rollback` is present" do
|
|
78
79
|
@task = shipit_deploys(:shipit_running)
|
|
79
80
|
@task.ping
|
|
80
|
-
post :abort, params: {stack_id: @stack.to_param, id: @task.id, rollback: 'true'}
|
|
81
|
+
post :abort, params: { stack_id: @stack.to_param, id: @task.id, rollback: 'true' }
|
|
81
82
|
|
|
82
83
|
@task.reload
|
|
83
84
|
assert_response :success
|
|
@@ -87,31 +88,43 @@ module Shipit
|
|
|
87
88
|
end
|
|
88
89
|
|
|
89
90
|
test ":index list the stack deploys" do
|
|
90
|
-
get :index, params: {stack_id: @stack.to_param}
|
|
91
|
+
get :index, params: { stack_id: @stack.to_param }
|
|
91
92
|
assert_response :success
|
|
92
93
|
assert_select '.task-list .task', @stack.tasks.count
|
|
93
94
|
end
|
|
94
95
|
|
|
95
96
|
test ":index paginates with the `since` parameter" do
|
|
96
|
-
get :index, params: {stack_id: @stack.to_param, since: @stack.tasks.last.id}
|
|
97
|
+
get :index, params: { stack_id: @stack.to_param, since: @stack.tasks.last.id }
|
|
97
98
|
assert_response :success
|
|
98
99
|
assert_select '.task-list .task', @stack.tasks.count - 1
|
|
99
100
|
end
|
|
100
101
|
|
|
101
102
|
test ":tail returns the task status, output, and next url" do
|
|
102
103
|
@task = shipit_deploys(:shipit_running)
|
|
103
|
-
|
|
104
|
+
@task.write("dummy output")
|
|
105
|
+
last_chunk = @task.chunk_output.bytesize
|
|
104
106
|
|
|
105
|
-
get :tail, params: {stack_id: @stack.to_param, id: @task.id
|
|
107
|
+
get :tail, params: { stack_id: @stack.to_param, id: @task.id }, format: :json
|
|
106
108
|
assert_response :success
|
|
107
109
|
assert_json_keys %w(url status output)
|
|
108
110
|
assert_json 'status', @task.status
|
|
111
|
+
assert_json 'output', @task.chunk_output
|
|
112
|
+
assert_json 'url', "/shopify/shipit-engine/production/tasks/#{@task.id}/tail?last_byte=#{last_chunk}"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
test ":tail can handle last_byte as string" do
|
|
116
|
+
@task = shipit_deploys(:shipit_running)
|
|
117
|
+
@task.write("dummy output")
|
|
118
|
+
|
|
119
|
+
get :tail, params: { stack_id: @stack.to_param, id: @task.id, last_byte: "50" }, format: :json
|
|
120
|
+
assert_response :success
|
|
121
|
+
assert_json_keys %w(url status output)
|
|
109
122
|
end
|
|
110
123
|
|
|
111
124
|
test ":tail doesn't returns the next url if the task is finished" do
|
|
112
125
|
@task = shipit_deploys(:shipit)
|
|
113
126
|
|
|
114
|
-
get :tail, params: {stack_id: @stack.to_param, id: @task.id}, format: :json
|
|
127
|
+
get :tail, params: { stack_id: @stack.to_param, id: @task.id }, format: :json
|
|
115
128
|
assert_response :success
|
|
116
129
|
assert_no_json 'url'
|
|
117
130
|
end
|
|
@@ -119,7 +132,7 @@ module Shipit
|
|
|
119
132
|
test ":tail returns the rollback url if the task have been aborted" do
|
|
120
133
|
@task = shipit_deploys(:shipit_aborted)
|
|
121
134
|
|
|
122
|
-
get :tail, params: {stack_id: @stack.to_param, id: @task.id}, format: :json
|
|
135
|
+
get :tail, params: { stack_id: @stack.to_param, id: @task.id }, format: :json
|
|
123
136
|
assert_response :success
|
|
124
137
|
assert_json_keys %w(status output rollback_url)
|
|
125
138
|
end
|
|
@@ -127,7 +140,7 @@ module Shipit
|
|
|
127
140
|
test ":lookup returns stack task url if the task is an instance of Task" do
|
|
128
141
|
@task = shipit_tasks(:shipit_restart)
|
|
129
142
|
|
|
130
|
-
get :lookup, params: {id: @task.id}
|
|
143
|
+
get :lookup, params: { id: @task.id }
|
|
131
144
|
|
|
132
145
|
assert_redirected_to stack_task_path(@task.stack, @task)
|
|
133
146
|
end
|
|
@@ -135,7 +148,7 @@ module Shipit
|
|
|
135
148
|
test ":lookup returns stack deploy url if the task is an instance of Deploy" do
|
|
136
149
|
@task = shipit_tasks(:shipit)
|
|
137
150
|
|
|
138
|
-
get :lookup, params: {id: @task.id}
|
|
151
|
+
get :lookup, params: { id: @task.id }
|
|
139
152
|
|
|
140
153
|
assert_redirected_to stack_deploy_path(@task.stack, @task)
|
|
141
154
|
end
|
|
@@ -143,7 +156,7 @@ module Shipit
|
|
|
143
156
|
test ":lookup returns stack deploy url if the task is an instance of Rollback" do
|
|
144
157
|
@task = shipit_tasks(:shipit_rollback)
|
|
145
158
|
|
|
146
|
-
get :lookup, params: {id: @task.id}
|
|
159
|
+
get :lookup, params: { id: @task.id }
|
|
147
160
|
|
|
148
161
|
assert_redirected_to stack_deploy_path(@task.stack, @task)
|
|
149
162
|
end
|