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.
Files changed (410) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +19 -4
  3. data/Rakefile +4 -2
  4. data/app/assets/images/magic-solid.svg +1 -0
  5. data/app/assets/javascripts/shipit/repositories_search.js.coffee +60 -0
  6. data/app/assets/javascripts/shipit/{search.js.coffee → stack_search.js.coffee} +0 -0
  7. data/app/assets/stylesheets/_pages/_deploy.scss +0 -2
  8. data/app/assets/stylesheets/_pages/_repositories.scss +148 -0
  9. data/app/assets/stylesheets/_pages/_stacks.scss +19 -3
  10. data/app/assets/stylesheets/merge_status.scss +0 -3
  11. data/app/assets/stylesheets/shipit.scss +1 -0
  12. data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +1 -0
  13. data/app/controllers/concerns/shipit/api/cacheable.rb +1 -0
  14. data/app/controllers/concerns/shipit/api/paginable.rb +3 -2
  15. data/app/controllers/concerns/shipit/api/rendering.rb +5 -4
  16. data/app/controllers/concerns/shipit/authentication.rb +3 -2
  17. data/app/controllers/concerns/shipit/pagination.rb +2 -1
  18. data/app/controllers/shipit/api/base_controller.rb +11 -6
  19. data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
  20. data/app/controllers/shipit/api/commits_controller.rb +2 -1
  21. data/app/controllers/shipit/api/deploys_controller.rb +6 -3
  22. data/app/controllers/shipit/api/hooks_controller.rb +6 -5
  23. data/app/controllers/shipit/api/locks_controller.rb +5 -4
  24. data/app/controllers/shipit/api/merge_requests_controller.rb +37 -0
  25. data/app/controllers/shipit/api/outputs_controller.rb +2 -1
  26. data/app/controllers/shipit/api/release_statuses_controller.rb +3 -2
  27. data/app/controllers/shipit/api/rollbacks_controller.rb +34 -0
  28. data/app/controllers/shipit/api/stacks_controller.rb +32 -5
  29. data/app/controllers/shipit/api/tasks_controller.rb +6 -5
  30. data/app/controllers/shipit/api_clients_controller.rb +4 -3
  31. data/app/controllers/shipit/ccmenu_url_controller.rb +4 -3
  32. data/app/controllers/shipit/commit_checks_controller.rb +2 -1
  33. data/app/controllers/shipit/commits_controller.rb +2 -1
  34. data/app/controllers/shipit/deploys_controller.rb +4 -3
  35. data/app/controllers/shipit/github_authentication_controller.rb +4 -3
  36. data/app/controllers/shipit/merge_requests_controller.rb +31 -0
  37. data/app/controllers/shipit/merge_status_controller.rb +31 -30
  38. data/app/controllers/shipit/release_statuses_controller.rb +3 -2
  39. data/app/controllers/shipit/repositories_controller.rb +74 -0
  40. data/app/controllers/shipit/rollbacks_controller.rb +3 -2
  41. data/app/controllers/shipit/shipit_controller.rb +2 -1
  42. data/app/controllers/shipit/stacks_controller.rb +24 -9
  43. data/app/controllers/shipit/status_controller.rb +2 -1
  44. data/app/controllers/shipit/tasks_controller.rb +7 -6
  45. data/app/controllers/shipit/webhooks_controller.rb +26 -6
  46. data/app/helpers/shipit/chunks_helper.rb +3 -2
  47. data/app/helpers/shipit/deploys_helper.rb +4 -3
  48. data/app/helpers/shipit/github_url_helper.rb +9 -0
  49. data/app/helpers/shipit/merge_status_helper.rb +1 -0
  50. data/app/helpers/shipit/shipit_helper.rb +1 -1
  51. data/app/helpers/shipit/stacks_helper.rb +5 -0
  52. data/app/helpers/shipit/tasks_helper.rb +1 -0
  53. data/app/jobs/shipit/background_job.rb +4 -0
  54. data/app/jobs/shipit/background_job/unique.rb +1 -0
  55. data/app/jobs/shipit/cache_deploy_spec_job.rb +1 -0
  56. data/app/jobs/shipit/chunk_rollup_job.rb +4 -0
  57. data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
  58. data/app/jobs/shipit/continuous_delivery_job.rb +2 -1
  59. data/app/jobs/shipit/create_on_github_job.rb +7 -1
  60. data/app/jobs/shipit/create_release_statuses_job.rb +1 -0
  61. data/app/jobs/shipit/deferred_touch_job.rb +4 -0
  62. data/app/jobs/shipit/deliver_hook_job.rb +2 -1
  63. data/app/jobs/shipit/destroy_job.rb +1 -0
  64. data/app/jobs/shipit/destroy_repository_job.rb +24 -0
  65. data/app/jobs/shipit/destroy_stack_job.rb +3 -2
  66. data/app/jobs/shipit/emit_event_job.rb +2 -1
  67. data/app/jobs/shipit/fetch_commit_stats_job.rb +1 -0
  68. data/app/jobs/shipit/fetch_deployed_revision_job.rb +1 -0
  69. data/app/jobs/shipit/github_sync_job.rb +15 -10
  70. data/app/jobs/shipit/mark_deploy_healthy_job.rb +1 -0
  71. data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
  72. data/app/jobs/shipit/perform_task_job.rb +5 -92
  73. data/app/jobs/shipit/process_merge_requests_job.rb +32 -0
  74. data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
  75. data/app/jobs/shipit/reap_dead_tasks_job.rb +21 -0
  76. data/app/jobs/shipit/refresh_check_runs_job.rb +1 -0
  77. data/app/jobs/shipit/refresh_github_user_job.rb +1 -0
  78. data/app/jobs/shipit/refresh_merge_request_job.rb +11 -0
  79. data/app/jobs/shipit/refresh_statuses_job.rb +1 -0
  80. data/app/jobs/shipit/setup_github_hook_job.rb +1 -0
  81. data/app/jobs/shipit/update_estimated_deploy_duration_job.rb +1 -0
  82. data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +5 -4
  83. data/app/models/concerns/shipit/deferred_touch.rb +4 -3
  84. data/app/models/shipit/anonymous_user.rb +15 -2
  85. data/app/models/shipit/api_client.rb +3 -2
  86. data/app/models/shipit/application_record.rb +2 -1
  87. data/app/models/shipit/check_run.rb +41 -4
  88. data/app/models/shipit/command_line_user.rb +5 -0
  89. data/app/models/shipit/commit.rb +42 -24
  90. data/app/models/shipit/commit_checks.rb +15 -13
  91. data/app/models/shipit/commit_deployment.rb +6 -5
  92. data/app/models/shipit/commit_deployment_status.rb +5 -4
  93. data/app/models/shipit/commit_message.rb +1 -0
  94. data/app/models/shipit/delivery.rb +4 -3
  95. data/app/models/shipit/deploy.rb +23 -28
  96. data/app/models/shipit/deploy_spec.rb +38 -7
  97. data/app/models/shipit/deploy_spec/bundler_discovery.rb +1 -0
  98. data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
  99. data/app/models/shipit/deploy_spec/file_system.rb +20 -7
  100. data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -0
  101. data/app/models/shipit/deploy_spec/lerna_discovery.rb +13 -4
  102. data/app/models/shipit/deploy_spec/npm_discovery.rb +5 -4
  103. data/app/models/shipit/deploy_spec/pypi_discovery.rb +1 -0
  104. data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
  105. data/app/models/shipit/deploy_stats.rb +2 -1
  106. data/app/models/shipit/duration.rb +5 -2
  107. data/app/models/shipit/ephemeral_commit_checks.rb +1 -0
  108. data/app/models/shipit/github_hook.rb +2 -1
  109. data/app/models/shipit/github_status.rb +2 -1
  110. data/app/models/shipit/hook.rb +34 -7
  111. data/app/models/shipit/membership.rb +3 -2
  112. data/app/models/shipit/merge_request.rb +304 -0
  113. data/app/models/shipit/output_chunk.rb +7 -2
  114. data/app/models/shipit/provisioning_handler.rb +32 -0
  115. data/app/models/shipit/provisioning_handler/base.rb +30 -0
  116. data/app/models/shipit/provisioning_handler/unregistered_provisioning_handler.rb +35 -0
  117. data/app/models/shipit/pull_request.rb +28 -266
  118. data/app/models/shipit/pull_request_assignment.rb +10 -0
  119. data/app/models/shipit/record.rb +18 -0
  120. data/app/models/shipit/release_status.rb +4 -3
  121. data/app/models/shipit/repository.rb +71 -6
  122. data/app/models/shipit/review_stack.rb +130 -0
  123. data/app/models/shipit/review_stack_provisioning_queue.rb +39 -0
  124. data/app/models/shipit/rollback.rb +1 -0
  125. data/app/models/shipit/stack.rb +144 -44
  126. data/app/models/shipit/status.rb +3 -2
  127. data/app/models/shipit/status/common.rb +7 -6
  128. data/app/models/shipit/status/group.rb +2 -1
  129. data/app/models/shipit/status/missing.rb +2 -1
  130. data/app/models/shipit/status/unknown.rb +2 -1
  131. data/app/models/shipit/task.rb +98 -12
  132. data/app/models/shipit/task_definition.rb +1 -0
  133. data/app/models/shipit/task_execution_strategy/base.rb +20 -0
  134. data/app/models/shipit/task_execution_strategy/default.rb +109 -0
  135. data/app/models/shipit/team.rb +6 -3
  136. data/app/models/shipit/undeployed_commit.rb +1 -0
  137. data/app/models/shipit/unlimited_api_client.rb +1 -0
  138. data/app/models/shipit/user.rb +19 -8
  139. data/app/models/shipit/variable_definition.rb +1 -0
  140. data/app/models/shipit/webhooks.rb +11 -0
  141. data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +1 -0
  142. data/app/models/shipit/webhooks/handlers/handler.rb +1 -0
  143. data/app/models/shipit/webhooks/handlers/membership_handler.rb +1 -0
  144. data/app/models/shipit/webhooks/handlers/pull_request/assigned_handler.rb +74 -0
  145. data/app/models/shipit/webhooks/handlers/pull_request/closed_handler.rb +68 -0
  146. data/app/models/shipit/webhooks/handlers/pull_request/edited_handler.rb +74 -0
  147. data/app/models/shipit/webhooks/handlers/pull_request/label_capturing_handler.rb +127 -0
  148. data/app/models/shipit/webhooks/handlers/pull_request/labeled_handler.rb +106 -0
  149. data/app/models/shipit/webhooks/handlers/pull_request/opened_handler.rb +83 -0
  150. data/app/models/shipit/webhooks/handlers/pull_request/reopened_handler.rb +88 -0
  151. data/app/models/shipit/webhooks/handlers/pull_request/review_stack_adapter.rb +103 -0
  152. data/app/models/shipit/webhooks/handlers/pull_request/unlabeled_handler.rb +107 -0
  153. data/app/models/shipit/webhooks/handlers/push_handler.rb +5 -1
  154. data/app/models/shipit/webhooks/handlers/status_handler.rb +1 -0
  155. data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
  156. data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
  157. data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
  158. data/app/serializers/shipit/commit_serializer.rb +1 -0
  159. data/app/serializers/shipit/deploy_serializer.rb +8 -1
  160. data/app/serializers/shipit/hook_serializer.rb +1 -0
  161. data/app/serializers/shipit/merge_request_serializer.rb +21 -0
  162. data/app/serializers/shipit/pull_request_serializer.rb +6 -8
  163. data/app/serializers/shipit/review_stack_serializer.rb +7 -0
  164. data/app/serializers/shipit/rollback_serializer.rb +1 -0
  165. data/app/serializers/shipit/short_commit_serializer.rb +1 -0
  166. data/app/serializers/shipit/stack_serializer.rb +8 -6
  167. data/app/serializers/shipit/tail_task_serializer.rb +11 -2
  168. data/app/serializers/shipit/task_serializer.rb +2 -17
  169. data/app/serializers/shipit/user_serializer.rb +6 -1
  170. data/app/validators/ascii_only_validator.rb +1 -0
  171. data/app/validators/subset_validator.rb +2 -1
  172. data/app/views/layouts/merge_status.html.erb +1 -1
  173. data/app/views/layouts/shipit.html.erb +1 -1
  174. data/app/views/shipit/_variables.html.erb +1 -1
  175. data/app/views/shipit/ccmenu/project.xml.builder +2 -1
  176. data/app/views/shipit/deploys/show.html.erb +2 -2
  177. data/app/views/shipit/merge_requests/_merge_request.html.erb +29 -0
  178. data/app/views/shipit/{pull_requests → merge_requests}/index.html.erb +2 -2
  179. data/app/views/shipit/merge_requests/merge_requests/_pull_request.html.erb +29 -0
  180. data/app/views/shipit/merge_requests/merge_requests/index.html.erb +20 -0
  181. data/app/views/shipit/merge_status/_merge_queue_button.html.erb +3 -3
  182. data/app/views/shipit/merge_status/backlogged.html.erb +1 -1
  183. data/app/views/shipit/merge_status/failure.html.erb +1 -1
  184. data/app/views/shipit/merge_status/locked.html.erb +1 -1
  185. data/app/views/shipit/merge_status/success.html.erb +2 -2
  186. data/app/views/shipit/repositories/_header.html.erb +19 -0
  187. data/app/views/shipit/repositories/index.html.erb +31 -0
  188. data/app/views/shipit/repositories/new.html.erb +23 -0
  189. data/app/views/shipit/repositories/settings.html.erb +53 -0
  190. data/app/views/shipit/repositories/show.html.erb +30 -0
  191. data/app/views/shipit/stacks/_banners.html.erb +15 -1
  192. data/app/views/shipit/stacks/_header.html.erb +20 -7
  193. data/app/views/shipit/stacks/_stack.html.erb +8 -0
  194. data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
  195. data/app/views/shipit/stacks/index.html.erb +3 -2
  196. data/app/views/shipit/stacks/new.html.erb +1 -1
  197. data/app/views/shipit/stacks/settings.html.erb +5 -5
  198. data/app/views/shipit/stacks/show.html.erb +1 -1
  199. data/app/views/shipit/tasks/_task_output.html.erb +1 -1
  200. data/app/views/shipit/tasks/show.html.erb +1 -1
  201. data/config/initializers/inflections.rb +2 -1
  202. data/config/locales/en.yml +4 -3
  203. data/config/routes.rb +25 -7
  204. data/config/secrets.development.example.yml +24 -0
  205. data/config/secrets.development.shopify.yml +20 -9
  206. data/db/migrate/20200226211925_add_index_to_tasks_status.rb +5 -0
  207. data/db/migrate/20200427135152_add_pull_request_head_sha_to_commit.rb +5 -0
  208. data/db/migrate/20200615181558_add_rollback_once_aborted_to.rb +5 -0
  209. data/db/migrate/20200706145406_add_review_stacks.rb +12 -0
  210. data/db/migrate/20200804144639_rename_pull_request_to_merge_request.rb +7 -0
  211. data/db/migrate/20200804161512_rename_commits_pull_request_id_to_merge_request_id.rb +5 -0
  212. data/db/migrate/20200813134712_recreate_shipit_pull_requests.rb +22 -0
  213. data/db/migrate/20200813194056_create_pull_request_assignments.rb +8 -0
  214. data/db/migrate/20201001125502_add_provision_pr_stacks_flag_to_repositories.rb +7 -0
  215. data/db/migrate/20201008145809_add_retry_attempt_to_tasks.rb +5 -0
  216. data/db/migrate/20201008152744_add_max_retries_to_tasks.rb +5 -0
  217. data/db/migrate/20210325194053_remove_stacks_branch_default.rb +5 -0
  218. data/db/migrate/20210504200438_add_github_updated_at_to_check_runs.rb +5 -0
  219. data/lib/shipit.rb +61 -17
  220. data/lib/shipit/cast_value.rb +1 -0
  221. data/lib/shipit/command.rb +20 -21
  222. data/lib/shipit/commands.rb +14 -6
  223. data/lib/shipit/csv_serializer.rb +1 -0
  224. data/lib/shipit/deploy_commands.rb +1 -0
  225. data/lib/shipit/engine.rb +9 -2
  226. data/lib/shipit/environment_variables.rb +11 -1
  227. data/lib/shipit/first_parent_commits_iterator.rb +1 -0
  228. data/lib/shipit/flock.rb +9 -1
  229. data/lib/shipit/github_app.rb +15 -12
  230. data/lib/shipit/github_http_cache_middleware.rb +1 -0
  231. data/lib/shipit/null_serializer.rb +1 -0
  232. data/lib/shipit/octokit_check_runs.rb +3 -2
  233. data/lib/shipit/octokit_iterator.rb +4 -3
  234. data/lib/shipit/paginator.rb +3 -2
  235. data/lib/shipit/review_stack_commands.rb +8 -0
  236. data/lib/shipit/rollback_commands.rb +1 -0
  237. data/lib/shipit/same_site_cookie_middleware.rb +29 -0
  238. data/lib/shipit/simple_message_verifier.rb +3 -2
  239. data/lib/shipit/stack_commands.rb +37 -7
  240. data/lib/shipit/stat.rb +1 -0
  241. data/lib/shipit/task_commands.rb +23 -16
  242. data/lib/shipit/version.rb +2 -1
  243. data/lib/snippets/publish-lerna-independent-packages +35 -34
  244. data/lib/snippets/publish-lerna-independent-packages-legacy +39 -0
  245. data/lib/snippets/release-gem +5 -1
  246. data/lib/tasks/cron.rake +13 -2
  247. data/lib/tasks/dev.rake +3 -2
  248. data/lib/tasks/shipit.rake +15 -14
  249. data/lib/tasks/teams.rake +1 -0
  250. data/test/controllers/api/base_controller_test.rb +3 -2
  251. data/test/controllers/api/ccmenu_controller_test.rb +9 -8
  252. data/test/controllers/api/commits_controller_test.rb +3 -2
  253. data/test/controllers/api/deploys_controller_test.rb +32 -14
  254. data/test/controllers/api/hooks_controller_test.rb +8 -7
  255. data/test/controllers/api/locks_controller_test.rb +7 -6
  256. data/test/controllers/api/{pull_requests_controller_test.rb → merge_requests_controller_test.rb} +17 -16
  257. data/test/controllers/api/outputs_controller_test.rb +3 -1
  258. data/test/controllers/api/release_statuses_controller_test.rb +2 -1
  259. data/test/controllers/api/rollback_controller_test.rb +113 -0
  260. data/test/controllers/api/stacks_controller_test.rb +71 -16
  261. data/test/controllers/api/tasks_controller_test.rb +13 -12
  262. data/test/controllers/api_clients_controller_test.rb +5 -4
  263. data/test/controllers/ccmenu_controller_test.rb +4 -3
  264. data/test/controllers/commit_checks_controller_test.rb +4 -3
  265. data/test/controllers/commits_controller_test.rb +3 -2
  266. data/test/controllers/deploys_controller_test.rb +32 -21
  267. data/test/controllers/github_authentication_controller_test.rb +1 -0
  268. data/test/controllers/merge_requests_controller_test.rb +32 -0
  269. data/test/controllers/merge_status_controller_test.rb +7 -6
  270. data/test/controllers/release_statuses_controller_test.rb +3 -2
  271. data/test/controllers/repositories_controller_test.rb +71 -0
  272. data/test/controllers/rollbacks_controller_test.rb +9 -8
  273. data/test/controllers/stacks_controller_test.rb +41 -19
  274. data/test/controllers/status_controller_test.rb +1 -0
  275. data/test/controllers/tasks_controller_test.rb +32 -19
  276. data/test/controllers/webhooks_controller_test.rb +33 -17
  277. data/test/dummy/app/assets/config/manifest.js +3 -0
  278. data/test/dummy/config/application.rb +7 -2
  279. data/test/dummy/config/database.yml +9 -0
  280. data/test/dummy/config/environments/development.rb +3 -4
  281. data/test/dummy/config/environments/test.rb +2 -5
  282. data/test/dummy/config/secrets_double_github_app.yml +79 -0
  283. data/test/dummy/db/schema.rb +59 -17
  284. data/test/dummy/db/seeds.rb +2 -1
  285. data/test/fixtures/payloads/check_suite_master.json +4 -32
  286. data/test/fixtures/payloads/invalid_pull_request.json +117 -0
  287. data/test/fixtures/payloads/provision_disabled_pull_request.json +454 -0
  288. data/test/fixtures/payloads/pull_request_assigned.json +480 -0
  289. data/test/fixtures/payloads/pull_request_closed.json +454 -0
  290. data/test/fixtures/payloads/pull_request_labeled.json +461 -0
  291. data/test/fixtures/payloads/pull_request_opened.json +454 -0
  292. data/test/fixtures/payloads/pull_request_reopened.json +454 -0
  293. data/test/fixtures/payloads/pull_request_unlabeled.json +454 -0
  294. data/test/fixtures/payloads/pull_request_with_no_repo.json +454 -0
  295. data/test/fixtures/payloads/push_master.json +1 -1
  296. data/test/fixtures/payloads/push_not_master.json +1 -1
  297. data/test/fixtures/shipit/commits.yml +31 -3
  298. data/test/fixtures/shipit/hooks.yml +1 -0
  299. data/test/fixtures/shipit/merge_requests.yml +141 -0
  300. data/test/fixtures/shipit/pull_request_assignments.yml +3 -0
  301. data/test/fixtures/shipit/pull_requests.yml +10 -131
  302. data/test/fixtures/shipit/repositories.yml +5 -0
  303. data/test/fixtures/shipit/stacks.yml +235 -14
  304. data/test/fixtures/shipit/statuses.yml +9 -0
  305. data/test/fixtures/shipit/tasks.yml +4 -1
  306. data/test/fixtures/shipit/users.yml +7 -0
  307. data/test/fixtures/timeout +2 -1
  308. data/test/helpers/api_helper.rb +1 -0
  309. data/test/helpers/fixture_aliases_helper.rb +1 -0
  310. data/test/helpers/hooks_helper.rb +2 -1
  311. data/test/helpers/json_helper.rb +20 -12
  312. data/test/helpers/links_helper.rb +4 -3
  313. data/test/helpers/payloads_helper.rb +5 -0
  314. data/test/helpers/queries_helper.rb +3 -2
  315. data/test/jobs/cache_deploy_spec_job_test.rb +2 -1
  316. data/test/jobs/chunk_rollup_job_test.rb +16 -1
  317. data/test/jobs/deliver_hook_job_test.rb +1 -0
  318. data/test/jobs/destroy_repository_job_test.rb +27 -0
  319. data/test/jobs/destroy_stack_job_test.rb +1 -0
  320. data/test/jobs/emit_event_job_test.rb +2 -1
  321. data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
  322. data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
  323. data/test/jobs/github_sync_job_test.rb +3 -1
  324. data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
  325. data/test/jobs/perform_task_job_test.rb +12 -11
  326. data/test/jobs/{merge_pull_requests_job_test.rb → process_merge_requests_job_test.rb} +19 -18
  327. data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
  328. data/test/jobs/reap_dead_tasks_job_test.rb +68 -0
  329. data/test/jobs/refresh_github_user_job_test.rb +1 -0
  330. data/test/jobs/refresh_status_job_test.rb +1 -0
  331. data/test/jobs/unique_job_test.rb +1 -0
  332. data/test/jobs/update_github_last_deployed_ref_job_test.rb +1 -0
  333. data/test/lib/shipit/deploy_commands_test.rb +16 -0
  334. data/test/lib/shipit/task_commands_test.rb +17 -0
  335. data/test/middleware/same_site_cookie_middleware_test.rb +52 -0
  336. data/test/models/api_client_test.rb +1 -0
  337. data/test/models/commit_checks_test.rb +1 -0
  338. data/test/models/commit_deployment_status_test.rb +4 -3
  339. data/test/models/commit_deployment_test.rb +2 -1
  340. data/test/models/commits_test.rb +96 -19
  341. data/test/models/delivery_test.rb +2 -1
  342. data/test/models/deploy_spec_test.rb +110 -65
  343. data/test/models/deploy_stats_test.rb +1 -0
  344. data/test/models/deploys_test.rb +197 -36
  345. data/test/models/duration_test.rb +1 -0
  346. data/test/models/github_hook_test.rb +1 -0
  347. data/test/models/hook_test.rb +47 -10
  348. data/test/models/membership_test.rb +1 -0
  349. data/test/models/{pull_request_test.rb → merge_request_test.rb} +53 -37
  350. data/test/models/pull_request_assignment_test.rb +16 -0
  351. data/test/models/release_statuses_test.rb +1 -0
  352. data/test/models/rollbacks_test.rb +1 -0
  353. data/test/models/shipit/check_run_test.rb +125 -5
  354. data/test/models/shipit/provisioning_handler/base_test.rb +33 -0
  355. data/test/models/shipit/provisioning_handler/unregistered_provisioning_handler_test.rb +49 -0
  356. data/test/models/shipit/provisioning_handler_test.rb +64 -0
  357. data/test/models/shipit/pull_request_test.rb +52 -0
  358. data/test/models/shipit/repository_test.rb +6 -1
  359. data/test/models/shipit/review_stack_provision_status_test.rb +77 -0
  360. data/test/models/shipit/review_stack_provisioning_queue_test.rb +63 -0
  361. data/test/models/shipit/review_stack_test.rb +91 -0
  362. data/test/models/{stacks_test.rb → shipit/stacks_test.rb} +121 -16
  363. data/test/models/shipit/webhooks/handlers/pull_request/assigned_handler_test.rb +45 -0
  364. data/test/models/shipit/webhooks/handlers/pull_request/closed_handler_test.rb +192 -0
  365. data/test/models/shipit/webhooks/handlers/pull_request/edited_handler_test.rb +47 -0
  366. data/test/models/shipit/webhooks/handlers/pull_request/label_capturing_handler_test.rb +209 -0
  367. data/test/models/shipit/webhooks/handlers/pull_request/labeled_handler_test.rb +332 -0
  368. data/test/models/shipit/webhooks/handlers/pull_request/opened_handler_test.rb +238 -0
  369. data/test/models/shipit/webhooks/handlers/pull_request/reopened_handler_test.rb +282 -0
  370. data/test/models/shipit/webhooks/handlers/pull_request/review_stack_adapter_test.rb +107 -0
  371. data/test/models/shipit/webhooks/handlers/pull_request/unlabeled_handler_test.rb +324 -0
  372. data/test/models/shipit/{wehbooks → webhooks}/handlers_test.rb +1 -0
  373. data/test/models/status/group_test.rb +1 -0
  374. data/test/models/status/missing_test.rb +1 -0
  375. data/test/models/status_test.rb +1 -0
  376. data/test/models/task_definitions_test.rb +9 -8
  377. data/test/models/tasks_test.rb +81 -1
  378. data/test/models/team_test.rb +4 -2
  379. data/test/models/undeployed_commits_test.rb +1 -0
  380. data/test/models/users_test.rb +13 -5
  381. data/test/serializers/shipit/pull_request_serializer_test.rb +29 -0
  382. data/test/test_command_integration.rb +3 -2
  383. data/test/test_helper.rb +49 -31
  384. data/test/unit/anonymous_user_serializer_test.rb +14 -0
  385. data/test/unit/command_test.rb +16 -10
  386. data/test/unit/commands_test.rb +1 -0
  387. data/test/unit/commit_serializer_test.rb +16 -0
  388. data/test/unit/csv_serializer_test.rb +3 -2
  389. data/test/unit/deploy_commands_test.rb +75 -18
  390. data/test/unit/deploy_serializer_test.rb +17 -0
  391. data/test/unit/environment_variables_test.rb +5 -4
  392. data/test/unit/github_app_test.rb +3 -3
  393. data/test/unit/github_apps_test.rb +416 -0
  394. data/test/unit/github_url_helper_test.rb +6 -0
  395. data/test/unit/rollback_commands_test.rb +2 -1
  396. data/test/unit/shipit_deployment_checks_test.rb +77 -0
  397. data/test/unit/shipit_helper_test.rb +17 -0
  398. data/test/unit/shipit_task_execution_strategy_test.rb +47 -0
  399. data/test/unit/shipit_test.rb +15 -0
  400. data/test/unit/user_serializer_test.rb +14 -0
  401. data/test/unit/variable_definition_test.rb +1 -0
  402. metadata +320 -178
  403. data/app/controllers/shipit/api/pull_requests_controller.rb +0 -36
  404. data/app/controllers/shipit/pull_requests_controller.rb +0 -30
  405. data/app/jobs/shipit/merge_pull_requests_job.rb +0 -31
  406. data/app/jobs/shipit/refresh_pull_request_job.rb +0 -10
  407. data/app/views/shipit/pull_requests/_pull_request.html.erb +0 -29
  408. data/test/controllers/pull_requests_controller_test.rb +0 -31
  409. data/test/fixtures/shipit/output_chunks.yml +0 -47
  410. 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 TestTaskDiscovery
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 TestTaskDiscovery
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 "pull_request_merge_method defaults to `nil`" do
595
+ test "merge_request_merge_method defaults to `nil`" do
563
596
  @spec.expects(:load_config).returns({})
564
- assert_nil @spec.pull_request_merge_method
597
+ assert_nil @spec.merge_request_merge_method
565
598
  end
566
599
 
567
- test "pull_request_merge_method returns `merge.method`" do
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.pull_request_merge_method
606
+ assert_equal 'squash', @spec.merge_request_merge_method
574
607
  end
575
608
 
576
- test "pull_request_merge_method returns `nil` if `merge.method` is invalid" do
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.pull_request_merge_method
615
+ assert_nil @spec.merge_request_merge_method
583
616
  end
584
617
 
585
- test "pull_request_ignored_statuses defaults to the union of ci.hide and ci.allow_failures" do
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.pull_request_ignored_statuses.sort
625
+ assert_equal %w(ci/circleci ci/jenkins ci/travis).sort, @spec.merge_request_ignored_statuses.sort
593
626
  end
594
627
 
595
- test "pull_request_ignored_statuses defaults to empty if `merge.require` is present" do
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.pull_request_ignored_statuses
638
+ assert_equal [], @spec.merge_request_ignored_statuses
606
639
  end
607
640
 
608
- test "pull_request_ignored_statuses returns `merge.ignore` if present" do
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.pull_request_ignored_statuses
651
+ assert_equal ['bar'], @spec.merge_request_ignored_statuses
619
652
  end
620
653
 
621
- test "pull_request_required_statuses defaults to ci.require" do
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.pull_request_required_statuses
660
+ assert_equal %w(ci/circleci ci/jenkins), @spec.merge_request_required_statuses
628
661
  end
629
662
 
630
- test "pull_request_required_statuses defaults to empty if `merge.ignore` is present" do
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.pull_request_required_statuses
672
+ assert_equal [], @spec.merge_request_required_statuses
640
673
  end
641
674
 
642
- test "pull_request_required_statuses returns `merge.require` if present" do
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.pull_request_required_statuses
685
+ assert_equal ['bar'], @spec.merge_request_required_statuses
653
686
  end
654
687
 
655
- test "revalidate_pull_requests_after defaults to `nil" do
688
+ test "revalidate_merge_requests_after defaults to `nil" do
656
689
  @spec.expects(:load_config).returns({})
657
- assert_nil @spec.revalidate_pull_requests_after
690
+ assert_nil @spec.revalidate_merge_requests_after
658
691
  end
659
692
 
660
- test "revalidate_pull_requests_after defaults to `nil` if `merge.timeout` cannot be parsed" do
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.revalidate_pull_requests_after
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.revalidate_pull_requests_after.to_i
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