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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -23,7 +24,7 @@ module Shipit
|
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
test "#send! post the payload and update the status to `sent`" do
|
|
26
|
-
headers = {'content-type' => 'text/plain', 'content-length' => '2'}
|
|
27
|
+
headers = { 'content-type' => 'text/plain', 'content-length' => '2' }
|
|
27
28
|
stub_request(:post, @delivery.url).to_return(headers: headers, body: 'OK')
|
|
28
29
|
|
|
29
30
|
assert_equal 'scheduled', @delivery.status
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'test_helper'
|
|
2
3
|
|
|
3
4
|
module Shipit
|
|
@@ -22,7 +23,7 @@ module Shipit
|
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
test '#supports_rollback? returns true if steps are defined' do
|
|
25
|
-
@spec.stubs(:load_config).returns('rollback' => {'override' => ['rm -rf /usr /lib/nvidia-current/xorg/xorg']})
|
|
26
|
+
@spec.stubs(:load_config).returns('rollback' => { 'override' => ['rm -rf /usr /lib/nvidia-current/xorg/xorg'] })
|
|
26
27
|
assert @spec.supports_rollback?
|
|
27
28
|
end
|
|
28
29
|
|
|
@@ -32,7 +33,7 @@ module Shipit
|
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
test '#dependencies_steps returns `dependencies.override` if present' do
|
|
35
|
-
@spec.stubs(:load_config).returns('dependencies' => {'override' => %w(foo bar baz)})
|
|
36
|
+
@spec.stubs(:load_config).returns('dependencies' => { 'override' => %w(foo bar baz) })
|
|
36
37
|
assert_equal %w(foo bar baz), @spec.dependencies_steps
|
|
37
38
|
end
|
|
38
39
|
|
|
@@ -43,7 +44,7 @@ module Shipit
|
|
|
43
44
|
end
|
|
44
45
|
|
|
45
46
|
test "#dependencies_steps prepend and append pre and post steps" do
|
|
46
|
-
@spec.stubs(:load_config).returns('dependencies' => {'pre' => ['before'], 'post' => ['after']})
|
|
47
|
+
@spec.stubs(:load_config).returns('dependencies' => { 'pre' => ['before'], 'post' => ['after'] })
|
|
47
48
|
@spec.expects(:bundler?).returns(true).at_least_once
|
|
48
49
|
@spec.expects(:bundle_install).returns(['bundle install'])
|
|
49
50
|
assert_equal ['before', 'bundle install', 'after'], @spec.dependencies_steps
|
|
@@ -75,7 +76,7 @@ module Shipit
|
|
|
75
76
|
|
|
76
77
|
test '#bundle_install use `dependencies.bundler.without` if present to build the --without argument' do
|
|
77
78
|
@spec.stubs(:gemfile_lock_exists?).returns(true)
|
|
78
|
-
@spec.stubs(:load_config).returns('dependencies' => {'bundler' => {'without' => %w(some custom groups)}})
|
|
79
|
+
@spec.stubs(:load_config).returns('dependencies' => { 'bundler' => { 'without' => %w(some custom groups) } })
|
|
79
80
|
command = %(
|
|
80
81
|
bundle install
|
|
81
82
|
--frozen
|
|
@@ -88,25 +89,31 @@ module Shipit
|
|
|
88
89
|
end
|
|
89
90
|
|
|
90
91
|
test '#bundle_install has --frozen option if Gemfile.lock is present' do
|
|
91
|
-
@spec.stubs(:load_config).returns('dependencies' => {'bundler' => {'without' => %w(some custom groups)}})
|
|
92
|
+
@spec.stubs(:load_config).returns('dependencies' => { 'bundler' => { 'without' => %w(some custom groups) } })
|
|
92
93
|
@spec.stubs(:gemfile_lock_exists?).returns(true)
|
|
93
94
|
assert @spec.bundle_install.last.include?('--frozen')
|
|
94
95
|
end
|
|
95
96
|
|
|
96
97
|
test '#bundle_install does not have --frozen option if Gemfile.lock is not present' do
|
|
97
|
-
@spec.stubs(:load_config).returns('dependencies' => {'bundler' => {'without' => %w(some custom groups)}})
|
|
98
|
+
@spec.stubs(:load_config).returns('dependencies' => { 'bundler' => { 'without' => %w(some custom groups) } })
|
|
98
99
|
@spec.stubs(:gemfile_lock_exists?).returns(false)
|
|
99
100
|
refute @spec.bundle_install.last.include?('--frozen')
|
|
100
101
|
end
|
|
101
102
|
|
|
102
103
|
test '#bundle_install does not have --frozen if overridden in shipit.yml' do
|
|
103
|
-
@spec.stubs(:load_config).returns('dependencies' => {'bundler' => {'frozen' => false}})
|
|
104
|
+
@spec.stubs(:load_config).returns('dependencies' => { 'bundler' => { 'frozen' => false } })
|
|
104
105
|
@spec.stubs(:gemfile_lock_exists?).returns(true)
|
|
105
106
|
refute @spec.bundle_install.last.include?('--frozen')
|
|
106
107
|
end
|
|
107
108
|
|
|
109
|
+
test "#provisioning_handler returns `provision.handler` if present" do
|
|
110
|
+
@spec.stubs(:load_config).returns('provision' => { 'handler_name' => 'ExpectedProvisioningHandler' })
|
|
111
|
+
|
|
112
|
+
assert_equal "ExpectedProvisioningHandler", @spec.provisioning_handler_name
|
|
113
|
+
end
|
|
114
|
+
|
|
108
115
|
test '#deploy_steps returns `deploy.override` if present' do
|
|
109
|
-
@spec.stubs(:load_config).returns('deploy' => {'override' => %w(foo bar baz)})
|
|
116
|
+
@spec.stubs(:load_config).returns('deploy' => { 'override' => %w(foo bar baz) })
|
|
110
117
|
assert_equal %w(foo bar baz), @spec.deploy_steps
|
|
111
118
|
end
|
|
112
119
|
|
|
@@ -161,7 +168,7 @@ module Shipit
|
|
|
161
168
|
end
|
|
162
169
|
|
|
163
170
|
test "#deploy_steps prepend and append pre and post steps" do
|
|
164
|
-
@spec.stubs(:load_config).returns('deploy' => {'pre' => ['before'], 'post' => ['after']})
|
|
171
|
+
@spec.stubs(:load_config).returns('deploy' => { 'pre' => ['before'], 'post' => ['after'] })
|
|
165
172
|
@spec.expects(:bundler?).returns(true).at_least_once
|
|
166
173
|
@spec.expects(:capistrano?).returns(true)
|
|
167
174
|
assert_equal ['before', 'bundle exec cap $ENVIRONMENT deploy', 'after'], @spec.deploy_steps
|
|
@@ -174,11 +181,31 @@ module Shipit
|
|
|
174
181
|
end
|
|
175
182
|
end
|
|
176
183
|
|
|
184
|
+
test '#retries_on_deploy returns `deploy.retries` if present' do
|
|
185
|
+
@spec.stubs(:load_config).returns('deploy' => { 'retries' => 5 })
|
|
186
|
+
assert_equal 5, @spec.retries_on_deploy
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
test '#retries_on_deploy returns a default value if `deploy.retries` is not present' do
|
|
190
|
+
@spec.stubs(:load_config).returns('deploy' => {})
|
|
191
|
+
assert_nil @spec.retries_on_deploy
|
|
192
|
+
end
|
|
193
|
+
|
|
177
194
|
test '#rollback_steps returns `rollback.override` if present' do
|
|
178
|
-
@spec.stubs(:load_config).returns('rollback' => {'override' => %w(foo bar baz)})
|
|
195
|
+
@spec.stubs(:load_config).returns('rollback' => { 'override' => %w(foo bar baz) })
|
|
179
196
|
assert_equal %w(foo bar baz), @spec.rollback_steps
|
|
180
197
|
end
|
|
181
198
|
|
|
199
|
+
test '#retries_on_rollback returns `rollback.retries` if present' do
|
|
200
|
+
@spec.stubs(:load_config).returns('rollback' => { 'retries' => 5 })
|
|
201
|
+
assert_equal 5, @spec.retries_on_rollback
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
test '#retries_on_rollback returns a default value if `rollback.retries` is not present' do
|
|
205
|
+
@spec.stubs(:load_config).returns('rollback' => {})
|
|
206
|
+
assert_nil @spec.retries_on_rollback
|
|
207
|
+
end
|
|
208
|
+
|
|
182
209
|
test '#rollback_steps returns `cap $ENVIRONMENT deploy:rollback` if a `Capfile` is present' do
|
|
183
210
|
@spec.expects(:bundler?).returns(true).at_least_once
|
|
184
211
|
@spec.expects(:capistrano?).returns(true)
|
|
@@ -186,7 +213,7 @@ module Shipit
|
|
|
186
213
|
end
|
|
187
214
|
|
|
188
215
|
test "#rollback_steps prepend and append pre and post steps" do
|
|
189
|
-
@spec.stubs(:load_config).returns('rollback' => {'pre' => ['before'], 'post' => ['after']})
|
|
216
|
+
@spec.stubs(:load_config).returns('rollback' => { 'pre' => ['before'], 'post' => ['after'] })
|
|
190
217
|
@spec.expects(:bundler?).returns(true).at_least_once
|
|
191
218
|
@spec.expects(:capistrano?).returns(true)
|
|
192
219
|
assert_equal ['before', 'bundle exec cap $ENVIRONMENT deploy:rollback', 'after'], @spec.rollback_steps
|
|
@@ -255,14 +282,14 @@ module Shipit
|
|
|
255
282
|
end
|
|
256
283
|
|
|
257
284
|
test '#machine_env returns an environment hash' do
|
|
258
|
-
@spec.stubs(:load_config).returns('machine' => {'environment' => {'GLOBAL' => '1'}})
|
|
259
|
-
assert_equal({'GLOBAL' => '1'}, @spec.machine_env)
|
|
285
|
+
@spec.stubs(:load_config).returns('machine' => { 'environment' => { 'GLOBAL' => '1' } })
|
|
286
|
+
assert_equal({ 'GLOBAL' => '1' }, @spec.machine_env)
|
|
260
287
|
end
|
|
261
288
|
|
|
262
289
|
test '#load_config can grab the env-specific shipit.yml file' do
|
|
263
290
|
config = {}
|
|
264
291
|
config.expects(:exist?).returns(true)
|
|
265
|
-
config.expects(:read).returns({'dependencies' => {'override' => %w(foo bar baz)}}.to_yaml)
|
|
292
|
+
config.expects(:read).returns({ 'dependencies' => { 'override' => %w(foo bar baz) } }.to_yaml)
|
|
266
293
|
spec = DeploySpec::FileSystem.new('.', 'staging')
|
|
267
294
|
spec.expects(:file).with('shipit.staging.yml', root: true).returns(config)
|
|
268
295
|
assert_equal %w(foo bar baz), spec.dependencies_steps
|
|
@@ -274,7 +301,7 @@ module Shipit
|
|
|
274
301
|
|
|
275
302
|
config = {}
|
|
276
303
|
config.expects(:exist?).returns(true)
|
|
277
|
-
config.expects(:read).returns({'dependencies' => {'override' => %w(foo bar baz)}}.to_yaml)
|
|
304
|
+
config.expects(:read).returns({ 'dependencies' => { 'override' => %w(foo bar baz) } }.to_yaml)
|
|
278
305
|
|
|
279
306
|
spec = DeploySpec::FileSystem.new('.', 'staging')
|
|
280
307
|
spec.expects(:file).with('shipit.staging.yml', root: true).returns(not_config)
|
|
@@ -352,24 +379,31 @@ module Shipit
|
|
|
352
379
|
'blocking' => [],
|
|
353
380
|
},
|
|
354
381
|
'machine' => {
|
|
355
|
-
'environment' => {'BUNDLE_PATH' => @spec.bundle_path.to_s},
|
|
382
|
+
'environment' => { 'BUNDLE_PATH' => @spec.bundle_path.to_s },
|
|
356
383
|
'directory' => nil,
|
|
357
384
|
'cleanup' => true,
|
|
358
385
|
},
|
|
359
|
-
'review' => {'checklist' => [], 'monitoring' => [], 'checks' => []},
|
|
386
|
+
'review' => { 'checklist' => [], 'monitoring' => [], 'checks' => [] },
|
|
360
387
|
'status' => {
|
|
361
388
|
'context' => nil,
|
|
362
389
|
'delay' => 0,
|
|
363
390
|
},
|
|
364
|
-
'dependencies' => {'override' => []},
|
|
391
|
+
'dependencies' => { 'override' => [] },
|
|
365
392
|
'plugins' => {},
|
|
393
|
+
'provision' => {
|
|
394
|
+
'handler_name' => nil,
|
|
395
|
+
},
|
|
366
396
|
'deploy' => {
|
|
367
397
|
'override' => nil,
|
|
368
398
|
'variables' => [],
|
|
369
399
|
'max_commits' => 8,
|
|
370
400
|
'interval' => 0,
|
|
401
|
+
'retries' => nil,
|
|
402
|
+
},
|
|
403
|
+
'rollback' => {
|
|
404
|
+
'override' => nil,
|
|
405
|
+
'retries' => nil,
|
|
371
406
|
},
|
|
372
|
-
'rollback' => {'override' => nil},
|
|
373
407
|
'fetch' => nil,
|
|
374
408
|
'tasks' => {},
|
|
375
409
|
}
|
|
@@ -381,11 +415,11 @@ module Shipit
|
|
|
381
415
|
end
|
|
382
416
|
|
|
383
417
|
test "#deploy_variables returns an array of VariableDefinition instances" do
|
|
384
|
-
@spec.stubs(:load_config).returns('deploy' => {'variables' => [{
|
|
418
|
+
@spec.stubs(:load_config).returns('deploy' => { 'variables' => [{
|
|
385
419
|
'name' => 'SAFETY_DISABLED',
|
|
386
420
|
'title' => 'Set to 1 to do dangerous things',
|
|
387
421
|
'default' => 0,
|
|
388
|
-
}]})
|
|
422
|
+
}] })
|
|
389
423
|
|
|
390
424
|
assert_equal 1, @spec.deploy_variables.size
|
|
391
425
|
variable_definition = @spec.deploy_variables.first
|
|
@@ -393,13 +427,13 @@ module Shipit
|
|
|
393
427
|
end
|
|
394
428
|
|
|
395
429
|
test "task definitions don't prepend bundle exec by default" do
|
|
396
|
-
@spec.expects(:load_config).returns('tasks' => {'restart' => {'steps' => %w(foo)}})
|
|
430
|
+
@spec.expects(:load_config).returns('tasks' => { 'restart' => { 'steps' => %w(foo) } })
|
|
397
431
|
definition = @spec.find_task_definition('restart')
|
|
398
432
|
assert_equal ['foo'], definition.steps
|
|
399
433
|
end
|
|
400
434
|
|
|
401
435
|
test "task definitions don't bundle exec before serialization" do
|
|
402
|
-
@spec.expects(:discover_task_definitions).returns('restart' => {'steps' => %w(foo)})
|
|
436
|
+
@spec.expects(:discover_task_definitions).returns('restart' => { 'steps' => %w(foo) })
|
|
403
437
|
@spec.expects(:bundler?).returns(true).at_least_once
|
|
404
438
|
|
|
405
439
|
cached_spec = DeploySpec.load(DeploySpec.dump(@spec))
|
|
@@ -418,18 +452,18 @@ module Shipit
|
|
|
418
452
|
module TestTaskDiscovery
|
|
419
453
|
def discover_task_definitions
|
|
420
454
|
{
|
|
421
|
-
'config_task' => {'steps' => %w(bar)},
|
|
455
|
+
'config_task' => { 'steps' => %w(bar) },
|
|
422
456
|
}.merge!(super)
|
|
423
457
|
end
|
|
424
458
|
end
|
|
425
459
|
|
|
426
460
|
# Include the module in our new test class
|
|
427
|
-
DuplicateCustomizedDeploySpec.include
|
|
461
|
+
DuplicateCustomizedDeploySpec.include(TestTaskDiscovery)
|
|
428
462
|
|
|
429
463
|
# Setup the spec as we would normally, but use the customized version
|
|
430
464
|
@spec = DuplicateCustomizedDeploySpec.new(@app_dir, 'env')
|
|
431
465
|
@spec.stubs(:load_config).returns(
|
|
432
|
-
'tasks' => {'config_task' => {'steps' => %w(foo)}},
|
|
466
|
+
'tasks' => { 'config_task' => { 'steps' => %w(foo) } },
|
|
433
467
|
)
|
|
434
468
|
tasks = @spec.task_definitions
|
|
435
469
|
|
|
@@ -448,18 +482,18 @@ module Shipit
|
|
|
448
482
|
module TestTaskDiscovery
|
|
449
483
|
def discover_task_definitions
|
|
450
484
|
{
|
|
451
|
-
'module_task' => {'steps' => %w(bar)},
|
|
485
|
+
'module_task' => { 'steps' => %w(bar) },
|
|
452
486
|
}.merge(super)
|
|
453
487
|
end
|
|
454
488
|
end
|
|
455
489
|
|
|
456
490
|
# Include the module in our new test class
|
|
457
|
-
CustomizedDeploySpec.include
|
|
491
|
+
CustomizedDeploySpec.include(TestTaskDiscovery)
|
|
458
492
|
|
|
459
493
|
# Setup the spec as we would normally, but use the customized version
|
|
460
494
|
@spec = CustomizedDeploySpec.new(@app_dir, 'env')
|
|
461
495
|
@spec.stubs(:load_config).returns(
|
|
462
|
-
'tasks' => {'config_task' => {'steps' => %w(foo)}},
|
|
496
|
+
'tasks' => { 'config_task' => { 'steps' => %w(foo) } },
|
|
463
497
|
'kubernetes' => {
|
|
464
498
|
'namespace' => 'foo',
|
|
465
499
|
'context' => 'bar',
|
|
@@ -484,7 +518,7 @@ module Shipit
|
|
|
484
518
|
|
|
485
519
|
test "task definitions returns an array of VariableDefinition instances" do
|
|
486
520
|
@spec.expects(:load_config).returns('tasks' =>
|
|
487
|
-
{'restart' =>
|
|
521
|
+
{ 'restart' =>
|
|
488
522
|
{
|
|
489
523
|
'variables' => [
|
|
490
524
|
{
|
|
@@ -499,8 +533,7 @@ module Shipit
|
|
|
499
533
|
},
|
|
500
534
|
],
|
|
501
535
|
'steps' => %w(foo),
|
|
502
|
-
}
|
|
503
|
-
})
|
|
536
|
+
} })
|
|
504
537
|
|
|
505
538
|
assert_equal 2, @spec.task_definitions.first.variables.size
|
|
506
539
|
variable_definition = @spec.task_definitions.first.variables.first
|
|
@@ -512,7 +545,7 @@ module Shipit
|
|
|
512
545
|
end
|
|
513
546
|
|
|
514
547
|
test "#review_checklist returns an array" do
|
|
515
|
-
@spec.expects(:load_config).returns('review' => {'checklist' => %w(foo bar)})
|
|
548
|
+
@spec.expects(:load_config).returns('review' => { 'checklist' => %w(foo bar) })
|
|
516
549
|
assert_equal %w(foo bar), @spec.review_checklist
|
|
517
550
|
end
|
|
518
551
|
|
|
@@ -521,13 +554,13 @@ module Shipit
|
|
|
521
554
|
end
|
|
522
555
|
|
|
523
556
|
test "#review_monitoring returns an array of hashes" do
|
|
524
|
-
@spec.expects(:load_config).returns('review' => {'monitoring' => [
|
|
525
|
-
{'image' => 'http://example.com/foo.png', 'width' => 200, 'height' => 400},
|
|
526
|
-
{'iframe' => 'http://example.com/', 'width' => 200, 'height' => 400},
|
|
527
|
-
]})
|
|
557
|
+
@spec.expects(:load_config).returns('review' => { 'monitoring' => [
|
|
558
|
+
{ 'image' => 'http://example.com/foo.png', 'width' => 200, 'height' => 400 },
|
|
559
|
+
{ 'iframe' => 'http://example.com/', 'width' => 200, 'height' => 400 },
|
|
560
|
+
] })
|
|
528
561
|
assert_equal [
|
|
529
|
-
{'image' => 'http://example.com/foo.png', 'width' => 200, 'height' => 400},
|
|
530
|
-
{'iframe' => 'http://example.com/', 'width' => 200, 'height' => 400},
|
|
562
|
+
{ 'image' => 'http://example.com/foo.png', 'width' => 200, 'height' => 400 },
|
|
563
|
+
{ 'iframe' => 'http://example.com/', 'width' => 200, 'height' => 400 },
|
|
531
564
|
], @spec.review_monitoring
|
|
532
565
|
end
|
|
533
566
|
|
|
@@ -540,12 +573,12 @@ module Shipit
|
|
|
540
573
|
end
|
|
541
574
|
|
|
542
575
|
test "#hidden_statuses is an array even if the value is a string" do
|
|
543
|
-
@spec.expects(:load_config).returns('ci' => {'hide' => 'ci/circleci'})
|
|
576
|
+
@spec.expects(:load_config).returns('ci' => { 'hide' => 'ci/circleci' })
|
|
544
577
|
assert_equal %w(ci/circleci), @spec.hidden_statuses
|
|
545
578
|
end
|
|
546
579
|
|
|
547
580
|
test "#hidden_statuses is an array even if the value is present" do
|
|
548
|
-
@spec.expects(:load_config).returns('ci' => {'hide' => %w(ci/circleci ci/jenkins)})
|
|
581
|
+
@spec.expects(:load_config).returns('ci' => { 'hide' => %w(ci/circleci ci/jenkins) })
|
|
549
582
|
assert_equal %w(ci/circleci ci/jenkins), @spec.hidden_statuses
|
|
550
583
|
end
|
|
551
584
|
|
|
@@ -559,40 +592,40 @@ module Shipit
|
|
|
559
592
|
assert_equal %w(ci/circleci soc/compliance), @spec.required_statuses
|
|
560
593
|
end
|
|
561
594
|
|
|
562
|
-
test "
|
|
595
|
+
test "merge_request_merge_method defaults to `nil`" do
|
|
563
596
|
@spec.expects(:load_config).returns({})
|
|
564
|
-
assert_nil @spec.
|
|
597
|
+
assert_nil @spec.merge_request_merge_method
|
|
565
598
|
end
|
|
566
599
|
|
|
567
|
-
test "
|
|
600
|
+
test "merge_request_merge_method returns `merge.method`" do
|
|
568
601
|
@spec.expects(:load_config).returns(
|
|
569
602
|
'merge' => {
|
|
570
603
|
'method' => 'squash',
|
|
571
604
|
},
|
|
572
605
|
)
|
|
573
|
-
assert_equal 'squash', @spec.
|
|
606
|
+
assert_equal 'squash', @spec.merge_request_merge_method
|
|
574
607
|
end
|
|
575
608
|
|
|
576
|
-
test "
|
|
609
|
+
test "merge_request_merge_method returns `nil` if `merge.method` is invalid" do
|
|
577
610
|
@spec.expects(:load_config).returns(
|
|
578
611
|
'merge' => {
|
|
579
612
|
'method' => 'squashing',
|
|
580
613
|
},
|
|
581
614
|
)
|
|
582
|
-
assert_nil @spec.
|
|
615
|
+
assert_nil @spec.merge_request_merge_method
|
|
583
616
|
end
|
|
584
617
|
|
|
585
|
-
test "
|
|
618
|
+
test "merge_request_ignored_statuses defaults to the union of ci.hide and ci.allow_failures" do
|
|
586
619
|
@spec.expects(:load_config).returns(
|
|
587
620
|
'ci' => {
|
|
588
621
|
'hide' => %w(ci/circleci ci/jenkins),
|
|
589
622
|
'allow_failures' => %w(ci/circleci ci/travis),
|
|
590
623
|
},
|
|
591
624
|
)
|
|
592
|
-
assert_equal %w(ci/circleci ci/jenkins ci/travis).sort, @spec.
|
|
625
|
+
assert_equal %w(ci/circleci ci/jenkins ci/travis).sort, @spec.merge_request_ignored_statuses.sort
|
|
593
626
|
end
|
|
594
627
|
|
|
595
|
-
test "
|
|
628
|
+
test "merge_request_ignored_statuses defaults to empty if `merge.require` is present" do
|
|
596
629
|
@spec.expects(:load_config).returns(
|
|
597
630
|
'merge' => {
|
|
598
631
|
'require' => 'bar',
|
|
@@ -602,10 +635,10 @@ module Shipit
|
|
|
602
635
|
'allow_failures' => %w(ci/circleci ci/travis),
|
|
603
636
|
},
|
|
604
637
|
)
|
|
605
|
-
assert_equal [], @spec.
|
|
638
|
+
assert_equal [], @spec.merge_request_ignored_statuses
|
|
606
639
|
end
|
|
607
640
|
|
|
608
|
-
test "
|
|
641
|
+
test "merge_request_ignored_statuses returns `merge.ignore` if present" do
|
|
609
642
|
@spec.expects(:load_config).returns(
|
|
610
643
|
'merge' => {
|
|
611
644
|
'ignore' => 'bar',
|
|
@@ -615,19 +648,19 @@ module Shipit
|
|
|
615
648
|
'allow_failures' => %w(ci/circleci ci/travis),
|
|
616
649
|
},
|
|
617
650
|
)
|
|
618
|
-
assert_equal ['bar'], @spec.
|
|
651
|
+
assert_equal ['bar'], @spec.merge_request_ignored_statuses
|
|
619
652
|
end
|
|
620
653
|
|
|
621
|
-
test "
|
|
654
|
+
test "merge_request_required_statuses defaults to ci.require" do
|
|
622
655
|
@spec.expects(:load_config).returns(
|
|
623
656
|
'ci' => {
|
|
624
657
|
'require' => %w(ci/circleci ci/jenkins),
|
|
625
658
|
},
|
|
626
659
|
)
|
|
627
|
-
assert_equal %w(ci/circleci ci/jenkins), @spec.
|
|
660
|
+
assert_equal %w(ci/circleci ci/jenkins), @spec.merge_request_required_statuses
|
|
628
661
|
end
|
|
629
662
|
|
|
630
|
-
test "
|
|
663
|
+
test "merge_request_required_statuses defaults to empty if `merge.ignore` is present" do
|
|
631
664
|
@spec.expects(:load_config).returns(
|
|
632
665
|
'merge' => {
|
|
633
666
|
'ignore' => 'bar',
|
|
@@ -636,10 +669,10 @@ module Shipit
|
|
|
636
669
|
'require' => %w(ci/circleci ci/jenkins),
|
|
637
670
|
},
|
|
638
671
|
)
|
|
639
|
-
assert_equal [], @spec.
|
|
672
|
+
assert_equal [], @spec.merge_request_required_statuses
|
|
640
673
|
end
|
|
641
674
|
|
|
642
|
-
test "
|
|
675
|
+
test "merge_request_required_statuses returns `merge.require` if present" do
|
|
643
676
|
@spec.expects(:load_config).returns(
|
|
644
677
|
'merge' => {
|
|
645
678
|
'require' => 'bar',
|
|
@@ -649,21 +682,21 @@ module Shipit
|
|
|
649
682
|
'allow_failures' => %w(ci/circleci ci/travis),
|
|
650
683
|
},
|
|
651
684
|
)
|
|
652
|
-
assert_equal ['bar'], @spec.
|
|
685
|
+
assert_equal ['bar'], @spec.merge_request_required_statuses
|
|
653
686
|
end
|
|
654
687
|
|
|
655
|
-
test "
|
|
688
|
+
test "revalidate_merge_requests_after defaults to `nil" do
|
|
656
689
|
@spec.expects(:load_config).returns({})
|
|
657
|
-
assert_nil @spec.
|
|
690
|
+
assert_nil @spec.revalidate_merge_requests_after
|
|
658
691
|
end
|
|
659
692
|
|
|
660
|
-
test "
|
|
693
|
+
test "revalidate_merge_requests_after defaults to `nil` if `merge.timeout` cannot be parsed" do
|
|
661
694
|
@spec.expects(:load_config).returns(
|
|
662
695
|
'merge' => {
|
|
663
696
|
'revalidate_after' => 'ALSKhfjsdkf',
|
|
664
697
|
},
|
|
665
698
|
)
|
|
666
|
-
assert_nil @spec.
|
|
699
|
+
assert_nil @spec.revalidate_merge_requests_after
|
|
667
700
|
end
|
|
668
701
|
|
|
669
702
|
test "revalidate_after returns `merge.revalidate_after` if present" do
|
|
@@ -672,12 +705,12 @@ module Shipit
|
|
|
672
705
|
'revalidate_after' => '5m30s',
|
|
673
706
|
},
|
|
674
707
|
)
|
|
675
|
-
assert_equal 330, @spec.
|
|
708
|
+
assert_equal 330, @spec.revalidate_merge_requests_after.to_i
|
|
676
709
|
end
|
|
677
710
|
|
|
678
711
|
test "#file is impacted by `machine.directory`" do
|
|
679
712
|
subdir = '/foo/bar'
|
|
680
|
-
@spec.stubs(:load_config).returns('machine' => {'directory' => subdir})
|
|
713
|
+
@spec.stubs(:load_config).returns('machine' => { 'directory' => subdir })
|
|
681
714
|
assert_instance_of Pathname, @spec.file('baz')
|
|
682
715
|
assert_equal File.join(@app_dir, subdir, 'baz'), @spec.file('baz').to_s
|
|
683
716
|
end
|
|
@@ -795,6 +828,13 @@ module Shipit
|
|
|
795
828
|
@spec.stubs(:lerna?).returns(true)
|
|
796
829
|
@spec.stubs(:lerna_config).returns('lerna' => '2.0.0', 'version' => 'independent')
|
|
797
830
|
assert_equal 'assert-lerna-independent-version-tags', @spec.deploy_steps[0]
|
|
831
|
+
assert_equal 'publish-lerna-independent-packages-legacy', @spec.deploy_steps[1]
|
|
832
|
+
end
|
|
833
|
+
|
|
834
|
+
test '#publish_lerna_packages checks if independent version tags exist, checks if a newer version of lerna is used, and then invokes lerna deploy script' do
|
|
835
|
+
@spec.stubs(:lerna?).returns(true)
|
|
836
|
+
@spec.stubs(:lerna_config).returns('lerna' => '3.0.0', 'version' => 'independent')
|
|
837
|
+
assert_equal 'assert-lerna-independent-version-tags', @spec.deploy_steps[0]
|
|
798
838
|
assert_equal 'publish-lerna-independent-packages', @spec.deploy_steps[1]
|
|
799
839
|
end
|
|
800
840
|
|
|
@@ -1084,5 +1124,10 @@ module Shipit
|
|
|
1084
1124
|
)
|
|
1085
1125
|
assert_nil @spec.max_divergence_age
|
|
1086
1126
|
end
|
|
1127
|
+
|
|
1128
|
+
test "serialised deploy specs are normalised" do
|
|
1129
|
+
stack = shipit_stacks(:shipit)
|
|
1130
|
+
assert_equal stack.cached_deploy_spec_before_type_cast, DeploySpec.dump(stack.cached_deploy_spec)
|
|
1131
|
+
end
|
|
1087
1132
|
end
|
|
1088
1133
|
end
|