shipit-engine 0.30.0 → 0.34.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|