shipit-engine 0.28.1 → 0.33.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 +41 -2
  3. data/Rakefile +4 -2
  4. data/app/assets/images/archive-solid.svg +1 -0
  5. data/app/assets/images/magic-solid.svg +1 -0
  6. data/app/assets/javascripts/shipit/repositories_search.js.coffee +60 -0
  7. data/app/assets/javascripts/shipit/{search.js.coffee → stack_search.js.coffee} +0 -0
  8. data/app/assets/stylesheets/_pages/_repositories.scss +148 -0
  9. data/app/assets/stylesheets/_pages/_stacks.scss +95 -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 +13 -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 +4 -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 +33 -0
  28. data/app/controllers/shipit/api/stacks_controller.rb +50 -5
  29. data/app/controllers/shipit/api/tasks_controller.rb +6 -5
  30. data/app/controllers/shipit/api_clients_controller.rb +50 -0
  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 +5 -4
  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 +33 -28
  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 +78 -14
  43. data/app/controllers/shipit/status_controller.rb +2 -1
  44. data/app/controllers/shipit/tasks_controller.rb +9 -8
  45. data/app/controllers/shipit/webhooks_controller.rb +5 -132
  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 -0
  51. data/app/helpers/shipit/stacks_helper.rb +9 -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 +4 -1
  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 +3 -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 +1 -0
  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 +5 -4
  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 +2 -1
  70. data/app/jobs/shipit/{mark_deploy_healty_job.rb → 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 -90
  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 +4 -3
  83. data/app/models/concerns/shipit/deferred_touch.rb +4 -3
  84. data/app/models/shipit/anonymous_user.rb +9 -0
  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 +5 -4
  88. data/app/models/shipit/command_line_user.rb +5 -0
  89. data/app/models/shipit/commit.rb +41 -22
  90. data/app/models/shipit/commit_checks.rb +2 -0
  91. data/app/models/shipit/commit_deployment.rb +17 -12
  92. data/app/models/shipit/commit_deployment_status.rb +8 -3
  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 +41 -10
  96. data/app/models/shipit/deploy_spec.rb +38 -7
  97. data/app/models/shipit/deploy_spec/bundler_discovery.rb +2 -1
  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 +1 -0
  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 +58 -0
  106. data/app/models/shipit/duration.rb +3 -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 +8 -5
  111. data/app/models/shipit/membership.rb +3 -2
  112. data/app/models/shipit/merge_request.rb +302 -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 +27 -260
  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 +3 -2
  121. data/app/models/shipit/repository.rb +97 -0
  122. data/app/models/shipit/review_stack.rb +116 -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 +130 -57
  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 +1 -0
  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 +118 -14
  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 +110 -0
  135. data/app/models/shipit/team.rb +2 -1
  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 +15 -8
  139. data/app/models/shipit/variable_definition.rb +1 -0
  140. data/app/models/shipit/webhooks.rb +43 -0
  141. data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +20 -0
  142. data/app/models/shipit/webhooks/handlers/handler.rb +41 -0
  143. data/app/models/shipit/webhooks/handlers/membership_handler.rb +46 -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 +21 -0
  154. data/app/models/shipit/webhooks/handlers/status_handler.rb +27 -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 +12 -5
  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 +4 -3
  171. data/app/validators/subset_validator.rb +1 -0
  172. data/app/views/layouts/_head.html.erb +0 -0
  173. data/app/views/layouts/shipit.html.erb +5 -3
  174. data/app/views/shipit/_variables.html.erb +1 -1
  175. data/app/views/shipit/api_clients/index.html.erb +36 -0
  176. data/app/views/shipit/api_clients/new.html.erb +33 -0
  177. data/app/views/shipit/api_clients/show.html.erb +35 -0
  178. data/app/views/shipit/ccmenu/project.xml.builder +2 -1
  179. data/app/views/shipit/deploys/show.html.erb +2 -2
  180. data/app/views/shipit/merge_requests/_merge_request.html.erb +29 -0
  181. data/app/views/shipit/{pull_requests → merge_requests}/index.html.erb +2 -2
  182. data/app/views/shipit/merge_requests/merge_requests/_pull_request.html.erb +29 -0
  183. data/app/views/shipit/merge_requests/merge_requests/index.html.erb +20 -0
  184. data/app/views/shipit/merge_status/_merge_queue_button.html.erb +3 -3
  185. data/app/views/shipit/merge_status/backlogged.html.erb +1 -1
  186. data/app/views/shipit/merge_status/failure.html.erb +1 -1
  187. data/app/views/shipit/merge_status/locked.html.erb +1 -1
  188. data/app/views/shipit/merge_status/logged_out.erb +1 -1
  189. data/app/views/shipit/merge_status/success.html.erb +2 -2
  190. data/app/views/shipit/repositories/_header.html.erb +19 -0
  191. data/app/views/shipit/repositories/index.html.erb +31 -0
  192. data/app/views/shipit/repositories/new.html.erb +23 -0
  193. data/app/views/shipit/repositories/settings.html.erb +53 -0
  194. data/app/views/shipit/repositories/show.html.erb +30 -0
  195. data/app/views/shipit/stacks/_banners.html.erb +13 -0
  196. data/app/views/shipit/stacks/_header.html.erb +30 -12
  197. data/app/views/shipit/stacks/_links.html.erb +1 -0
  198. data/app/views/shipit/stacks/_stack.html.erb +8 -0
  199. data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
  200. data/app/views/shipit/stacks/index.html.erb +9 -3
  201. data/app/views/shipit/stacks/settings.html.erb +22 -3
  202. data/app/views/shipit/stacks/show.html.erb +1 -1
  203. data/app/views/shipit/stacks/statistics.html.erb +82 -0
  204. data/app/views/shipit/tasks/_task_output.html.erb +1 -1
  205. data/app/views/shipit/tasks/show.html.erb +1 -1
  206. data/config/initializers/inflections.rb +2 -1
  207. data/config/locales/en.yml +18 -5
  208. data/config/routes.rb +29 -7
  209. data/db/migrate/20191209231045_create_shipit_repositories.rb +12 -0
  210. data/db/migrate/20191209231307_add_repository_reference_to_stacks.rb +15 -0
  211. data/db/migrate/20191216162728_backfill_repository_data.rb +22 -0
  212. data/db/migrate/20191216163010_remove_repository_information_from_stacks.rb +20 -0
  213. data/db/migrate/20191219205202_add_archived_since_to_stacks.rb +6 -0
  214. data/db/migrate/20200102175621_optional_task_commits.rb +6 -0
  215. data/db/migrate/20200109132519_add_sha_to_commit_deployments.rb +5 -0
  216. data/db/migrate/20200226211925_add_index_to_tasks_status.rb +5 -0
  217. data/db/migrate/20200427135152_add_pull_request_head_sha_to_commit.rb +5 -0
  218. data/db/migrate/20200615181558_add_rollback_once_aborted_to.rb +5 -0
  219. data/db/migrate/20200706145406_add_review_stacks.rb +12 -0
  220. data/db/migrate/20200804144639_rename_pull_request_to_merge_request.rb +7 -0
  221. data/db/migrate/20200804161512_rename_commits_pull_request_id_to_merge_request_id.rb +5 -0
  222. data/db/migrate/20200813134712_recreate_shipit_pull_requests.rb +22 -0
  223. data/db/migrate/20200813194056_create_pull_request_assignments.rb +8 -0
  224. data/db/migrate/20201001125502_add_provision_pr_stacks_flag_to_repositories.rb +7 -0
  225. data/db/migrate/20201008145809_add_retry_attempt_to_tasks.rb +5 -0
  226. data/db/migrate/20201008152744_add_max_retries_to_tasks.rb +5 -0
  227. data/lib/shipit.rb +23 -3
  228. data/lib/shipit/cast_value.rb +1 -0
  229. data/lib/shipit/command.rb +14 -18
  230. data/lib/shipit/commands.rb +5 -4
  231. data/lib/shipit/csv_serializer.rb +1 -0
  232. data/lib/shipit/deploy_commands.rb +1 -0
  233. data/lib/shipit/engine.rb +11 -2
  234. data/lib/shipit/environment_variables.rb +11 -1
  235. data/lib/shipit/first_parent_commits_iterator.rb +1 -0
  236. data/lib/shipit/flock.rb +1 -0
  237. data/lib/shipit/github_app.rb +41 -10
  238. data/lib/shipit/github_http_cache_middleware.rb +1 -0
  239. data/lib/shipit/null_serializer.rb +1 -0
  240. data/lib/shipit/octokit_check_runs.rb +3 -2
  241. data/lib/shipit/octokit_iterator.rb +3 -2
  242. data/lib/shipit/paginator.rb +3 -2
  243. data/lib/shipit/review_stack_commands.rb +8 -0
  244. data/lib/shipit/rollback_commands.rb +1 -0
  245. data/lib/shipit/same_site_cookie_middleware.rb +29 -0
  246. data/lib/shipit/simple_message_verifier.rb +1 -0
  247. data/lib/shipit/stack_commands.rb +12 -4
  248. data/lib/shipit/stat.rb +1 -0
  249. data/lib/shipit/task_commands.rb +23 -14
  250. data/lib/shipit/version.rb +2 -1
  251. data/lib/snippets/release-gem +5 -1
  252. data/lib/tasks/cron.rake +13 -2
  253. data/lib/tasks/dev.rake +3 -2
  254. data/lib/tasks/shipit.rake +16 -17
  255. data/lib/tasks/teams.rake +1 -0
  256. data/test/controllers/api/base_controller_test.rb +3 -2
  257. data/test/controllers/api/ccmenu_controller_test.rb +9 -8
  258. data/test/controllers/api/commits_controller_test.rb +3 -2
  259. data/test/controllers/api/deploys_controller_test.rb +15 -14
  260. data/test/controllers/api/hooks_controller_test.rb +8 -7
  261. data/test/controllers/api/locks_controller_test.rb +7 -6
  262. data/test/controllers/api/{pull_requests_controller_test.rb → merge_requests_controller_test.rb} +17 -16
  263. data/test/controllers/api/outputs_controller_test.rb +4 -2
  264. data/test/controllers/api/release_statuses_controller_test.rb +2 -1
  265. data/test/controllers/api/rollback_controller_test.rb +113 -0
  266. data/test/controllers/api/stacks_controller_test.rb +65 -16
  267. data/test/controllers/api/tasks_controller_test.rb +13 -12
  268. data/test/controllers/api_clients_controller_test.rb +104 -0
  269. data/test/controllers/ccmenu_controller_test.rb +4 -3
  270. data/test/controllers/commit_checks_controller_test.rb +4 -3
  271. data/test/controllers/commits_controller_test.rb +3 -2
  272. data/test/controllers/deploys_controller_test.rb +33 -22
  273. data/test/controllers/github_authentication_controller_test.rb +1 -0
  274. data/test/controllers/merge_requests_controller_test.rb +32 -0
  275. data/test/controllers/merge_status_controller_test.rb +27 -9
  276. data/test/controllers/release_statuses_controller_test.rb +3 -2
  277. data/test/controllers/repositories_controller_test.rb +71 -0
  278. data/test/controllers/rollbacks_controller_test.rb +9 -8
  279. data/test/controllers/stacks_controller_test.rb +72 -15
  280. data/test/controllers/status_controller_test.rb +1 -0
  281. data/test/controllers/tasks_controller_test.rb +33 -20
  282. data/test/controllers/webhooks_controller_test.rb +36 -9
  283. data/test/dummy/config/application.rb +7 -2
  284. data/test/dummy/config/environments/development.rb +23 -6
  285. data/test/dummy/config/environments/test.rb +2 -5
  286. data/test/dummy/db/schema.rb +76 -24
  287. data/test/dummy/db/seeds.rb +30 -16
  288. data/test/fixtures/payloads/check_suite_master.json +2 -2
  289. data/test/fixtures/payloads/invalid_pull_request.json +117 -0
  290. data/test/fixtures/payloads/provision_disabled_pull_request.json +454 -0
  291. data/test/fixtures/payloads/pull_request_assigned.json +480 -0
  292. data/test/fixtures/payloads/pull_request_closed.json +454 -0
  293. data/test/fixtures/payloads/pull_request_labeled.json +461 -0
  294. data/test/fixtures/payloads/pull_request_opened.json +454 -0
  295. data/test/fixtures/payloads/pull_request_reopened.json +454 -0
  296. data/test/fixtures/payloads/pull_request_unlabeled.json +454 -0
  297. data/test/fixtures/payloads/pull_request_with_no_repo.json +454 -0
  298. data/test/fixtures/shipit/commit_deployment_statuses.yml +4 -4
  299. data/test/fixtures/shipit/commit_deployments.yml +8 -8
  300. data/test/fixtures/shipit/commits.yml +52 -1
  301. data/test/fixtures/shipit/merge_requests.yml +141 -0
  302. data/test/fixtures/shipit/pull_request_assignments.yml +3 -0
  303. data/test/fixtures/shipit/pull_requests.yml +10 -131
  304. data/test/fixtures/shipit/repositories.yml +28 -0
  305. data/test/fixtures/shipit/stacks.yml +335 -30
  306. data/test/fixtures/shipit/statuses.yml +9 -0
  307. data/test/fixtures/shipit/tasks.yml +69 -3
  308. data/test/fixtures/shipit/users.yml +7 -0
  309. data/test/fixtures/timeout +2 -1
  310. data/test/helpers/api_helper.rb +1 -0
  311. data/test/helpers/fixture_aliases_helper.rb +1 -0
  312. data/test/helpers/hooks_helper.rb +2 -1
  313. data/test/helpers/json_helper.rb +15 -11
  314. data/test/helpers/links_helper.rb +4 -3
  315. data/test/helpers/payloads_helper.rb +5 -0
  316. data/test/helpers/queries_helper.rb +3 -2
  317. data/test/jobs/cache_deploy_spec_job_test.rb +2 -1
  318. data/test/jobs/chunk_rollup_job_test.rb +16 -1
  319. data/test/jobs/deliver_hook_job_test.rb +1 -0
  320. data/test/jobs/destroy_repository_job_test.rb +27 -0
  321. data/test/jobs/destroy_stack_job_test.rb +10 -0
  322. data/test/jobs/emit_event_job_test.rb +2 -1
  323. data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
  324. data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
  325. data/test/jobs/github_sync_job_test.rb +1 -0
  326. data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
  327. data/test/jobs/perform_task_job_test.rb +12 -11
  328. data/test/jobs/{merge_pull_requests_job_test.rb → process_merge_requests_job_test.rb} +19 -18
  329. data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
  330. data/test/jobs/reap_dead_tasks_job_test.rb +68 -0
  331. data/test/jobs/refresh_github_user_job_test.rb +1 -0
  332. data/test/jobs/refresh_status_job_test.rb +1 -0
  333. data/test/jobs/unique_job_test.rb +1 -0
  334. data/test/jobs/update_github_last_deployed_ref_job_test.rb +1 -0
  335. data/test/lib/shipit/deploy_commands_test.rb +16 -0
  336. data/test/lib/shipit/task_commands_test.rb +17 -0
  337. data/test/middleware/same_site_cookie_middleware_test.rb +52 -0
  338. data/test/models/api_client_test.rb +1 -0
  339. data/test/models/commit_checks_test.rb +1 -0
  340. data/test/models/commit_deployment_status_test.rb +34 -4
  341. data/test/models/commit_deployment_test.rb +9 -11
  342. data/test/models/commits_test.rb +116 -21
  343. data/test/models/delivery_test.rb +2 -1
  344. data/test/models/deploy_spec_test.rb +103 -65
  345. data/test/models/deploy_stats_test.rb +113 -0
  346. data/test/models/deploys_test.rb +207 -26
  347. data/test/models/duration_test.rb +1 -0
  348. data/test/models/github_hook_test.rb +1 -0
  349. data/test/models/hook_test.rb +20 -16
  350. data/test/models/membership_test.rb +1 -0
  351. data/test/models/{pull_request_test.rb → merge_request_test.rb} +48 -41
  352. data/test/models/pull_request_assignment_test.rb +16 -0
  353. data/test/models/release_statuses_test.rb +1 -0
  354. data/test/models/rollbacks_test.rb +1 -0
  355. data/test/models/shipit/check_run_test.rb +1 -0
  356. data/test/models/shipit/provisioning_handler/base_test.rb +33 -0
  357. data/test/models/shipit/provisioning_handler/unregistered_provisioning_handler_test.rb +49 -0
  358. data/test/models/shipit/provisioning_handler_test.rb +64 -0
  359. data/test/models/shipit/pull_request_test.rb +52 -0
  360. data/test/models/shipit/repository_test.rb +81 -0
  361. data/test/models/shipit/review_stack_provision_status_test.rb +77 -0
  362. data/test/models/shipit/review_stack_provisioning_queue_test.rb +63 -0
  363. data/test/models/shipit/review_stack_test.rb +59 -0
  364. data/test/models/{stacks_test.rb → shipit/stacks_test.rb} +120 -60
  365. data/test/models/shipit/webhooks/handlers/pull_request/assigned_handler_test.rb +45 -0
  366. data/test/models/shipit/webhooks/handlers/pull_request/closed_handler_test.rb +192 -0
  367. data/test/models/shipit/webhooks/handlers/pull_request/edited_handler_test.rb +47 -0
  368. data/test/models/shipit/webhooks/handlers/pull_request/label_capturing_handler_test.rb +209 -0
  369. data/test/models/shipit/webhooks/handlers/pull_request/labeled_handler_test.rb +332 -0
  370. data/test/models/shipit/webhooks/handlers/pull_request/opened_handler_test.rb +238 -0
  371. data/test/models/shipit/webhooks/handlers/pull_request/reopened_handler_test.rb +282 -0
  372. data/test/models/shipit/webhooks/handlers/pull_request/review_stack_adapter_test.rb +83 -0
  373. data/test/models/shipit/webhooks/handlers/pull_request/unlabeled_handler_test.rb +324 -0
  374. data/test/models/shipit/webhooks/handlers_test.rb +27 -0
  375. data/test/models/status/group_test.rb +1 -0
  376. data/test/models/status/missing_test.rb +1 -0
  377. data/test/models/status_test.rb +1 -0
  378. data/test/models/task_definitions_test.rb +9 -8
  379. data/test/models/tasks_test.rb +59 -1
  380. data/test/models/team_test.rb +4 -2
  381. data/test/models/undeployed_commits_test.rb +14 -0
  382. data/test/models/users_test.rb +13 -5
  383. data/test/serializers/shipit/pull_request_serializer_test.rb +29 -0
  384. data/test/test_command_integration.rb +3 -2
  385. data/test/test_helper.rb +37 -32
  386. data/test/unit/anonymous_user_serializer_test.rb +14 -0
  387. data/test/unit/command_test.rb +15 -10
  388. data/test/unit/commands_test.rb +1 -0
  389. data/test/unit/commit_serializer_test.rb +16 -0
  390. data/test/unit/csv_serializer_test.rb +3 -2
  391. data/test/unit/deploy_commands_test.rb +14 -4
  392. data/test/unit/deploy_serializer_test.rb +17 -0
  393. data/test/unit/environment_variables_test.rb +5 -4
  394. data/test/unit/github_app_test.rb +137 -0
  395. data/test/unit/github_url_helper_test.rb +6 -0
  396. data/test/unit/rollback_commands_test.rb +2 -1
  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 +1 -0
  400. data/test/unit/user_serializer_test.rb +14 -0
  401. data/test/unit/variable_definition_test.rb +1 -0
  402. metadata +334 -169
  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
@@ -0,0 +1,30 @@
1
+ <% subscribe events_path(channels: ["repository.#{@repository.id}"]), '#layout-content' %>
2
+
3
+ <%= render partial: 'shipit/repositories/header', locals: {repository: @repository} %>
4
+
5
+ <div class="wrapper">
6
+ <section>
7
+ <% cache [@repository, params[:show_archived]] do %>
8
+ <section>
9
+ <header class="section-header">
10
+ <h2>Stacks</h2>
11
+ </header>
12
+ <ul class="repository-table-header">
13
+ <li class="col">Name</li>
14
+ <li class="col">Environment</li>
15
+ <li class="col">Branch</li>
16
+ <li class="col">Deploy URL</li>
17
+ </ul>
18
+ <ul class="repository-lst">
19
+ <%= render @stacks %>
20
+ </ul>
21
+
22
+ <%= link_to 'show all stacks', '#', class: 'btn secondary show-all-stacks' %></p>
23
+ <% if @show_archived %>
24
+ <%= link_to 'hide archived stacks', '?', class: 'btn secondary' %></p>
25
+ <% else %>
26
+ <%= link_to 'show archived stacks', '?show_archived=1', class: 'btn secondary' %></p>
27
+ <% end %>
28
+ </section>
29
+ <% end %>
30
+ </div>
@@ -49,6 +49,19 @@
49
49
  </div>
50
50
  <% end %>
51
51
 
52
+ <% if stack.awaiting_provision? %>
53
+ <div class="banner banner--orange">
54
+ <div class="banner__inner wrapper">
55
+ <div class="banner__content">
56
+ <h2 class="banner__title">
57
+ <i class="icon icon--list"></i>
58
+ This stack is in a queue waiting on provisioning. This may be because too many review stacks exist for this repository.
59
+ </h2>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ <% end %>
64
+
52
65
  <% if stack.continuous_delivery_delayed? %>
53
66
  <div class="banner">
54
67
  <div class="banner__inner wrapper">
@@ -5,23 +5,29 @@
5
5
 
6
6
 
7
7
  <% content_for :primary_navigation do %>
8
- <%= link_to 'Refresh statuses & commits', stack_refresh_path(stack), method: 'post', class: "header__btn btn" %>
8
+ <%= link_to t('stack.nav.refresh'), stack_refresh_path(stack), method: 'post', class: "header__btn btn" %>
9
9
  <% end %>
10
10
 
11
11
  <% content_for :secondary_navigation do %>
12
12
  <ul class="nav__list nav__list--primary">
13
13
  <li class="nav__list__item">
14
- <%= link_to "Commits & Deploys", stack_path(stack) %>
14
+ <%= link_to t('stack.nav.commits'), stack_path(stack) %>
15
15
  </li>
16
16
  <li class="nav__list__item">
17
- <%= link_to 'Settings', stack_settings_path(stack) %>
17
+ <%= link_to t('stack.nav.settings'), stack_settings_path(stack) %>
18
18
  </li>
19
19
  <li class="nav__list__item">
20
- <%= link_to 'Timeline', index_stack_tasks_path(stack) %>
20
+ <%= link_to t('stack.nav.timeline'), index_stack_tasks_path(stack) %>
21
+ </li>
22
+ <li class="nav__list__item">
23
+ <%= link_to t('stack.nav.statistics'), stack_statistics_path(stack) %>
24
+ </li>
25
+ <li class="nav__list__item">
26
+ <%= link_to 'Repository', repository_path(stack.repository) %>
21
27
  </li>
22
28
  <% if stack.merge_queue_enabled? %>
23
29
  <li class="nav__list__item">
24
- <%= link_to "Merge Queue (#{stack.pull_requests.queued.count})", stack_pull_requests_path(stack) %>
30
+ <%= link_to t('stack.nav.merge_queue', count: stack.merge_requests.queued.count), stack_merge_requests_path(stack) %>
25
31
  </li>
26
32
  <% end %>
27
33
 
@@ -35,25 +41,37 @@
35
41
  <%= link_to "#{definition.action}…", new_stack_tasks_path(stack, definition_id: definition.id), class: "trigger-deploy" %>
36
42
  </li>
37
43
  <% end %>
44
+ <li class="nav__list__sub__item">
45
+ <%= link_to "All tasks", stack_tasks_list_path(stack), class: "trigger-deploy" %>
46
+ </li>
38
47
  </ul>
39
48
  </li>
40
49
  <% end %>
50
+
51
+ <%= render partial: 'shipit/stacks/links', locals: { stack: stack } %>
41
52
  </ul>
42
53
 
43
54
  <ul class="nav__list nav__list--secondary">
44
55
  <% if stack.links.present? %>
45
- <% stack.links.each do |name, url| %>
46
- <li class="nav__list__item">
47
- <%= link_to name.humanize, url, :target => '_blank', :class => "#{name.dasherize}-url" %>
48
- </li>
49
- <% end %>
56
+ <li class="nav__list__item nav__list__item--has-children">
57
+
58
+ <%= t('stack.nav.links') %>
59
+
60
+ <ul class="nav__sub__list">
61
+ <% stack.links.each do |name, url| %>
62
+ <li class="nav__list__sub__item">
63
+ <%= link_to name.humanize, url, :target => '_blank', :class => "#{name.dasherize}-url" %>
64
+ </li>
65
+ <% end %>
66
+ </ul>
67
+ </li>
50
68
  <% end %>
51
69
  <li class="nav__list__item">
52
- <%= link_to 'View on GitHub', github_repo_url(stack.repo_owner, stack.repo_name) %>
70
+ <%= link_to t('stack.nav.view_on_github'), stack_github_url(stack) %>
53
71
  </li>
54
72
  <% if stack.deploy_url.present? %>
55
73
  <li class="nav__list__item">
56
- <%= sanitize link_to 'View website', stack.deploy_url, :target => '_blank', :class => 'deploy-url' %>
74
+ <%= sanitize link_to t('stack.nav.deploy_link'), stack.deploy_url, :target => '_blank', :class => 'deploy-url' %>
57
75
  </li>
58
76
  <% end %>
59
77
  </ul>
@@ -0,0 +1 @@
1
+ <%# Placeholder to be used by the host application %>
@@ -0,0 +1,8 @@
1
+ <li class="search-item <%= stack.archived? ? 'archived' : '' %> <%= stack.undeployed_commits? ? 'undeployed' : '' %> <%= contributor_class(current_user.stacks_contributed_to, stack.id) %>" data-search="<%= stack.repo_name %> <%= stack.environment %> <%= stack.deploy_url %>" data-stack-id="<%= stack.id %>">
2
+ <%= link_to stack_path(stack), class: 'commits-path' do %>
3
+ <span class="col"><%= stack.repo_name %></span>
4
+ <small class="col"><%= stack.environment.capitalize %></small>
5
+ <small class="col"><%= stack.branch %></small>
6
+ <small class="col"><%= stack.deploy_url %></small>
7
+ <% end %>
8
+ </li>
@@ -0,0 +1,28 @@
1
+ <% subscribe events_path(channels: ["stack.#{@stack.id}"]), '#layout-content' %>
2
+
3
+ <%= render partial: 'shipit/stacks/header', locals: {stack: @stack} %>
4
+ <%= render partial: 'shipit/stacks/banners', locals: {stack: @stack} %>
5
+
6
+ <div class="wrapper">
7
+ <section>
8
+ <header class="section-header">
9
+ <h2>Available tasks</h2>
10
+ </header>
11
+ <ul class="task-list">
12
+ <% @stack.task_definitions.each do |definition| %>
13
+ <li class="task" id="task-<%= definition.id %>">
14
+ <%= link_to "#{definition.action}", new_stack_tasks_path(@stack, definition_id: definition.id), class: "trigger-deploy" %>
15
+ </li>
16
+ <% end %>
17
+ </ul>
18
+ </section>
19
+
20
+ <section>
21
+ <header class="section-header">
22
+ <h2>Previous Tasks</h2>
23
+ </header>
24
+ <ul class="commit-list">
25
+ <%= render @tasks %>
26
+ </ul>
27
+ </section>
28
+ </div>
@@ -1,7 +1,8 @@
1
1
  <% content_for :page_title do %>
2
- <h1>Shipit</h1>
2
+ <h1><%= Shipit.app_name %></h1>
3
3
  <% end %>
4
4
  <% content_for :primary_navigation do %>
5
+ <%= link_to 'Repositories', repositories_path, class: 'btn secondary' %>
5
6
  <%= link_to 'Add a stack', new_stack_path, class: 'btn secondary' %>
6
7
  <% end %>
7
8
 
@@ -18,10 +19,10 @@
18
19
  </ul>
19
20
  <ul class="stack-lst">
20
21
  <% @stacks.each do |stack| %>
21
- <li class="search-item <%= stack.undeployed_commits? ? 'undeployed' : '' %> <%= @user_stacks.include?(stack.id) ? 'contributor' : 'not-matching' %>" data-search="<%= stack.repo_name %> <%= stack.environment %> <%= stack.deploy_url %>" data-stack-id="<%= stack.id %>">
22
+ <li class="stack search-item <%= stack.archived? ? 'archived' : '' %> <%= stack.undeployed_commits? ? 'undeployed' : '' %> <%= @user_stacks.include?(stack.id) ? 'contributor' : 'not-matching' %>" data-search="<%= stack.repo_name %> <%= stack.environment %> <%= stack.deploy_url %>" data-stack-id="<%= stack.id %>">
22
23
  <%= link_to stack_path(stack), class: 'commits-path' do %>
23
24
  <span class="col"><%= stack.repo_name %></span>
24
- <small class="col"><%= stack.environment.capitalize %></small>
25
+ <small class="col"><%= stack.environment %></small>
25
26
  <small class="col"><%= stack.branch %></small>
26
27
  <small class="col"><%= stack.deploy_url %></small>
27
28
  <% end %>
@@ -30,6 +31,11 @@
30
31
  </ul>
31
32
 
32
33
  <%= link_to 'show all stacks', '#', class: 'btn secondary show-all-stacks' %></p>
34
+ <% if @show_archived %>
35
+ <%= link_to 'hide archived stacks', '?', class: 'btn secondary' %></p>
36
+ <% else %>
37
+ <%= link_to 'show archived stacks', '?show_archived=1', class: 'btn secondary' %></p>
38
+ <% end %>
33
39
  </section>
34
40
 
35
41
  </div>
@@ -7,7 +7,7 @@
7
7
  </header>
8
8
 
9
9
  <div class="setting-section">
10
- <%= form_for @stack do |f| %>
10
+ <%= form_with scope: :stack, url: stack_path(@stack), method: :patch do |f| %>
11
11
  <div class="field-wrapper">
12
12
  <%= f.label :environment %>
13
13
  <%= f.text_field :environment, placeholder: 'production' %>
@@ -43,7 +43,7 @@
43
43
 
44
44
  <div class="setting-section">
45
45
  <h5>Lock deploys</h5>
46
- <%= form_for @stack do |f| %>
46
+ <%= form_with scope: :stack, url: stack_path(@stack), method: :patch do |f| %>
47
47
  <div class="field-wrapper">
48
48
  <%= f.label :lock_reason, 'Reason for lock' %>
49
49
  <%= f.text_area :lock_reason %>
@@ -55,12 +55,13 @@
55
55
  <% end %>
56
56
  <% end %>
57
57
  <% if @stack.locked? %>
58
- <%= form_for @stack do |f| %>
58
+ <%= form_with scope: :stack, url: stack_path(@stack), method: :patch do |f| %>
59
59
  <%= f.hidden_field :lock_reason, value: nil %>
60
60
  <%= f.submit class: "btn btn--primary", value: "Unlock" %>
61
61
  <%- end -%>
62
62
  <% end %>
63
63
  </div>
64
+
64
65
  <div class="setting-section">
65
66
  <h5>Resynchronize this stack</h5>
66
67
  <table>
@@ -80,6 +81,24 @@
80
81
  <%= button_to "Fetch URL", "", class: 'btn', data: {remote: ccmenu_url_url(stack_id: @stack.to_param)} %>
81
82
  </div>
82
83
 
84
+ <div class="setting-section">
85
+ <% if @stack.archived? %>
86
+ <h5>Restore Stack</h5>
87
+ <p>This action will de-archive the Stack, restoring it in the stack list and unlocking it.</p>
88
+ <%= form_with scope: :stack, url: stack_path(@stack), method: :patch do |f| %>
89
+ <%= f.hidden_field :archived, value: false %>
90
+ <%= f.submit class: "btn", value: "Restore" %>
91
+ <% end %>
92
+ <% else %>
93
+ <h5>Archive Stack</h5>
94
+ <p>This action will archive the Stack, hiding it from the stack list and locking it. It can still be found if you know the URL and de-archived.</p>
95
+ <%= form_with scope: :stack, url: stack_path(@stack), method: :patch do |f| %>
96
+ <%= f.hidden_field :archived, value: true %>
97
+ <%= f.submit class: "btn", value: "Archive" %>
98
+ <% end %>
99
+ <% end %>
100
+ </div>
101
+
83
102
  <div class="setting-section">
84
103
  <h5>Delete this stack</h5>
85
104
  <p>This action will delete the stack from Ship it permanently. Be careful.</p>
@@ -12,7 +12,7 @@
12
12
  <% if params[:force] %>
13
13
  <%= link_to t('emergency_mode.disable'), stack_path(@stack) %>
14
14
  <% else %>
15
- <%= link_to t('emergency_mode.enable'), stack_path(@stack, force: 1), title: t('emergency_mode.enable_description') %>
15
+ <%= link_to t('emergency_mode.enable'), stack_path(@stack, force: 1, noredirect: 1), title: t('emergency_mode.enable_description') %>
16
16
  <% end %>
17
17
  </div>
18
18
  </header>
@@ -0,0 +1,82 @@
1
+ <%= render partial: 'shipit/stacks/header', locals: {stack: @stack} %>
2
+ <%= render partial: 'shipit/stacks/banners', locals: {stack: @stack} %>
3
+
4
+ <div class="wrapper">
5
+ <section>
6
+ <header class="section-header">
7
+ <h2>Statistics &ndash; Past 7 Days</h2>
8
+ </header>
9
+
10
+ <div class="row">
11
+ <div class="box">
12
+ <div class="box__body">
13
+ <div class="stats">
14
+ <div class="stats__amount"><%= @deploy_stats.count %></div>
15
+ <div class="stats__caption">Deploys</div>
16
+ <div class="stats__change">
17
+ <div class="stats__value stats__value--<%=positive_negative_class(@diffs[:count])%>"><%= number_to_percentage(@diffs[:count], precision: 1) %></div>
18
+ <div class="stats__period">this week</div>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </div>
23
+
24
+ <div class="box">
25
+ <div class="box__body">
26
+ <div class="stats">
27
+ <div class="stats__amount"><%= number_to_percentage(@deploy_stats.success_rate, precision: 1) %></div>
28
+ <div class="stats__caption">Deploys success rate</div>
29
+ </div>
30
+ </div>
31
+ </div>
32
+
33
+ <div class="box">
34
+ <div class="box__body">
35
+ <div class="stats">
36
+ <div class="stats__amount"><%= Shipit::Duration.new @deploy_stats.average_duration %></div>
37
+ <div class="stats__caption">Average deploy time</div>
38
+ <div class="stats__change">
39
+ <div class="stats__value stats__value--<%=positive_negative_class(@diffs[:average_duration])%>"><%= number_to_percentage(@diffs[:average_duration], precision: 1) %></div>
40
+ <div class="stats__period">this week</div>
41
+ </div>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ </div>
46
+
47
+ <div class="row">
48
+ <div class="box">
49
+ <div class="box__body">
50
+ <div class="stats">
51
+ <div class="stats__amount"><%= Shipit::Duration.new @deploy_stats.min_duration %></div>
52
+ <div class="stats__caption">Min deploy time</div>
53
+ </div>
54
+ </div>
55
+ </div>
56
+
57
+ <div class="box">
58
+ <div class="box__body">
59
+ <div class="stats">
60
+ <div class="stats__amount"><%= Shipit::Duration.new @deploy_stats.median_duration %></div>
61
+ <div class="stats__caption">Median deploy time</div>
62
+ <div class="stats__change">
63
+ <div class="stats__value stats__value--<%=positive_negative_class(@diffs[:median_duration])%>"><%= number_to_percentage(@diffs[:median_duration], precision: 1) %></div>
64
+ <div class="stats__period">this week</div>
65
+ </div>
66
+ </div>
67
+ </div>
68
+ </div>
69
+
70
+ <div class="box">
71
+ <div class="box__body">
72
+ <div class="stats">
73
+ <div class="stats__amount"><%= Shipit::Duration.new @deploy_stats.max_duration %></div>
74
+ <div class="stats__caption">Max deploy time</div>
75
+ </div>
76
+ </div>
77
+ </div>
78
+ </div>
79
+
80
+ </section>
81
+
82
+ </div>
@@ -43,6 +43,6 @@
43
43
  </div>
44
44
 
45
45
  <div class="clusterize-scroll task-output-container task-output-container-main-page">
46
- <pre class="nowrap" data-status="<%= task.status %>"><code class="clusterize-content" data-output="<%= task.chunk_output %>" data-next-chunks-url="<%= next_chunks_url(task) %>"></code></pre>
46
+ <pre class="nowrap" data-status="<%= task.status %>"><code class="clusterize-content" data-output="<%= task.chunk_output %>" data-next-chunks-url="<%= next_chunks_url(task, last_byte: task.chunk_output_size) %>"></code></pre>
47
47
  </div>
48
48
  </div>
@@ -1,5 +1,5 @@
1
1
  <% content_for :task_title do %>
2
- executing <%= @task.definition.id %>
2
+ <%= @task.active? ? "executing" : "executed" %> <%= @task.definition.id %>
3
3
  <%= timeago_tag(@task.created_at, force: true) %>
4
4
  <% end %>
5
5
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ActiveSupport::Inflector.inflections(:en) do |inflect|
2
- inflect.acronym 'CCMenu'
3
+ inflect.acronym('CCMenu')
3
4
  end
@@ -20,10 +20,21 @@
20
20
  # available at http://guides.rubyonrails.org/i18n.html.
21
21
 
22
22
  en:
23
+ stack:
24
+ nav:
25
+ refresh: Refresh statuses & commits
26
+ commits: Commits & Deploys
27
+ settings: Settings
28
+ timeline: Timeline
29
+ statistics: Stats
30
+ merge_queue: "Merge Queue (%{count})"
31
+ view_on_github: View on GitHub
32
+ links: More
33
+ deploy_link: View website
23
34
  commit:
24
- lock: This commit is safe to deploy. Click to mark it as unsafe.
25
- unlock: This commit was marked as unsafe to deploy. Click to mark it as safe.
26
- unlock_with_author: "%{author} marked this commit as unsafe to deploy. Click to mark it as safe."
35
+ lock: Click to mark this commit as unsafe to deploy.
36
+ unlock: Click to mark this commit as safe to deploy.
37
+ unlock_with_author: "%{author} marked this commit as unsafe to deploy. Click to mark this commit as safe to deploy."
27
38
  confirm_unlock: Mark this commit as safe to deploy?
28
39
  release:
29
40
  validate: Mark the release as healthy
@@ -72,12 +83,14 @@ en:
72
83
  ascii: "contains non-ASCII characters"
73
84
  deployment_description:
74
85
  deploy:
75
- pending: "%{author} triggered the deploy of %{stack} to %{sha}"
86
+ in_progress: "%{author} triggered the deploy of %{stack} to %{sha}"
87
+ pending: "%{author} created the deploy of %{stack} to %{sha}"
76
88
  success: "%{author} deployed %{stack} to %{sha}"
77
89
  failure: "Deploy of %{stack} to %{sha} by %{author} failed"
78
90
  error: "Deploy of %{stack} to %{sha} by %{author} failed"
79
91
  rollback:
80
- pending: "%{author} triggered the rollback of %{stack} to %{sha}"
92
+ in_progress: "%{author} triggered the deploy of %{stack} to %{sha}"
93
+ pending: "%{author} created the rollback of %{stack} to %{sha}"
81
94
  success: "%{author} rolled back %{stack} to %{sha}"
82
95
  failure: "Rollback of %{stack} to %{sha} by %{author} failed"
83
96
  error: "Rollback of %{stack} to %{sha} by %{author} failed"
data/config/routes.rb CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
1
2
  Shipit::Engine.routes.draw do
2
3
  stack_id_format = %r{[^/]+/[^/]+/[^/]+}
4
+ repository_id_format = %r{[^/]+/[^/]+}
3
5
  sha_format = /[\da-f]{6,40}/
4
6
  root to: 'stacks#index'
5
7
 
@@ -17,6 +19,7 @@ Shipit::Engine.routes.draw do
17
19
  scope '/stacks/*id', id: stack_id_format, as: :stack do
18
20
  get '/' => 'stacks#show'
19
21
  delete '/' => 'stacks#destroy'
22
+ patch '/' => 'stacks#update'
20
23
  end
21
24
 
22
25
  scope '/stacks/*stack_id', stack_id: stack_id_format, as: :stack do
@@ -28,8 +31,9 @@ Shipit::Engine.routes.draw do
28
31
  resources :deploys, only: %i(index create) do
29
32
  resources :release_statuses, only: %i(create)
30
33
  end
34
+ resources :rollbacks, only: %i(create)
31
35
  resources :commits, only: %i(index)
32
- resources :pull_requests, only: %i(index show update destroy)
36
+ resources :merge_requests, only: %i(index show update destroy)
33
37
  post '/task/:task_name' => 'tasks#trigger', as: :trigger_task
34
38
  resources :hooks, only: %i(index create show update destroy)
35
39
  end
@@ -43,11 +47,20 @@ Shipit::Engine.routes.draw do
43
47
 
44
48
  # Browser extension
45
49
  get '/merge_status', action: :show, controller: :merge_status, as: :merge_status
46
- put '/merge_status/*stack_id/pull/:number', action: :enqueue, controller: :merge_status, id: stack_id_format, as: :enqueue_pull_request
47
- delete '/merge_status/*stack_id/pull/:number', action: :dequeue, controller: :merge_status, id: stack_id_format, as: :dequeue_pull_request
50
+ put '/merge_status/*stack_id/pull/:number', action: :enqueue, controller: :merge_status, id: stack_id_format, as: :enqueue_merge_request
51
+ delete '/merge_status/*stack_id/pull/:number', action: :dequeue, controller: :merge_status, id: stack_id_format, as: :dequeue_merge_request
48
52
 
49
53
  # Humans
50
- resources :stacks, only: %i(new create index)
54
+ resources :api_clients
55
+
56
+ resources :repositories, only: %i(new index create)
57
+ scope '/repositories/*id', id: repository_id_format, as: :repository do
58
+ get '/' => 'repositories#show'
59
+ patch '/' => 'repositories#update'
60
+ delete '/' => 'repositories#destroy'
61
+ get :settings, controller: :repositories
62
+ get 'stacks/new' => 'repositories#new_stack'
63
+ end
51
64
 
52
65
  scope '/github/auth/github', as: :github_authentication, controller: :github_authentication do
53
66
  get '/', action: :request
@@ -56,11 +69,14 @@ Shipit::Engine.routes.draw do
56
69
  get :logout
57
70
  end
58
71
 
72
+ resources :stacks, only: %i(new create index)
59
73
  scope '/*id', id: stack_id_format, as: :stack do
60
74
  get '/' => 'stacks#show'
61
75
  patch '/' => 'stacks#update'
62
76
  delete '/' => 'stacks#destroy'
63
77
  get :settings, controller: :stacks
78
+ get :all_tasks, controller: :stacks, as: :tasks_list
79
+ get :statistics, controller: :stacks
64
80
  post :refresh, controller: :stacks
65
81
  get :refresh, controller: :stacks # For easier design, sorry :/
66
82
  post :clear_git_cache, controller: :stacks
@@ -72,7 +88,9 @@ Shipit::Engine.routes.draw do
72
88
 
73
89
  scope '/*stack_id', stack_id: stack_id_format, as: :stack do
74
90
  get '/commit/:sha/checks' => 'commit_checks#show', as: :commit_checks
75
- get '/commit/:sha/checks/tail' => 'commit_checks#tail', as: :tail_commit_checks, defaults: {format: :json}
91
+ get '/commit/:sha/checks/tail' => 'commit_checks#tail', as: :tail_commit_checks, defaults: { format: :json }
92
+
93
+ get '/stats' => 'stats#show', as: :stats
76
94
 
77
95
  resources :rollbacks, only: %i(create)
78
96
  resources :commits, only: %i(update)
@@ -85,7 +103,7 @@ Shipit::Engine.routes.draw do
85
103
 
86
104
  member do
87
105
  post :abort
88
- get :tail, defaults: {format: :json}
106
+ get :tail, defaults: { format: :json }
89
107
  end
90
108
  end
91
109
 
@@ -99,7 +117,11 @@ Shipit::Engine.routes.draw do
99
117
  resources :release_statuses, only: %i(create)
100
118
  end
101
119
 
102
- resources :pull_requests, only: %i(index destroy create)
120
+ resources :merge_requests, only: %i(index destroy create)
103
121
  end
104
122
  get '/stacks/:id' => 'stacks#lookup'
123
+
124
+ scope '/*repo', repo: %r{[^/]+/[^/]+}, as: :stack_search do
125
+ get '/' => 'stacks#index'
126
+ end
105
127
  end