shipit-engine 0.31.0 → 0.32.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 (290) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/Rakefile +4 -2
  4. data/app/assets/stylesheets/_pages/_stacks.scss +0 -3
  5. data/app/assets/stylesheets/merge_status.scss +0 -3
  6. data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +1 -0
  7. data/app/controllers/concerns/shipit/api/cacheable.rb +1 -0
  8. data/app/controllers/concerns/shipit/api/paginable.rb +3 -2
  9. data/app/controllers/concerns/shipit/api/rendering.rb +5 -4
  10. data/app/controllers/concerns/shipit/authentication.rb +3 -2
  11. data/app/controllers/concerns/shipit/pagination.rb +2 -1
  12. data/app/controllers/shipit/api/base_controller.rb +11 -6
  13. data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
  14. data/app/controllers/shipit/api/commits_controller.rb +2 -1
  15. data/app/controllers/shipit/api/deploys_controller.rb +4 -3
  16. data/app/controllers/shipit/api/hooks_controller.rb +6 -5
  17. data/app/controllers/shipit/api/locks_controller.rb +5 -4
  18. data/app/controllers/shipit/api/outputs_controller.rb +2 -1
  19. data/app/controllers/shipit/api/pull_requests_controller.rb +7 -6
  20. data/app/controllers/shipit/api/release_statuses_controller.rb +3 -2
  21. data/app/controllers/shipit/api/rollbacks_controller.rb +33 -0
  22. data/app/controllers/shipit/api/stacks_controller.rb +18 -5
  23. data/app/controllers/shipit/api/tasks_controller.rb +6 -5
  24. data/app/controllers/shipit/api_clients_controller.rb +4 -3
  25. data/app/controllers/shipit/ccmenu_url_controller.rb +4 -3
  26. data/app/controllers/shipit/commit_checks_controller.rb +2 -1
  27. data/app/controllers/shipit/commits_controller.rb +2 -1
  28. data/app/controllers/shipit/deploys_controller.rb +3 -2
  29. data/app/controllers/shipit/github_authentication_controller.rb +4 -3
  30. data/app/controllers/shipit/merge_status_controller.rb +17 -16
  31. data/app/controllers/shipit/pull_requests_controller.rb +3 -2
  32. data/app/controllers/shipit/release_statuses_controller.rb +3 -2
  33. data/app/controllers/shipit/rollbacks_controller.rb +3 -2
  34. data/app/controllers/shipit/shipit_controller.rb +2 -1
  35. data/app/controllers/shipit/stacks_controller.rb +22 -7
  36. data/app/controllers/shipit/status_controller.rb +2 -1
  37. data/app/controllers/shipit/tasks_controller.rb +6 -5
  38. data/app/controllers/shipit/webhooks_controller.rb +3 -2
  39. data/app/helpers/shipit/chunks_helper.rb +1 -0
  40. data/app/helpers/shipit/deploys_helper.rb +4 -3
  41. data/app/helpers/shipit/github_url_helper.rb +1 -0
  42. data/app/helpers/shipit/merge_status_helper.rb +1 -0
  43. data/app/helpers/shipit/shipit_helper.rb +1 -0
  44. data/app/helpers/shipit/stacks_helper.rb +1 -0
  45. data/app/helpers/shipit/tasks_helper.rb +1 -0
  46. data/app/jobs/shipit/background_job.rb +4 -0
  47. data/app/jobs/shipit/background_job/unique.rb +1 -0
  48. data/app/jobs/shipit/cache_deploy_spec_job.rb +1 -0
  49. data/app/jobs/shipit/chunk_rollup_job.rb +4 -0
  50. data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
  51. data/app/jobs/shipit/continuous_delivery_job.rb +2 -1
  52. data/app/jobs/shipit/create_on_github_job.rb +6 -1
  53. data/app/jobs/shipit/create_release_statuses_job.rb +1 -0
  54. data/app/jobs/shipit/deferred_touch_job.rb +4 -0
  55. data/app/jobs/shipit/deliver_hook_job.rb +1 -0
  56. data/app/jobs/shipit/destroy_job.rb +1 -0
  57. data/app/jobs/shipit/destroy_stack_job.rb +1 -0
  58. data/app/jobs/shipit/emit_event_job.rb +2 -1
  59. data/app/jobs/shipit/fetch_commit_stats_job.rb +1 -0
  60. data/app/jobs/shipit/fetch_deployed_revision_job.rb +1 -0
  61. data/app/jobs/shipit/github_sync_job.rb +2 -1
  62. data/app/jobs/shipit/mark_deploy_healthy_job.rb +1 -0
  63. data/app/jobs/shipit/merge_pull_requests_job.rb +1 -0
  64. data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
  65. data/app/jobs/shipit/perform_task_job.rb +12 -5
  66. data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
  67. data/app/jobs/shipit/reap_dead_tasks_job.rb +21 -0
  68. data/app/jobs/shipit/refresh_check_runs_job.rb +1 -0
  69. data/app/jobs/shipit/refresh_github_user_job.rb +1 -0
  70. data/app/jobs/shipit/refresh_pull_request_job.rb +1 -0
  71. data/app/jobs/shipit/refresh_statuses_job.rb +1 -0
  72. data/app/jobs/shipit/setup_github_hook_job.rb +1 -0
  73. data/app/jobs/shipit/update_estimated_deploy_duration_job.rb +1 -0
  74. data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +4 -3
  75. data/app/models/concerns/shipit/deferred_touch.rb +4 -3
  76. data/app/models/shipit/anonymous_user.rb +5 -0
  77. data/app/models/shipit/api_client.rb +3 -2
  78. data/app/models/shipit/application_record.rb +2 -1
  79. data/app/models/shipit/check_run.rb +4 -3
  80. data/app/models/shipit/command_line_user.rb +1 -0
  81. data/app/models/shipit/commit.rb +11 -4
  82. data/app/models/shipit/commit_checks.rb +1 -0
  83. data/app/models/shipit/commit_deployment.rb +3 -2
  84. data/app/models/shipit/commit_deployment_status.rb +2 -1
  85. data/app/models/shipit/commit_message.rb +1 -0
  86. data/app/models/shipit/delivery.rb +4 -3
  87. data/app/models/shipit/deploy.rb +6 -17
  88. data/app/models/shipit/deploy_spec.rb +22 -3
  89. data/app/models/shipit/deploy_spec/bundler_discovery.rb +1 -0
  90. data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
  91. data/app/models/shipit/deploy_spec/file_system.rb +10 -3
  92. data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -0
  93. data/app/models/shipit/deploy_spec/lerna_discovery.rb +1 -0
  94. data/app/models/shipit/deploy_spec/npm_discovery.rb +5 -4
  95. data/app/models/shipit/deploy_spec/pypi_discovery.rb +1 -0
  96. data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
  97. data/app/models/shipit/deploy_stats.rb +2 -1
  98. data/app/models/shipit/duration.rb +3 -2
  99. data/app/models/shipit/ephemeral_commit_checks.rb +1 -0
  100. data/app/models/shipit/github_hook.rb +2 -1
  101. data/app/models/shipit/github_status.rb +2 -1
  102. data/app/models/shipit/hook.rb +6 -5
  103. data/app/models/shipit/membership.rb +3 -2
  104. data/app/models/shipit/output_chunk.rb +7 -2
  105. data/app/models/shipit/pull_request.rb +6 -5
  106. data/app/models/shipit/record.rb +18 -0
  107. data/app/models/shipit/release_status.rb +3 -2
  108. data/app/models/shipit/repository.rb +10 -5
  109. data/app/models/shipit/rollback.rb +1 -0
  110. data/app/models/shipit/stack.rb +50 -16
  111. data/app/models/shipit/status.rb +3 -2
  112. data/app/models/shipit/status/common.rb +7 -6
  113. data/app/models/shipit/status/group.rb +1 -0
  114. data/app/models/shipit/status/missing.rb +2 -1
  115. data/app/models/shipit/status/unknown.rb +2 -1
  116. data/app/models/shipit/task.rb +38 -5
  117. data/app/models/shipit/task_definition.rb +1 -0
  118. data/app/models/shipit/team.rb +2 -1
  119. data/app/models/shipit/undeployed_commit.rb +1 -0
  120. data/app/models/shipit/unlimited_api_client.rb +1 -0
  121. data/app/models/shipit/user.rb +10 -8
  122. data/app/models/shipit/variable_definition.rb +1 -0
  123. data/app/models/shipit/webhooks.rb +1 -0
  124. data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +1 -0
  125. data/app/models/shipit/webhooks/handlers/handler.rb +1 -0
  126. data/app/models/shipit/webhooks/handlers/membership_handler.rb +1 -0
  127. data/app/models/shipit/webhooks/handlers/push_handler.rb +1 -0
  128. data/app/models/shipit/webhooks/handlers/status_handler.rb +1 -0
  129. data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
  130. data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
  131. data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
  132. data/app/serializers/shipit/commit_serializer.rb +1 -0
  133. data/app/serializers/shipit/deploy_serializer.rb +2 -1
  134. data/app/serializers/shipit/hook_serializer.rb +1 -0
  135. data/app/serializers/shipit/pull_request_serializer.rb +1 -0
  136. data/app/serializers/shipit/rollback_serializer.rb +1 -0
  137. data/app/serializers/shipit/short_commit_serializer.rb +1 -0
  138. data/app/serializers/shipit/stack_serializer.rb +1 -0
  139. data/app/serializers/shipit/tail_task_serializer.rb +1 -0
  140. data/app/serializers/shipit/task_serializer.rb +2 -17
  141. data/app/serializers/shipit/user_serializer.rb +6 -1
  142. data/app/validators/ascii_only_validator.rb +1 -0
  143. data/app/validators/subset_validator.rb +1 -0
  144. data/app/views/layouts/shipit.html.erb +1 -1
  145. data/app/views/shipit/_variables.html.erb +1 -1
  146. data/app/views/shipit/ccmenu/project.xml.builder +2 -1
  147. data/app/views/shipit/deploys/show.html.erb +2 -2
  148. data/app/views/shipit/stacks/_header.html.erb +3 -0
  149. data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
  150. data/app/views/shipit/stacks/index.html.erb +1 -1
  151. data/app/views/shipit/tasks/show.html.erb +1 -1
  152. data/config/initializers/inflections.rb +2 -1
  153. data/config/locales/en.yml +3 -3
  154. data/config/routes.rb +10 -2
  155. data/db/migrate/20200226211925_add_index_to_tasks_status.rb +5 -0
  156. data/db/migrate/20200427135152_add_pull_request_head_sha_to_commit.rb +5 -0
  157. data/db/migrate/20200615181558_add_rollback_once_aborted_to.rb +5 -0
  158. data/lib/shipit.rb +12 -2
  159. data/lib/shipit/cast_value.rb +1 -0
  160. data/lib/shipit/command.rb +13 -12
  161. data/lib/shipit/commands.rb +5 -4
  162. data/lib/shipit/csv_serializer.rb +1 -0
  163. data/lib/shipit/deploy_commands.rb +1 -0
  164. data/lib/shipit/engine.rb +7 -2
  165. data/lib/shipit/environment_variables.rb +2 -1
  166. data/lib/shipit/first_parent_commits_iterator.rb +1 -0
  167. data/lib/shipit/flock.rb +1 -0
  168. data/lib/shipit/github_app.rb +7 -6
  169. data/lib/shipit/github_http_cache_middleware.rb +1 -0
  170. data/lib/shipit/null_serializer.rb +1 -0
  171. data/lib/shipit/octokit_check_runs.rb +3 -2
  172. data/lib/shipit/octokit_iterator.rb +3 -2
  173. data/lib/shipit/paginator.rb +3 -2
  174. data/lib/shipit/rollback_commands.rb +1 -0
  175. data/lib/shipit/same_site_cookie_middleware.rb +29 -0
  176. data/lib/shipit/simple_message_verifier.rb +1 -0
  177. data/lib/shipit/stack_commands.rb +3 -2
  178. data/lib/shipit/stat.rb +1 -0
  179. data/lib/shipit/task_commands.rb +2 -0
  180. data/lib/shipit/version.rb +2 -1
  181. data/lib/snippets/release-gem +5 -1
  182. data/lib/tasks/cron.rake +2 -0
  183. data/lib/tasks/dev.rake +3 -2
  184. data/lib/tasks/shipit.rake +15 -14
  185. data/lib/tasks/teams.rake +1 -0
  186. data/test/controllers/api/base_controller_test.rb +3 -2
  187. data/test/controllers/api/ccmenu_controller_test.rb +8 -7
  188. data/test/controllers/api/commits_controller_test.rb +3 -2
  189. data/test/controllers/api/deploys_controller_test.rb +15 -14
  190. data/test/controllers/api/hooks_controller_test.rb +8 -7
  191. data/test/controllers/api/locks_controller_test.rb +7 -6
  192. data/test/controllers/api/outputs_controller_test.rb +2 -1
  193. data/test/controllers/api/pull_requests_controller_test.rb +8 -7
  194. data/test/controllers/api/release_statuses_controller_test.rb +2 -1
  195. data/test/controllers/api/rollback_controller_test.rb +113 -0
  196. data/test/controllers/api/stacks_controller_test.rb +30 -9
  197. data/test/controllers/api/tasks_controller_test.rb +13 -12
  198. data/test/controllers/api_clients_controller_test.rb +5 -4
  199. data/test/controllers/ccmenu_controller_test.rb +4 -3
  200. data/test/controllers/commit_checks_controller_test.rb +4 -3
  201. data/test/controllers/commits_controller_test.rb +3 -2
  202. data/test/controllers/deploys_controller_test.rb +32 -21
  203. data/test/controllers/github_authentication_controller_test.rb +1 -0
  204. data/test/controllers/merge_status_controller_test.rb +7 -6
  205. data/test/controllers/pull_requests_controller_test.rb +4 -3
  206. data/test/controllers/release_statuses_controller_test.rb +3 -2
  207. data/test/controllers/rollbacks_controller_test.rb +9 -8
  208. data/test/controllers/stacks_controller_test.rb +33 -19
  209. data/test/controllers/status_controller_test.rb +1 -0
  210. data/test/controllers/tasks_controller_test.rb +19 -18
  211. data/test/controllers/webhooks_controller_test.rb +11 -10
  212. data/test/dummy/config/environments/development.rb +2 -0
  213. data/test/dummy/config/environments/test.rb +2 -0
  214. data/test/dummy/db/schema.rb +4 -1
  215. data/test/fixtures/shipit/commits.yml +15 -0
  216. data/test/fixtures/shipit/repositories.yml +4 -0
  217. data/test/fixtures/shipit/stacks.yml +90 -14
  218. data/test/fixtures/timeout +2 -1
  219. data/test/helpers/api_helper.rb +1 -0
  220. data/test/helpers/fixture_aliases_helper.rb +1 -0
  221. data/test/helpers/hooks_helper.rb +2 -1
  222. data/test/helpers/json_helper.rb +15 -11
  223. data/test/helpers/links_helper.rb +4 -3
  224. data/test/helpers/payloads_helper.rb +1 -0
  225. data/test/helpers/queries_helper.rb +3 -2
  226. data/test/jobs/cache_deploy_spec_job_test.rb +2 -1
  227. data/test/jobs/chunk_rollup_job_test.rb +1 -0
  228. data/test/jobs/deliver_hook_job_test.rb +1 -0
  229. data/test/jobs/destroy_stack_job_test.rb +1 -0
  230. data/test/jobs/emit_event_job_test.rb +2 -1
  231. data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
  232. data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
  233. data/test/jobs/github_sync_job_test.rb +1 -0
  234. data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
  235. data/test/jobs/merge_pull_requests_job_test.rb +1 -0
  236. data/test/jobs/perform_task_job_test.rb +4 -3
  237. data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
  238. data/test/jobs/reap_dead_tasks_job_test.rb +68 -0
  239. data/test/jobs/refresh_github_user_job_test.rb +1 -0
  240. data/test/jobs/refresh_status_job_test.rb +1 -0
  241. data/test/jobs/unique_job_test.rb +1 -0
  242. data/test/jobs/update_github_last_deployed_ref_job_test.rb +1 -0
  243. data/test/middleware/same_site_cookie_middleware_test.rb +52 -0
  244. data/test/models/api_client_test.rb +1 -0
  245. data/test/models/commit_checks_test.rb +1 -0
  246. data/test/models/commit_deployment_status_test.rb +1 -0
  247. data/test/models/commit_deployment_test.rb +2 -1
  248. data/test/models/commits_test.rb +72 -6
  249. data/test/models/delivery_test.rb +2 -1
  250. data/test/models/deploy_spec_test.rb +47 -42
  251. data/test/models/deploy_stats_test.rb +1 -0
  252. data/test/models/deploys_test.rb +31 -22
  253. data/test/models/duration_test.rb +1 -0
  254. data/test/models/github_hook_test.rb +1 -0
  255. data/test/models/hook_test.rb +18 -10
  256. data/test/models/membership_test.rb +1 -0
  257. data/test/models/output_chunk_test.rb +1 -0
  258. data/test/models/pull_request_test.rb +4 -3
  259. data/test/models/release_statuses_test.rb +1 -0
  260. data/test/models/rollbacks_test.rb +1 -0
  261. data/test/models/shipit/check_run_test.rb +1 -0
  262. data/test/models/shipit/repository_test.rb +1 -0
  263. data/test/models/shipit/wehbooks/handlers_test.rb +1 -0
  264. data/test/models/stacks_test.rb +30 -8
  265. data/test/models/status/group_test.rb +1 -0
  266. data/test/models/status/missing_test.rb +1 -0
  267. data/test/models/status_test.rb +1 -0
  268. data/test/models/task_definitions_test.rb +9 -8
  269. data/test/models/tasks_test.rb +18 -1
  270. data/test/models/team_test.rb +4 -2
  271. data/test/models/undeployed_commits_test.rb +1 -0
  272. data/test/models/users_test.rb +13 -5
  273. data/test/test_command_integration.rb +3 -2
  274. data/test/test_helper.rb +34 -31
  275. data/test/unit/anonymous_user_serializer_test.rb +14 -0
  276. data/test/unit/command_test.rb +8 -7
  277. data/test/unit/commands_test.rb +1 -0
  278. data/test/unit/commit_serializer_test.rb +16 -0
  279. data/test/unit/csv_serializer_test.rb +3 -2
  280. data/test/unit/deploy_commands_test.rb +5 -4
  281. data/test/unit/deploy_serializer_test.rb +17 -0
  282. data/test/unit/environment_variables_test.rb +5 -4
  283. data/test/unit/github_app_test.rb +1 -0
  284. data/test/unit/github_url_helper_test.rb +1 -0
  285. data/test/unit/rollback_commands_test.rb +2 -1
  286. data/test/unit/shipit_helper_test.rb +17 -0
  287. data/test/unit/shipit_test.rb +1 -0
  288. data/test/unit/user_serializer_test.rb +14 -0
  289. data/test/unit/variable_definition_test.rb +1 -0
  290. metadata +155 -130
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e890159cf6f243a3dc808e4c3314015d56666c3e4881bfd890fe51ee3076861e
4
- data.tar.gz: 2fec4f67b4b6811e98176572837ec484e5330500590a108cdf3f9a33c55b7040
3
+ metadata.gz: 98113cef0ad013fa29cb11fea22f09547c191310a601eb788a53fdc5fb3c7e40
4
+ data.tar.gz: 39c68de0e6356e1daab40942a817af86258ea8219726c1e4276a42bba5d79315
5
5
  SHA512:
6
- metadata.gz: 50f8f9a3ec7ce508bd0f393cbb8da8011a0a312dccea98007eb5af50166e0943b43c5887728aba0d385e7bf623e545784f2c0bb6957c54dd0d2e3de0b9c8a777
7
- data.tar.gz: 37696824d54d5bf8bd2da9c56b816eb2e6c896fbc53e9898641c2931f64e9bb84bcc05b2fc705bb67bd263a3ac044352da87acca7957b4ce8942b597e9711a23
6
+ metadata.gz: 29504e17c71d378485e8610edea95e25e215f5c391478244e609a95a847e3022b508bda95713db97e1f1de22f67c8eed310a562f82cf737e1425803e958341ce
7
+ data.tar.gz: a7ea41b8ddcf21803a1279cd74d53231c9e030165c06b2ff835f31db55b0cf2240ca802626fba50abaec6b0e5c09e1439900de22c9d3b7719f53b6e2fe524da8
data/README.md CHANGED
@@ -35,7 +35,7 @@ This guide aims to help you [set up](#installation-and-setup), [use](#using-ship
35
35
  * [Configuring providers](#configuring-providers)
36
36
  * [Free samples](/examples/shipit.yml)
37
37
 
38
- **IV. INTERGRATING**
38
+ **IV. INTEGRATING**
39
39
 
40
40
  * [Registering webhooks](#integrating-webhooks)
41
41
 
@@ -130,6 +130,8 @@ Also, if your repository is deployed different ways depending on the environment
130
130
 
131
131
  For example for a stack like: `my-org/my-repo/staging`, `shipit.staging.yml` will have priority over `shipit.yml`.
132
132
 
133
+ Lastly, if you override the `app_name` configuration in your Shipit deployment, `yourapp.yml` and `yourapp.staging.yml` will work.
134
+
133
135
  * * *
134
136
 
135
137
  <h3 id="installing-dependencies">Installing dependencies</h3>
@@ -640,7 +642,7 @@ For Kubernetes, you have to provision Shipit environment with the following tool
640
642
  * `kubectl`
641
643
  * `kubernetes-deploy` [gem](https://github.com/Shopify/kubernetes-deploy)
642
644
 
643
- <h2 id="integrating">IV. INTERGRATING</h2>
645
+ <h2 id="integrating">IV. INTEGRATING</h2>
644
646
 
645
647
  <h3 id="integrating-webhooks">Registering webhooks</h3>
646
648
 
data/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Add your own tasks in files placed in lib/tasks ending in .rake,
2
3
  # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
4
 
@@ -8,7 +9,7 @@ rescue LoadError
8
9
  end
9
10
 
10
11
  APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
11
- load 'rails/tasks/engine.rake'
12
+ load('rails/tasks/engine.rake')
12
13
 
13
14
  Bundler::GemHelper.install_tasks
14
15
 
@@ -19,6 +20,7 @@ Rake::TestTask.new(:test) do |t|
19
20
  t.libs << 'test'
20
21
  t.test_files = FileList.new('test/**/*_test.rb').exclude('test/dummy/**/*')
21
22
  t.verbose = false
23
+ t.warning = false
22
24
  end
23
25
 
24
- task default: :test
26
+ task(default: :test)
@@ -93,9 +93,6 @@
93
93
 
94
94
  .commits-path {
95
95
  font-size: 18px;
96
- span {
97
- text-transform: capitalize;
98
- }
99
96
  small {
100
97
  font-size: 18px;
101
98
  color: #8D9EB0;
@@ -1,3 +0,0 @@
1
- .merge-status-container {
2
- max-width: 700px;
3
- }
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module ActiveModelSerializersPatch
3
4
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  module Cacheable
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  module Paginable
4
5
  extend ActiveSupport::Concern
5
6
 
6
- LINK = 'Link'.freeze
7
+ LINK = 'Link'
7
8
 
8
9
  included do
9
10
  class_attribute :max_page_size
@@ -12,7 +13,7 @@ module Shipit
12
13
 
13
14
  self.max_page_size = 100
14
15
  self.default_page_size = 30
15
- self.default_order = {id: :desc}.freeze
16
+ self.default_order = { id: :desc }.freeze
16
17
  end
17
18
 
18
19
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  module Rendering
@@ -5,16 +6,16 @@ module Shipit
5
6
 
6
7
  def render_resources(resources, options = {})
7
8
  options[:json] = resources
8
- render options
9
+ render(options)
9
10
  end
10
11
 
11
12
  def render_resource(resource, options = {})
12
13
  if resource.destroyed?
13
- head :no_content, options.reverse_merge(content_type: 'application/json')
14
+ head(:no_content, options.reverse_merge(content_type: 'application/json'))
14
15
  elsif resource.errors.any?
15
- render options.reverse_merge(status: :unprocessable_entity, json: {errors: resource.errors})
16
+ render(options.reverse_merge(status: :unprocessable_entity, json: { errors: resource.errors }))
16
17
  else
17
- render options.reverse_merge(json: resource)
18
+ render(options.reverse_merge(json: resource))
18
19
  end
19
20
  end
20
21
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Authentication
3
4
  extend ActiveSupport::Concern
@@ -20,10 +21,10 @@ module Shipit
20
21
  unless current_user.authorized?
21
22
  team_handles = Shipit.github_teams.map(&:handle)
22
23
  team_list = team_handles.to_sentence(two_words_connector: ' or ', last_word_connector: ', or ')
23
- render plain: "You must be a member of #{team_list} to access this application.", status: :forbidden
24
+ render(plain: "You must be a member of #{team_list} to access this application.", status: :forbidden)
24
25
  end
25
26
  else
26
- redirect_to Shipit::Engine.routes.url_helpers.github_authentication_path(origin: request.original_url)
27
+ redirect_to(Shipit::Engine.routes.url_helpers.github_authentication_path(origin: request.original_url))
27
28
  end
28
29
  end
29
30
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Pagination
3
4
  extend ActiveSupport::Concern
@@ -9,7 +10,7 @@ module Shipit
9
10
 
10
11
  self.max_page_size = 100
11
12
  self.default_page_size = 30
12
- self.default_order = {id: :desc}.freeze
13
+ self.default_order = { id: :desc }.freeze
13
14
  end
14
15
 
15
16
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  class BaseController < ActionController::Base
@@ -22,11 +23,15 @@ module Shipit
22
23
  before_action :authenticate_api_client
23
24
 
24
25
  def index
25
- render json: {stacks_url: api_stacks_url}
26
+ render(json: { stacks_url: api_stacks_url })
26
27
  end
27
28
 
28
29
  private
29
30
 
31
+ def namespace_for_serializer
32
+ nil
33
+ end
34
+
30
35
  def authenticate_api_client
31
36
  @current_api_client = if Shipit.disable_api_authentication
32
37
  UnlimitedApiClient.new
@@ -38,7 +43,7 @@ module Shipit
38
43
  end
39
44
  return if @current_api_client
40
45
  headers['WWW-Authenticate'] = 'Basic realm="Authentication token"'
41
- render status: :unauthorized, json: {message: 'Bad credentials'}
46
+ render(status: :unauthorized, json: { message: 'Bad credentials' })
42
47
  end
43
48
 
44
49
  attr_reader :current_api_client
@@ -65,19 +70,19 @@ module Shipit
65
70
  end
66
71
 
67
72
  def insufficient_permission(error)
68
- render status: :forbidden, json: {message: error.message}
73
+ render(status: :forbidden, json: { message: error.message })
69
74
  end
70
75
 
71
76
  def validation_error(error)
72
- render status: :unprocessable_entity, json: {message: error.message}
77
+ render(status: :unprocessable_entity, json: { message: error.message })
73
78
  end
74
79
 
75
80
  def not_found(_error)
76
- render status: :not_found, json: {status: '404', error: 'Not Found'}
81
+ render(status: :not_found, json: { status: '404', error: 'Not Found' })
77
82
  end
78
83
 
79
84
  def conflict(_error)
80
- render status: :conflict, json: {status: '409', error: 'Conflict'}
85
+ render(status: :conflict, json: { status: '409', error: 'Conflict' })
81
86
  end
82
87
  end
83
88
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  class CCMenuController < BaseController
@@ -19,7 +20,7 @@ module Shipit
19
20
 
20
21
  def show
21
22
  latest_deploy = stack.deploys_and_rollbacks.last || NoDeploy.new
22
- render 'shipit/ccmenu/project.xml.builder', formats: [:xml], locals: {stack: stack, deploy: latest_deploy}
23
+ render('shipit/ccmenu/project.xml.builder', formats: [:xml], locals: { stack: stack, deploy: latest_deploy })
23
24
  end
24
25
 
25
26
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  class CommitsController < BaseController
@@ -9,7 +10,7 @@ module Shipit
9
10
  commits = commits.newer_than(stack.last_deployed_commit)
10
11
  end
11
12
 
12
- render_resources commits
13
+ render_resources(commits)
13
14
  end
14
15
  end
15
16
  end
@@ -1,14 +1,15 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  class DeploysController < BaseController
4
5
  require_permission :deploy, :stack
5
6
 
6
7
  def index
7
- render_resources stack.deploys_and_rollbacks
8
+ render_resources(stack.deploys_and_rollbacks)
8
9
  end
9
10
 
10
11
  params do
11
- requires :sha, String, length: {in: 6..40}
12
+ requires :sha, String, length: { in: 6..40 }
12
13
  accepts :force, Boolean, default: false
13
14
  accepts :env, Hash, default: {}
14
15
  end
@@ -16,7 +17,7 @@ module Shipit
16
17
  commit = stack.commits.by_sha(params.sha) || param_error!(:sha, 'Unknown revision')
17
18
  param_error!(:force, "Can't deploy a locked stack") if !params.force && stack.locked?
18
19
  deploy = stack.trigger_deploy(commit, current_user, env: params.env, force: params.force)
19
- render_resource deploy, status: :accepted
20
+ render_resource(deploy, status: :accepted)
20
21
  end
21
22
  end
22
23
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  class HooksController < BaseController
@@ -5,11 +6,11 @@ module Shipit
5
6
  require_permission :write, :hook, only: %i(create update destroy)
6
7
 
7
8
  def index
8
- render_resources hooks
9
+ render_resources(hooks)
9
10
  end
10
11
 
11
12
  def show
12
- render json: hook
13
+ render(json: hook)
13
14
  end
14
15
 
15
16
  params do
@@ -18,7 +19,7 @@ module Shipit
18
19
  accepts :content_type, String
19
20
  end
20
21
  def create
21
- render_resource hooks.create(params)
22
+ render_resource(hooks.create(params))
22
23
  end
23
24
 
24
25
  params do
@@ -28,11 +29,11 @@ module Shipit
28
29
  end
29
30
  def update
30
31
  hook.update(params)
31
- render_resource hook
32
+ render_resource(hook)
32
33
  end
33
34
 
34
35
  def destroy
35
- render_resource hook.destroy
36
+ render_resource(hook.destroy)
36
37
  end
37
38
 
38
39
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  class LocksController < BaseController
@@ -8,10 +9,10 @@ module Shipit
8
9
  end
9
10
  def create
10
11
  if stack.locked?
11
- render json: {message: 'Already locked'}, status: :conflict
12
+ render(json: { message: 'Already locked' }, status: :conflict)
12
13
  else
13
14
  stack.lock(params.reason, current_user)
14
- render_resource stack
15
+ render_resource(stack)
15
16
  end
16
17
  end
17
18
 
@@ -20,12 +21,12 @@ module Shipit
20
21
  end
21
22
  def update
22
23
  stack.lock(params.reason, current_user)
23
- render_resource stack
24
+ render_resource(stack)
24
25
  end
25
26
 
26
27
  def destroy
27
28
  stack.unlock
28
- render_resource stack
29
+ render_resource(stack)
29
30
  end
30
31
  end
31
32
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  class OutputsController < BaseController
4
5
  require_permission :read, :stack
5
6
 
6
7
  def show
7
- render plain: task.chunk_output
8
+ render(plain: task.chunk_output)
8
9
  end
9
10
 
10
11
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  class PullRequestsController < BaseController
@@ -5,21 +6,21 @@ module Shipit
5
6
  require_permission :deploy, :stack, only: %i(update destroy)
6
7
 
7
8
  def index
8
- render_resources stack.pull_requests.includes(:head).order(id: :desc)
9
+ render_resources(stack.pull_requests.includes(:head).order(id: :desc))
9
10
  end
10
11
 
11
12
  def show
12
- render_resource stack.pull_requests.find_by!(number: params[:id])
13
+ render_resource(stack.pull_requests.find_by!(number: params[:id]))
13
14
  end
14
15
 
15
16
  def update
16
17
  pull_request = PullRequest.request_merge!(stack, params[:id], current_user)
17
18
  if pull_request.waiting?
18
- head :accepted
19
+ head(:accepted)
19
20
  elsif pull_request.merged?
20
- render status: :method_not_allowed, json: {
21
+ render(status: :method_not_allowed, json: {
21
22
  message: "This pull request was already merged.",
22
- }
23
+ })
23
24
  else
24
25
  raise "Pull Request is neither waiting nor merged, this should be impossible"
25
26
  end
@@ -29,7 +30,7 @@ module Shipit
29
30
  if pull_request = stack.pull_requests.where(number: params[:id]).first
30
31
  pull_request.cancel! if pull_request.waiting?
31
32
  end
32
- head :no_content
33
+ head(:no_content)
33
34
  end
34
35
  end
35
36
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  class ReleaseStatusesController < BaseController
@@ -5,7 +6,7 @@ module Shipit
5
6
 
6
7
  params do
7
8
  requires :status, String
8
- validates :status, inclusion: {in: %w(success failure)}
9
+ validates :status, inclusion: { in: %w(success failure) }
9
10
  end
10
11
  def create
11
12
  deploy = stack.deploys_and_rollbacks.find(params[:deploy_id])
@@ -15,7 +16,7 @@ module Shipit
15
16
  when 'failure'
16
17
  deploy.report_faulty!(user: current_user)
17
18
  end
18
- render_resource deploy, status: :created
19
+ render_resource(deploy, status: :created)
19
20
  end
20
21
  end
21
22
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+ module Shipit
3
+ module Api
4
+ class RollbacksController < BaseController
5
+ require_permission :deploy, :stack
6
+
7
+ params do
8
+ requires :sha, String, length: { in: 6..40 }
9
+ accepts :force, Boolean, default: false
10
+ accepts :env, Hash, default: {}
11
+ end
12
+ def create
13
+ commit = stack.commits.by_sha(params.sha) || param_error!(:sha, 'Unknown revision')
14
+ param_error!(:force, "Can't rollback a locked stack") if !params.force && stack.locked?
15
+ deploy = stack.deploys.find_by(until_commit: commit) || param_error!(:sha, 'Cant find associated deploy')
16
+ deploy_env = stack.filter_deploy_envs(params.env)
17
+
18
+ response = nil
19
+ if !params.force && stack.active_task?
20
+ param_error!(:force, "Can't rollback, deploy in progress")
21
+ elsif stack.active_task?
22
+ active_task = stack.active_task
23
+ active_task.abort!(aborted_by: current_user, rollback_once_aborted_to: deploy)
24
+ response = active_task
25
+ else
26
+ response = deploy.trigger_rollback(current_user, env: deploy_env, force: params.force)
27
+ end
28
+
29
+ render_resource(response, status: :accepted)
30
+ end
31
+ end
32
+ end
33
+ end