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
@@ -21,14 +22,15 @@ module Shipit
21
22
  test ":push with the target branch queues a GithubSyncJob" do
22
23
  request.headers['X-Github-Event'] = 'push'
23
24
 
25
+ body = JSON.parse(payload(:push_master)).to_json
24
26
  assert_enqueued_with(job: GithubSyncJob, args: [stack_id: @stack.id]) do
25
- post :create, body: payload(:push_master), as: :json
27
+ post :create, body: body, as: :json
26
28
  end
27
29
  end
28
30
 
29
31
  test ":push does not enqueue a job if not the target branch" do
30
32
  request.headers['X-Github-Event'] = 'push'
31
- params = payload(:push_not_master)
33
+ params = JSON.parse(payload(:push_not_master)).to_json
32
34
  assert_no_enqueued_jobs do
33
35
  post :create, body: params, as: :json
34
36
  end
@@ -39,8 +41,9 @@ module Shipit
39
41
 
40
42
  commit = shipit_commits(:first)
41
43
 
44
+ body = JSON.parse(payload(:status_master)).merge(repository_params).to_json
42
45
  assert_difference 'commit.statuses.count', 1 do
43
- post :create, body: payload(:status_master), as: :json
46
+ post :create, body: body, as: :json
44
47
  end
45
48
 
46
49
  status = commit.statuses.last
@@ -54,14 +57,14 @@ module Shipit
54
57
 
55
58
  test ":state with a unexisting commit respond with 200 OK" do
56
59
  request.headers['X-Github-Event'] = 'status'
57
- params = {'sha' => 'notarealcommit', 'state' => 'pending', 'branches' => [{'name' => 'master'}]}.to_json
60
+ params = { 'sha' => 'notarealcommit', 'state' => 'pending', 'branches' => [{ 'name' => 'master' }] }.merge(repository_params).to_json
58
61
  post :create, body: params, as: :json
59
62
  assert_response :ok
60
63
  end
61
64
 
62
65
  test ":state in an untracked branche bails out" do
63
66
  request.headers['X-Github-Event'] = 'status'
64
- params = {'sha' => 'notarealcommit', 'state' => 'pending', 'branches' => []}.to_json
67
+ params = { 'sha' => 'notarealcommit', 'state' => 'pending', 'branches' => [] }.merge(repository_params).to_json
65
68
  post :create, body: params, as: :json
66
69
  assert_response :ok
67
70
  end
@@ -69,8 +72,9 @@ module Shipit
69
72
  test ":check_suite with the target branch queues a RefreshCheckRunsJob" do
70
73
  request.headers['X-Github-Event'] = 'check_suite'
71
74
 
75
+ body = JSON.parse(payload(:check_suite_master)).to_json
72
76
  assert_enqueued_with(job: RefreshCheckRunsJob) do
73
- post :create, body: payload(:check_suite_master), as: :json
77
+ post :create, body: body, as: :json
74
78
  assert_response :ok
75
79
  end
76
80
  end
@@ -79,7 +83,7 @@ module Shipit
79
83
  @request.headers['X-Github-Event'] = 'ping'
80
84
 
81
85
  assert_no_enqueued_jobs do
82
- post :create, body: {zen: 'Git is beautiful'}.to_json, as: :json
86
+ post :create, body: { zen: 'Git is beautiful' }.to_json, as: :json
83
87
  assert_response :ok
84
88
  end
85
89
  end
@@ -87,13 +91,13 @@ module Shipit
87
91
  test "verifies webhook signature" do
88
92
  commit = shipit_commits(:first)
89
93
 
90
- payload = {"sha" => commit.sha, "state" => "pending", "target_url" => "https://ci.example.com/1000/output"}.to_json
94
+ payload = { "sha" => commit.sha, "state" => "pending", "target_url" => "https://ci.example.com/1000/output" }.merge(repository_params).to_json
91
95
  signature = 'sha1=4848deb1c9642cd938e8caa578d201ca359a8249'
92
96
 
93
97
  @request.headers['X-Github-Event'] = 'push'
94
98
  @request.headers['X-Hub-Signature'] = signature
95
99
 
96
- Shipit.github.expects(:verify_webhook_signature).with(signature, payload).returns(false)
100
+ Shipit.github(organization: 'shopify').expects(:verify_webhook_signature).with(signature, payload).returns(false)
97
101
 
98
102
  post :create, body: payload, as: :json
99
103
  assert_response :unprocessable_entity
@@ -116,7 +120,7 @@ module Shipit
116
120
  @request.headers['X-Github-Event'] = 'membership'
117
121
  Shipit.github.api.expects(:user).with('george').returns(george)
118
122
  assert_difference -> { User.count }, 1 do
119
- post :create, body: membership_params.merge(member: {login: 'george'}).to_json, as: :json
123
+ post :create, body: membership_params.merge(member: { login: 'george' }).to_json, as: :json
120
124
  assert_response :ok
121
125
  end
122
126
  end
@@ -132,7 +136,7 @@ module Shipit
132
136
  test ":membership can append an user membership" do
133
137
  @request.headers['X-Github-Event'] = 'membership'
134
138
  assert_difference -> { Membership.count }, 1 do
135
- post :create, body: membership_params.merge(member: {login: 'bob'}).to_json, as: :json
139
+ post :create, body: membership_params.merge(member: { login: 'bob' }).to_json, as: :json
136
140
  assert_response :ok
137
141
  end
138
142
  end
@@ -148,7 +152,7 @@ module Shipit
148
152
  test ":membership can delete an user twice" do
149
153
  @request.headers['X-Github-Event'] = 'membership'
150
154
  assert_no_difference -> { Membership.count } do
151
- post :create, body: membership_params.merge(action: 'removed', member: {login: 'bob'}).to_json, as: :json
155
+ post :create, body: membership_params.merge(action: 'removed', member: { login: 'bob' }).to_json, as: :json
152
156
  assert_response :ok
153
157
  end
154
158
  end
@@ -156,26 +160,38 @@ module Shipit
156
160
  test "other events trigger custom handlers" do
157
161
  event = 'pull_request'
158
162
  mock_handler = mock
159
- mock_handler.expects(:call).with(pull_request_params.stringify_keys).once
160
- Shipit::Webhooks.register_handler(event, mock_handler)
163
+ mock_handler.expects(:call).with(pull_request_params.deep_stringify_keys).once
164
+ Shipit::Webhooks.handlers["pull_request"] = [mock_handler]
161
165
 
162
166
  @request.headers['X-Github-Event'] = event
163
167
  post :create, body: pull_request_params.to_json, as: :json
164
168
  assert_response :ok
165
169
  end
166
170
 
171
+ test "events with no handler are dropped" do
172
+ event = 'not_a_real_event'
173
+
174
+ @request.headers['X-Github-Event'] = event
175
+ post :create, body: pull_request_params.to_json, as: :json
176
+ assert_response 204
177
+ end
178
+
167
179
  private
168
180
 
169
181
  def pull_request_params
170
- {action: 'opened', number: 2, pull_request: 'foobar'}
182
+ { action: 'opened', number: 2, pull_request: 'foobar' }.merge(repository_params)
171
183
  end
172
184
 
173
185
  def membership_params
174
- {action: 'added', team: team_params, organization: {login: 'shopify'}, member: {login: 'walrus'}}
186
+ { action: 'added', team: team_params, organization: { login: 'shopify' }, member: { login: 'walrus' } }.merge(repository_params)
175
187
  end
176
188
 
177
189
  def team_params
178
- {id: shipit_teams(:shopify_developers).id, slug: 'developers', name: 'Developers', url: 'http://example.com'}
190
+ { id: shipit_teams(:shopify_developers).id, slug: 'developers', name: 'Developers', url: 'http://example.com' }
191
+ end
192
+
193
+ def repository_params
194
+ { repository: { owner: { login: 'shopify' } } }
179
195
  end
180
196
 
181
197
  def george
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
@@ -1,6 +1,11 @@
1
1
  require File.expand_path('../boot', __FILE__)
2
2
 
3
- require 'rails/all'
3
+ require 'active_record/railtie'
4
+ require 'action_controller/railtie'
5
+ require 'action_view/railtie'
6
+ require 'active_job/railtie'
7
+ require 'rails/test_unit/railtie'
8
+ require 'sprockets/railtie'
4
9
 
5
10
  Bundler.require(*Rails.groups)
6
11
  require "shipit"
@@ -12,7 +17,7 @@ end
12
17
 
13
18
  module Shipit
14
19
  class Application < Rails::Application
15
- config.load_defaults 6.0
20
+ config.load_defaults 6.1
16
21
  end
17
22
  end
18
23
 
@@ -1,3 +1,11 @@
1
+ <% if ENV['DATABASE_URL'].present? %>
2
+ development:
3
+ database: shipit_engine_development
4
+
5
+ test:
6
+ database: shipit_engine_test
7
+
8
+ <% else %>
1
9
  default: &default
2
10
  adapter: sqlite3
3
11
 
@@ -8,3 +16,4 @@ development:
8
16
  test:
9
17
  <<: *default
10
18
  database: db/test.sqlite3
19
+ <% end %>
@@ -28,9 +28,6 @@ Rails.application.configure do
28
28
  config.cache_store = :null_store
29
29
  end
30
30
 
31
- # Don't care if the mailer can't send.
32
- config.action_mailer.raise_delivery_errors = false
33
-
34
31
  # Print deprecation notices to the Rails logger.
35
32
  config.active_support.deprecation = :log
36
33
 
@@ -53,7 +50,7 @@ Rails.application.configure do
53
50
 
54
51
  # Raises error for missing translations
55
52
  # config.action_view.raise_on_missing_translations = true
56
- if Rails.application.config_for(:database)['adapter'] == 'sqlite3'
53
+ if Rails.application.config_for(:database)&.dig('adapter') == 'sqlite3'
57
54
  config.to_prepare do
58
55
  Shipit::DeferredTouch.enabled = false
59
56
  end
@@ -64,4 +61,6 @@ Rails.application.configure do
64
61
  Pubsubstub.use_persistent_connections = false
65
62
 
66
63
  Shipit.disable_api_authentication = true if ENV['PUBLIC_API']
64
+
65
+ config.hosts << "shipit-engine.myshopify.io"
67
66
  end
@@ -26,11 +26,6 @@ Rails.application.configure do
26
26
  # Disable request forgery protection in test environment.
27
27
  config.action_controller.allow_forgery_protection = false
28
28
 
29
- # Tell Action Mailer not to deliver emails to the real world.
30
- # The :test delivery method accumulates sent emails in the
31
- # ActionMailer::Base.deliveries array.
32
- config.action_mailer.delivery_method = :test
33
-
34
29
  # Randomize the order test cases are executed.
35
30
  config.active_support.test_order = :random
36
31
 
@@ -42,5 +37,7 @@ Rails.application.configure do
42
37
 
43
38
  config.to_prepare do
44
39
  Shipit::DeferredTouch.enabled = false
40
+ # The deploy specs in fixtures are pretty printed, we should do the same to avoid marking stacks as dirty
41
+ Shipit::DeploySpec.pretty_generate = true
45
42
  end
46
43
  end
@@ -0,0 +1,79 @@
1
+ github:
2
+ OrgOne:
3
+ domain: # defaults to github.com
4
+ app_id: 42
5
+ installation_id: 43
6
+ bot_login: "shipit[bot]"
7
+ webhook_secret: # nil
8
+ # Randomly generated
9
+ private_key: |
10
+ -----BEGIN RSA PRIVATE KEY-----
11
+ MIIEpAIBAAKCAQEA7iUQC2uUq/gtQg0gxtyaccuicYgmq1LUr1mOWbmwM1Cv63+S
12
+ 73qo8h87FX+YyclY5fZF6SMXIys02JOkImGgbnvEOLcHnImCYrWs03msOzEIO/pG
13
+ M0YedAPtQ2MEiLIu4y8htosVxeqfEOPiq9kQgFxNKyETzjdIA9q1md8sofuJUmPv
14
+ ibacW1PecuAMnn+P8qf0XIDp7uh6noB751KvhCaCNTAPtVE9NZ18OmNG9GOyX/pu
15
+ pQHIrPgTpTG6KlAe3r6LWvemzwsMtuRGU+K+KhK9dFIlSE+v9rA32KScO8efOh6s
16
+ Gu3rWorV4iDu14U62rzEfdzzc63YL94sUbZxbwIDAQABAoIBADLJ8r8MxZtbhYN1
17
+ u0zOFZ45WL6v09dsBfITvnlCUeLPzYUDIzoxxcBFittN6C744x3ARS6wjimw+EdM
18
+ TZALlCSb/sA9wMDQzt7wchhz9Zh2H5RzDu+2f54sjDh38KqancdT8PO2fAFGxX/b
19
+ qicOVyeZB9gv6MJtJc20olBbuXAeBNfcDABF9oxF+0i+Ssg7B4VXiqgcjtGbr/Og
20
+ qRll7AqyTArVx2xEcVfZxeZ4zGnigzcJq4te7yYpxzwk+RxblkPh54Yt4WxZ+8DI
21
+ Rsn3r6ajlpwzpwvsJFU2Txq7xBTzGQMFmy/Pnjk83kP2cogxB2+tRyjITGqTwD8b
22
+ gg9PFCkCgYEA+7u8A0l0Cz6p0SI6c7ftVePVRiIhpawWN7og/wEmI6zUjm/3rA+R
23
+ hrhaVKuOD8QF/HdDsqTck5gjGAjTmJz6r33/cl1Tz+pr62znsrB4r0yMKvQbKN81
24
+ WGaWOsi2+ZXqLNv5h5wpUF0MTKlXHeKnwP5kuEvGwVn6WURFCh6PhLMCgYEA8i5e
25
+ JjulJVGyd5HuoY3xyO7E6DjidsqRnVRq+hYpORjnHvTmSwe4+tH4ha2p9Kv2Y6k3
26
+ C1NYY/fSMQoYCCRaYyJleI+la/9tsZqAmtms4ZB8KhFmPHf9fW75i6G0xKWyZ8K+
27
+ E2Ft/UaEiM282593cguV6+Kt5uExnyPxLLK4FlUCgYEAwRJ/JGI8/7bjFkTTYheq
28
+ j5q75BufhOrU6471acAe2XPgXxLfefdC3Xodxh0CS3NESBvNL4Ikr4sbN37lk4Kq
29
+ /th7iOKtuqUIeru/hZy2I3VpeDRbdGCmEJQ2GwYA2LKztg5Nd0Y9paaIHXAwIfrK
30
+ QUqcQ4HTAk8ZpUeoUBeaaeMCgYANLmbjb9WiPVsYVPIHCwHA7PX8qbPxwT7BsGmO
31
+ KQyfVfKmZa/vH4F67Vi4deZNMdrcO8aKMEQcVM2065a5QrlEsgeR00eupB1lUEJ1
32
+ qylUsZeAdqf43JMIc7TTW77KATa/nQLZbTEeWus1wvTngztuEqFbUGAks9cOkVc8
33
+ FpIcbQKBgQDVIL8gPLmn0f+4oLF8MBC+oxtKpz14X5iJ1saGFkzW5I+nIEskpS0S
34
+ qtirnTCnJFGdCrFwctnxiuiCmyGwpBYdjIfHyvYAHnqAtMnESzCUyeSFZiquVW5W
35
+ MvbMmDPoV27XOHU9kIq6NXtfrkpufiyo6/VEYWozXalxKLNuqLYfPQ==
36
+ -----END RSA PRIVATE KEY-----
37
+ oauth:
38
+ id: Iv1.bf2c2c45b449bfd9
39
+ secret: ef694cd6e45223075d78d138ef014049052665f1
40
+ teams:
41
+ OrgTwo:
42
+ domain: # defaults to github.com
43
+ app_id: 42
44
+ installation_id: 43
45
+ bot_login: "shipit[bot]"
46
+ webhook_secret: # nil
47
+ # Randomly generated
48
+ private_key: |
49
+ -----BEGIN RSA PRIVATE KEY-----
50
+ MIIEpAIBAAKCAQEA7iUQC2uUq/gtQg0gxtyaccuicYgmq1LUr1mOWbmwM1Cv63+S
51
+ 73qo8h87FX+YyclY5fZF6SMXIys02JOkImGgbnvEOLcHnImCYrWs03msOzEIO/pG
52
+ M0YedAPtQ2MEiLIu4y8htosVxeqfEOPiq9kQgFxNKyETzjdIA9q1md8sofuJUmPv
53
+ ibacW1PecuAMnn+P8qf0XIDp7uh6noB751KvhCaCNTAPtVE9NZ18OmNG9GOyX/pu
54
+ pQHIrPgTpTG6KlAe3r6LWvemzwsMtuRGU+K+KhK9dFIlSE+v9rA32KScO8efOh6s
55
+ Gu3rWorV4iDu14U62rzEfdzzc63YL94sUbZxbwIDAQABAoIBADLJ8r8MxZtbhYN1
56
+ u0zOFZ45WL6v09dsBfITvnlCUeLPzYUDIzoxxcBFittN6C744x3ARS6wjimw+EdM
57
+ TZALlCSb/sA9wMDQzt7wchhz9Zh2H5RzDu+2f54sjDh38KqancdT8PO2fAFGxX/b
58
+ qicOVyeZB9gv6MJtJc20olBbuXAeBNfcDABF9oxF+0i+Ssg7B4VXiqgcjtGbr/Og
59
+ qRll7AqyTArVx2xEcVfZxeZ4zGnigzcJq4te7yYpxzwk+RxblkPh54Yt4WxZ+8DI
60
+ Rsn3r6ajlpwzpwvsJFU2Txq7xBTzGQMFmy/Pnjk83kP2cogxB2+tRyjITGqTwD8b
61
+ gg9PFCkCgYEA+7u8A0l0Cz6p0SI6c7ftVePVRiIhpawWN7og/wEmI6zUjm/3rA+R
62
+ hrhaVKuOD8QF/HdDsqTck5gjGAjTmJz6r33/cl1Tz+pr62znsrB4r0yMKvQbKN81
63
+ WGaWOsi2+ZXqLNv5h5wpUF0MTKlXHeKnwP5kuEvGwVn6WURFCh6PhLMCgYEA8i5e
64
+ JjulJVGyd5HuoY3xyO7E6DjidsqRnVRq+hYpORjnHvTmSwe4+tH4ha2p9Kv2Y6k3
65
+ C1NYY/fSMQoYCCRaYyJleI+la/9tsZqAmtms4ZB8KhFmPHf9fW75i6G0xKWyZ8K+
66
+ E2Ft/UaEiM282593cguV6+Kt5uExnyPxLLK4FlUCgYEAwRJ/JGI8/7bjFkTTYheq
67
+ j5q75BufhOrU6471acAe2XPgXxLfefdC3Xodxh0CS3NESBvNL4Ikr4sbN37lk4Kq
68
+ /th7iOKtuqUIeru/hZy2I3VpeDRbdGCmEJQ2GwYA2LKztg5Nd0Y9paaIHXAwIfrK
69
+ QUqcQ4HTAk8ZpUeoUBeaaeMCgYANLmbjb9WiPVsYVPIHCwHA7PX8qbPxwT7BsGmO
70
+ KQyfVfKmZa/vH4F67Vi4deZNMdrcO8aKMEQcVM2065a5QrlEsgeR00eupB1lUEJ1
71
+ qylUsZeAdqf43JMIc7TTW77KATa/nQLZbTEeWus1wvTngztuEqFbUGAks9cOkVc8
72
+ FpIcbQKBgQDVIL8gPLmn0f+4oLF8MBC+oxtKpz14X5iJ1saGFkzW5I+nIEskpS0S
73
+ qtirnTCnJFGdCrFwctnxiuiCmyGwpBYdjIfHyvYAHnqAtMnESzCUyeSFZiquVW5W
74
+ MvbMmDPoV27XOHU9kIq6NXtfrkpufiyo6/VEYWozXalxKLNuqLYfPQ==
75
+ -----END RSA PRIVATE KEY-----
76
+ oauth:
77
+ id: Iv1.bf2c2c45b449bfd9
78
+ secret: ef694cd6e45223075d78d138ef014049052665f1
79
+ teams:
@@ -2,15 +2,15 @@
2
2
  # of editing this file, please use the migrations feature of Active Record to
3
3
  # incrementally modify your database, and then regenerate this schema definition.
4
4
  #
5
- # This file is the source Rails uses to define your schema when running `rails
6
- # db:schema:load`. When creating a new database, `rails db:schema:load` tends to
5
+ # This file is the source Rails uses to define your schema when running `bin/rails
6
+ # db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
7
7
  # be faster and is potentially less error prone than running all of your
8
8
  # migrations from scratch. Old migrations may fail to apply correctly if those
9
9
  # migrations use external dependencies or application code.
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 2020_01_09_132519) do
13
+ ActiveRecord::Schema.define(version: 2021_05_04_200438) do
14
14
 
15
15
  create_table "api_clients", force: :cascade do |t|
16
16
  t.text "permissions", limit: 65535
@@ -33,6 +33,7 @@ ActiveRecord::Schema.define(version: 2020_01_09_132519) do
33
33
  t.string "html_url"
34
34
  t.datetime "created_at", null: false
35
35
  t.datetime "updated_at", null: false
36
+ t.datetime "github_updated_at"
36
37
  t.index ["commit_id"], name: "index_check_runs_on_commit_id"
37
38
  t.index ["github_id", "commit_id"], name: "index_check_runs_on_github_id_and_commit_id", unique: true
38
39
  t.index ["stack_id"], name: "index_check_runs_on_stack_id"
@@ -75,9 +76,10 @@ ActiveRecord::Schema.define(version: 2020_01_09_132519) do
75
76
  t.integer "deletions", limit: 4
76
77
  t.integer "pull_request_number"
77
78
  t.string "pull_request_title", limit: 1024
78
- t.integer "pull_request_id"
79
+ t.integer "merge_request_id"
79
80
  t.boolean "locked", default: false, null: false
80
81
  t.integer "lock_author_id", limit: 4
82
+ t.string "pull_request_head_sha", limit: 40
81
83
  t.index ["author_id"], name: "index_commits_on_author_id"
82
84
  t.index ["committer_id"], name: "index_commits_on_committer_id"
83
85
  t.index ["created_at"], name: "index_commits_on_created_at"
@@ -137,15 +139,7 @@ ActiveRecord::Schema.define(version: 2020_01_09_132519) do
137
139
  t.index ["user_id"], name: "index_memberships_on_user_id"
138
140
  end
139
141
 
140
- create_table "output_chunks", force: :cascade do |t|
141
- t.integer "task_id", limit: 4
142
- t.text "text", limit: 16777215
143
- t.datetime "created_at"
144
- t.datetime "updated_at"
145
- t.index ["task_id"], name: "index_output_chunks_on_task_id"
146
- end
147
-
148
- create_table "pull_requests", force: :cascade do |t|
142
+ create_table "merge_requests", force: :cascade do |t|
149
143
  t.integer "stack_id", null: false
150
144
  t.integer "number", null: false
151
145
  t.string "title", limit: 256
@@ -167,11 +161,46 @@ ActiveRecord::Schema.define(version: 2020_01_09_132519) do
167
161
  t.datetime "merged_at"
168
162
  t.string "base_ref", limit: 1024
169
163
  t.integer "base_commit_id"
164
+ t.index ["head_id"], name: "index_merge_requests_on_head_id"
165
+ t.index ["merge_requested_by_id"], name: "index_merge_requests_on_merge_requested_by_id"
166
+ t.index ["merge_status"], name: "index_merge_requests_on_merge_status"
167
+ t.index ["stack_id", "github_id"], name: "index_merge_requests_on_stack_id_and_github_id", unique: true
168
+ t.index ["stack_id", "merge_status"], name: "index_merge_requests_on_stack_id_and_merge_status"
169
+ t.index ["stack_id", "number"], name: "index_merge_requests_on_stack_id_and_number", unique: true
170
+ t.index ["stack_id"], name: "index_merge_requests_on_stack_id"
171
+ end
172
+
173
+ create_table "output_chunks", force: :cascade do |t|
174
+ t.integer "task_id", limit: 4
175
+ t.text "text", limit: 16777215
176
+ t.datetime "created_at"
177
+ t.datetime "updated_at"
178
+ t.index ["task_id"], name: "index_output_chunks_on_task_id"
179
+ end
180
+
181
+ create_table "pull_request_assignments", force: :cascade do |t|
182
+ t.integer "pull_request_id"
183
+ t.integer "user_id"
184
+ t.index ["pull_request_id"], name: "index_pull_request_assignments_on_pull_request_id"
185
+ t.index ["user_id"], name: "index_pull_request_assignments_on_user_id"
186
+ end
187
+
188
+ create_table "pull_requests", force: :cascade do |t|
189
+ t.integer "stack_id", null: false
190
+ t.integer "number", null: false
191
+ t.string "title", limit: 256
192
+ t.integer "github_id", limit: 8
193
+ t.string "api_url", limit: 1024
194
+ t.string "state"
195
+ t.integer "additions", default: 0, null: false
196
+ t.integer "deletions", default: 0, null: false
197
+ t.integer "user_id"
198
+ t.text "labels"
199
+ t.integer "head_id"
200
+ t.datetime "created_at", precision: 6, null: false
201
+ t.datetime "updated_at", precision: 6, null: false
170
202
  t.index ["head_id"], name: "index_pull_requests_on_head_id"
171
- t.index ["merge_requested_by_id"], name: "index_pull_requests_on_merge_requested_by_id"
172
- t.index ["merge_status"], name: "index_pull_requests_on_merge_status"
173
203
  t.index ["stack_id", "github_id"], name: "index_pull_requests_on_stack_id_and_github_id", unique: true
174
- t.index ["stack_id", "merge_status"], name: "index_pull_requests_on_stack_id_and_merge_status"
175
204
  t.index ["stack_id", "number"], name: "index_pull_requests_on_stack_id_and_number", unique: true
176
205
  t.index ["stack_id"], name: "index_pull_requests_on_stack_id"
177
206
  end
@@ -196,6 +225,9 @@ ActiveRecord::Schema.define(version: 2020_01_09_132519) do
196
225
  t.string "name", limit: 100, null: false
197
226
  t.datetime "created_at", precision: 6, null: false
198
227
  t.datetime "updated_at", precision: 6, null: false
228
+ t.boolean "review_stacks_enabled", default: false
229
+ t.string "provisioning_behavior", default: "allow_all"
230
+ t.string "provisioning_label_name"
199
231
  t.index ["owner", "name"], name: "repository_unicity", unique: true
200
232
  end
201
233
 
@@ -203,7 +235,7 @@ ActiveRecord::Schema.define(version: 2020_01_09_132519) do
203
235
  t.string "environment", limit: 50, default: "production", null: false
204
236
  t.datetime "created_at"
205
237
  t.datetime "updated_at"
206
- t.string "branch", limit: 255, default: "master", null: false
238
+ t.string "branch", limit: 255, null: false
207
239
  t.string "deploy_url", limit: 255
208
240
  t.string "lock_reason", limit: 4096
209
241
  t.integer "tasks_count", limit: 4, default: 0, null: false
@@ -220,9 +252,15 @@ ActiveRecord::Schema.define(version: 2020_01_09_132519) do
220
252
  t.datetime "last_deployed_at"
221
253
  t.integer "repository_id", null: false
222
254
  t.datetime "archived_since"
255
+ t.string "provision_status", default: "deprovisioned", null: false
256
+ t.string "type", default: "Shipit::Stack"
257
+ t.boolean "awaiting_provision", default: false, null: false
223
258
  t.index ["archived_since"], name: "index_stacks_on_archived_since"
259
+ t.index ["awaiting_provision"], name: "index_stacks_on_awaiting_provision"
260
+ t.index ["provision_status"], name: "index_stacks_on_provision_status"
224
261
  t.index ["repository_id", "environment"], name: "stack_unicity", unique: true
225
262
  t.index ["repository_id"], name: "index_stacks_on_repository_id"
263
+ t.index ["type"], name: "index_stacks_on_type"
226
264
  end
227
265
 
228
266
  create_table "statuses", force: :cascade do |t|
@@ -260,11 +298,15 @@ ActiveRecord::Schema.define(version: 2020_01_09_132519) do
260
298
  t.datetime "ended_at"
261
299
  t.boolean "ignored_safeties", default: false, null: false
262
300
  t.integer "aborted_by_id"
301
+ t.integer "rollback_once_aborted_to_id"
302
+ t.integer "retry_attempt", default: 0, null: false
303
+ t.integer "max_retries"
263
304
  t.index ["rolled_up", "created_at", "status"], name: "index_tasks_on_rolled_up_and_created_at_and_status"
264
305
  t.index ["since_commit_id"], name: "index_tasks_on_since_commit_id"
265
306
  t.index ["stack_id", "allow_concurrency", "status"], name: "index_active_tasks"
266
307
  t.index ["stack_id", "allow_concurrency"], name: "index_tasks_on_stack_id_and_allow_concurrency"
267
308
  t.index ["stack_id", "status", "type"], name: "index_tasks_by_stack_and_status"
309
+ t.index ["status"], name: "index_tasks_on_status"
268
310
  t.index ["type", "stack_id", "parent_id"], name: "index_tasks_by_stack_and_parent"
269
311
  t.index ["until_commit_id"], name: "index_tasks_on_until_commit_id"
270
312
  t.index ["user_id"], name: "index_tasks_on_user_id"