shipit-engine 0.28.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 (314) 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/stylesheets/_pages/_stacks.scss +76 -3
  6. data/app/assets/stylesheets/_structure/_main.scss +2 -1
  7. data/app/assets/stylesheets/merge_status.scss +0 -3
  8. data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +13 -0
  9. data/app/controllers/concerns/shipit/api/cacheable.rb +1 -0
  10. data/app/controllers/concerns/shipit/api/paginable.rb +3 -2
  11. data/app/controllers/concerns/shipit/api/rendering.rb +5 -4
  12. data/app/controllers/concerns/shipit/authentication.rb +3 -2
  13. data/app/controllers/concerns/shipit/pagination.rb +2 -1
  14. data/app/controllers/shipit/api/base_controller.rb +11 -6
  15. data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
  16. data/app/controllers/shipit/api/commits_controller.rb +2 -1
  17. data/app/controllers/shipit/api/deploys_controller.rb +4 -3
  18. data/app/controllers/shipit/api/hooks_controller.rb +6 -5
  19. data/app/controllers/shipit/api/locks_controller.rb +5 -4
  20. data/app/controllers/shipit/api/outputs_controller.rb +2 -1
  21. data/app/controllers/shipit/api/pull_requests_controller.rb +7 -6
  22. data/app/controllers/shipit/api/release_statuses_controller.rb +3 -2
  23. data/app/controllers/shipit/api/rollbacks_controller.rb +33 -0
  24. data/app/controllers/shipit/api/stacks_controller.rb +37 -5
  25. data/app/controllers/shipit/api/tasks_controller.rb +6 -5
  26. data/app/controllers/shipit/api_clients_controller.rb +50 -0
  27. data/app/controllers/shipit/ccmenu_url_controller.rb +4 -3
  28. data/app/controllers/shipit/commit_checks_controller.rb +2 -1
  29. data/app/controllers/shipit/commits_controller.rb +2 -1
  30. data/app/controllers/shipit/deploys_controller.rb +3 -2
  31. data/app/controllers/shipit/github_authentication_controller.rb +4 -3
  32. data/app/controllers/shipit/merge_status_controller.rb +19 -14
  33. data/app/controllers/shipit/pull_requests_controller.rb +3 -2
  34. data/app/controllers/shipit/release_statuses_controller.rb +3 -2
  35. data/app/controllers/shipit/rollbacks_controller.rb +3 -2
  36. data/app/controllers/shipit/shipit_controller.rb +2 -1
  37. data/app/controllers/shipit/stacks_controller.rb +78 -14
  38. data/app/controllers/shipit/status_controller.rb +2 -1
  39. data/app/controllers/shipit/tasks_controller.rb +6 -5
  40. data/app/controllers/shipit/webhooks_controller.rb +5 -132
  41. data/app/helpers/shipit/chunks_helper.rb +1 -0
  42. data/app/helpers/shipit/deploys_helper.rb +4 -3
  43. data/app/helpers/shipit/github_url_helper.rb +1 -0
  44. data/app/helpers/shipit/merge_status_helper.rb +1 -0
  45. data/app/helpers/shipit/shipit_helper.rb +1 -0
  46. data/app/helpers/shipit/stacks_helper.rb +5 -0
  47. data/app/helpers/shipit/tasks_helper.rb +1 -0
  48. data/app/jobs/shipit/background_job.rb +4 -0
  49. data/app/jobs/shipit/background_job/unique.rb +4 -1
  50. data/app/jobs/shipit/cache_deploy_spec_job.rb +1 -0
  51. data/app/jobs/shipit/chunk_rollup_job.rb +4 -0
  52. data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
  53. data/app/jobs/shipit/continuous_delivery_job.rb +3 -1
  54. data/app/jobs/shipit/create_on_github_job.rb +6 -1
  55. data/app/jobs/shipit/create_release_statuses_job.rb +1 -0
  56. data/app/jobs/shipit/deferred_touch_job.rb +4 -0
  57. data/app/jobs/shipit/deliver_hook_job.rb +1 -0
  58. data/app/jobs/shipit/destroy_job.rb +1 -0
  59. data/app/jobs/shipit/destroy_stack_job.rb +3 -2
  60. data/app/jobs/shipit/emit_event_job.rb +2 -1
  61. data/app/jobs/shipit/fetch_commit_stats_job.rb +1 -0
  62. data/app/jobs/shipit/fetch_deployed_revision_job.rb +2 -1
  63. data/app/jobs/shipit/github_sync_job.rb +3 -2
  64. data/app/jobs/shipit/{mark_deploy_healty_job.rb → mark_deploy_healthy_job.rb} +1 -0
  65. data/app/jobs/shipit/merge_pull_requests_job.rb +1 -0
  66. data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
  67. data/app/jobs/shipit/perform_task_job.rb +14 -5
  68. data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
  69. data/app/jobs/shipit/reap_dead_tasks_job.rb +21 -0
  70. data/app/jobs/shipit/refresh_check_runs_job.rb +1 -0
  71. data/app/jobs/shipit/refresh_github_user_job.rb +1 -0
  72. data/app/jobs/shipit/refresh_pull_request_job.rb +1 -0
  73. data/app/jobs/shipit/refresh_statuses_job.rb +1 -0
  74. data/app/jobs/shipit/setup_github_hook_job.rb +1 -0
  75. data/app/jobs/shipit/update_estimated_deploy_duration_job.rb +1 -0
  76. data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +6 -3
  77. data/app/models/concerns/shipit/deferred_touch.rb +4 -3
  78. data/app/models/shipit/anonymous_user.rb +5 -0
  79. data/app/models/shipit/api_client.rb +3 -2
  80. data/app/models/shipit/application_record.rb +2 -1
  81. data/app/models/shipit/check_run.rb +4 -3
  82. data/app/models/shipit/command_line_user.rb +1 -0
  83. data/app/models/shipit/commit.rb +31 -12
  84. data/app/models/shipit/commit_checks.rb +1 -0
  85. data/app/models/shipit/commit_deployment.rb +17 -12
  86. data/app/models/shipit/commit_deployment_status.rb +8 -3
  87. data/app/models/shipit/commit_message.rb +1 -0
  88. data/app/models/shipit/delivery.rb +4 -3
  89. data/app/models/shipit/deploy.rb +40 -10
  90. data/app/models/shipit/deploy_spec.rb +22 -3
  91. data/app/models/shipit/deploy_spec/bundler_discovery.rb +2 -1
  92. data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
  93. data/app/models/shipit/deploy_spec/file_system.rb +10 -3
  94. data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -0
  95. data/app/models/shipit/deploy_spec/lerna_discovery.rb +1 -0
  96. data/app/models/shipit/deploy_spec/npm_discovery.rb +5 -4
  97. data/app/models/shipit/deploy_spec/pypi_discovery.rb +1 -0
  98. data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
  99. data/app/models/shipit/deploy_stats.rb +58 -0
  100. data/app/models/shipit/duration.rb +3 -2
  101. data/app/models/shipit/ephemeral_commit_checks.rb +1 -0
  102. data/app/models/shipit/github_hook.rb +2 -1
  103. data/app/models/shipit/github_status.rb +3 -2
  104. data/app/models/shipit/hook.rb +6 -5
  105. data/app/models/shipit/membership.rb +3 -2
  106. data/app/models/shipit/output_chunk.rb +7 -2
  107. data/app/models/shipit/pull_request.rb +13 -7
  108. data/app/models/shipit/record.rb +18 -0
  109. data/app/models/shipit/release_status.rb +3 -2
  110. data/app/models/shipit/repository.rb +43 -0
  111. data/app/models/shipit/rollback.rb +1 -0
  112. data/app/models/shipit/stack.rb +109 -50
  113. data/app/models/shipit/status.rb +3 -2
  114. data/app/models/shipit/status/common.rb +7 -6
  115. data/app/models/shipit/status/group.rb +1 -0
  116. data/app/models/shipit/status/missing.rb +2 -1
  117. data/app/models/shipit/status/unknown.rb +2 -1
  118. data/app/models/shipit/task.rb +64 -9
  119. data/app/models/shipit/task_definition.rb +1 -0
  120. data/app/models/shipit/team.rb +2 -1
  121. data/app/models/shipit/undeployed_commit.rb +1 -0
  122. data/app/models/shipit/unlimited_api_client.rb +1 -0
  123. data/app/models/shipit/user.rb +29 -5
  124. data/app/models/shipit/variable_definition.rb +1 -0
  125. data/app/models/shipit/webhooks.rb +33 -0
  126. data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +20 -0
  127. data/app/models/shipit/webhooks/handlers/handler.rb +41 -0
  128. data/app/models/shipit/webhooks/handlers/membership_handler.rb +46 -0
  129. data/app/models/shipit/webhooks/handlers/push_handler.rb +21 -0
  130. data/app/models/shipit/webhooks/handlers/status_handler.rb +27 -0
  131. data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
  132. data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
  133. data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
  134. data/app/serializers/shipit/commit_serializer.rb +1 -0
  135. data/app/serializers/shipit/deploy_serializer.rb +2 -1
  136. data/app/serializers/shipit/hook_serializer.rb +1 -0
  137. data/app/serializers/shipit/pull_request_serializer.rb +1 -0
  138. data/app/serializers/shipit/rollback_serializer.rb +1 -0
  139. data/app/serializers/shipit/short_commit_serializer.rb +1 -0
  140. data/app/serializers/shipit/stack_serializer.rb +7 -1
  141. data/app/serializers/shipit/tail_task_serializer.rb +1 -0
  142. data/app/serializers/shipit/task_serializer.rb +2 -17
  143. data/app/serializers/shipit/user_serializer.rb +6 -1
  144. data/app/validators/ascii_only_validator.rb +4 -3
  145. data/app/validators/subset_validator.rb +1 -0
  146. data/app/views/layouts/_head.html.erb +0 -0
  147. data/app/views/layouts/shipit.html.erb +6 -4
  148. data/app/views/shipit/_variables.html.erb +1 -1
  149. data/app/views/shipit/api_clients/index.html.erb +36 -0
  150. data/app/views/shipit/api_clients/new.html.erb +33 -0
  151. data/app/views/shipit/api_clients/show.html.erb +35 -0
  152. data/app/views/shipit/ccmenu/project.xml.builder +2 -1
  153. data/app/views/shipit/deploys/new.html.erb +17 -12
  154. data/app/views/shipit/deploys/show.html.erb +2 -2
  155. data/app/views/shipit/merge_status/logged_out.erb +1 -1
  156. data/app/views/shipit/stacks/_header.html.erb +27 -12
  157. data/app/views/shipit/stacks/_links.html.erb +1 -0
  158. data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
  159. data/app/views/shipit/stacks/index.html.erb +7 -2
  160. data/app/views/shipit/stacks/settings.html.erb +19 -0
  161. data/app/views/shipit/stacks/statistics.html.erb +82 -0
  162. data/app/views/shipit/tasks/show.html.erb +1 -1
  163. data/config/initializers/inflections.rb +2 -1
  164. data/config/locales/en.yml +18 -5
  165. data/config/routes.rb +14 -2
  166. data/db/migrate/20191209231045_create_shipit_repositories.rb +12 -0
  167. data/db/migrate/20191209231307_add_repository_reference_to_stacks.rb +15 -0
  168. data/db/migrate/20191216162728_backfill_repository_data.rb +22 -0
  169. data/db/migrate/20191216163010_remove_repository_information_from_stacks.rb +20 -0
  170. data/db/migrate/20191219205202_add_archived_since_to_stacks.rb +6 -0
  171. data/db/migrate/20200102175621_optional_task_commits.rb +6 -0
  172. data/db/migrate/20200109132519_add_sha_to_commit_deployments.rb +5 -0
  173. data/db/migrate/20200226211925_add_index_to_tasks_status.rb +5 -0
  174. data/db/migrate/20200427135152_add_pull_request_head_sha_to_commit.rb +5 -0
  175. data/db/migrate/20200615181558_add_rollback_once_aborted_to.rb +5 -0
  176. data/lib/shipit.rb +18 -20
  177. data/lib/shipit/cast_value.rb +1 -0
  178. data/lib/shipit/command.rb +14 -18
  179. data/lib/shipit/commands.rb +5 -4
  180. data/lib/shipit/csv_serializer.rb +1 -0
  181. data/lib/shipit/deploy_commands.rb +1 -0
  182. data/lib/shipit/engine.rb +11 -2
  183. data/lib/shipit/environment_variables.rb +11 -1
  184. data/lib/shipit/first_parent_commits_iterator.rb +1 -0
  185. data/lib/shipit/flock.rb +1 -0
  186. data/lib/shipit/github_app.rb +60 -6
  187. data/lib/shipit/github_http_cache_middleware.rb +57 -0
  188. data/lib/shipit/null_serializer.rb +1 -0
  189. data/lib/shipit/octokit_check_runs.rb +3 -2
  190. data/lib/shipit/octokit_iterator.rb +3 -2
  191. data/lib/shipit/paginator.rb +3 -2
  192. data/lib/shipit/rollback_commands.rb +1 -0
  193. data/lib/shipit/same_site_cookie_middleware.rb +29 -0
  194. data/lib/shipit/simple_message_verifier.rb +1 -0
  195. data/lib/shipit/stack_commands.rb +6 -3
  196. data/lib/shipit/stat.rb +1 -0
  197. data/lib/shipit/task_commands.rb +22 -14
  198. data/lib/shipit/version.rb +2 -1
  199. data/lib/snippets/release-gem +5 -1
  200. data/lib/tasks/cron.rake +2 -0
  201. data/lib/tasks/dev.rake +3 -2
  202. data/lib/tasks/shipit.rake +16 -17
  203. data/lib/tasks/teams.rake +1 -0
  204. data/test/controllers/api/base_controller_test.rb +3 -2
  205. data/test/controllers/api/ccmenu_controller_test.rb +9 -8
  206. data/test/controllers/api/commits_controller_test.rb +3 -2
  207. data/test/controllers/api/deploys_controller_test.rb +15 -14
  208. data/test/controllers/api/hooks_controller_test.rb +8 -7
  209. data/test/controllers/api/locks_controller_test.rb +7 -6
  210. data/test/controllers/api/outputs_controller_test.rb +3 -2
  211. data/test/controllers/api/pull_requests_controller_test.rb +8 -7
  212. data/test/controllers/api/release_statuses_controller_test.rb +2 -1
  213. data/test/controllers/api/rollback_controller_test.rb +113 -0
  214. data/test/controllers/api/stacks_controller_test.rb +44 -15
  215. data/test/controllers/api/tasks_controller_test.rb +13 -12
  216. data/test/controllers/api_clients_controller_test.rb +104 -0
  217. data/test/controllers/ccmenu_controller_test.rb +4 -3
  218. data/test/controllers/commit_checks_controller_test.rb +4 -3
  219. data/test/controllers/commits_controller_test.rb +3 -2
  220. data/test/controllers/deploys_controller_test.rb +33 -22
  221. data/test/controllers/github_authentication_controller_test.rb +1 -0
  222. data/test/controllers/merge_status_controller_test.rb +27 -9
  223. data/test/controllers/pull_requests_controller_test.rb +4 -3
  224. data/test/controllers/release_statuses_controller_test.rb +3 -2
  225. data/test/controllers/rollbacks_controller_test.rb +9 -8
  226. data/test/controllers/stacks_controller_test.rb +64 -15
  227. data/test/controllers/status_controller_test.rb +1 -0
  228. data/test/controllers/tasks_controller_test.rb +20 -19
  229. data/test/controllers/webhooks_controller_test.rb +36 -9
  230. data/test/dummy/config/application.rb +1 -1
  231. data/test/dummy/config/environments/development.rb +24 -4
  232. data/test/dummy/config/environments/test.rb +2 -0
  233. data/test/dummy/db/schema.rb +25 -11
  234. data/test/dummy/db/seeds.rb +34 -17
  235. data/test/fixtures/shipit/commit_deployment_statuses.yml +4 -4
  236. data/test/fixtures/shipit/commit_deployments.yml +8 -8
  237. data/test/fixtures/shipit/commits.yml +38 -0
  238. data/test/fixtures/shipit/repositories.yml +27 -0
  239. data/test/fixtures/shipit/stacks.yml +190 -30
  240. data/test/fixtures/shipit/tasks.yml +66 -3
  241. data/test/fixtures/timeout +2 -1
  242. data/test/helpers/api_helper.rb +1 -0
  243. data/test/helpers/fixture_aliases_helper.rb +1 -0
  244. data/test/helpers/hooks_helper.rb +2 -1
  245. data/test/helpers/json_helper.rb +15 -11
  246. data/test/helpers/links_helper.rb +4 -3
  247. data/test/helpers/payloads_helper.rb +1 -0
  248. data/test/helpers/queries_helper.rb +3 -2
  249. data/test/jobs/cache_deploy_spec_job_test.rb +2 -1
  250. data/test/jobs/chunk_rollup_job_test.rb +1 -0
  251. data/test/jobs/deliver_hook_job_test.rb +2 -1
  252. data/test/jobs/destroy_stack_job_test.rb +10 -0
  253. data/test/jobs/emit_event_job_test.rb +2 -1
  254. data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
  255. data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
  256. data/test/jobs/github_sync_job_test.rb +1 -0
  257. data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
  258. data/test/jobs/merge_pull_requests_job_test.rb +5 -4
  259. data/test/jobs/perform_task_job_test.rb +4 -3
  260. data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
  261. data/test/jobs/reap_dead_tasks_job_test.rb +68 -0
  262. data/test/jobs/refresh_github_user_job_test.rb +1 -0
  263. data/test/jobs/refresh_status_job_test.rb +1 -0
  264. data/test/jobs/unique_job_test.rb +1 -0
  265. data/test/jobs/update_github_last_deployed_ref_job_test.rb +13 -11
  266. data/test/middleware/same_site_cookie_middleware_test.rb +52 -0
  267. data/test/models/api_client_test.rb +1 -0
  268. data/test/models/commit_checks_test.rb +1 -0
  269. data/test/models/commit_deployment_status_test.rb +34 -4
  270. data/test/models/commit_deployment_test.rb +9 -11
  271. data/test/models/commits_test.rb +99 -7
  272. data/test/models/delivery_test.rb +3 -2
  273. data/test/models/deploy_spec_test.rb +47 -42
  274. data/test/models/deploy_stats_test.rb +113 -0
  275. data/test/models/deploys_test.rb +60 -13
  276. data/test/models/duration_test.rb +1 -0
  277. data/test/models/github_hook_test.rb +1 -0
  278. data/test/models/hook_test.rb +20 -16
  279. data/test/models/membership_test.rb +1 -0
  280. data/test/models/output_chunk_test.rb +1 -0
  281. data/test/models/pull_request_test.rb +18 -11
  282. data/test/models/release_statuses_test.rb +1 -0
  283. data/test/models/rollbacks_test.rb +1 -0
  284. data/test/models/shipit/check_run_test.rb +1 -0
  285. data/test/models/shipit/repository_test.rb +77 -0
  286. data/test/models/shipit/wehbooks/handlers_test.rb +27 -0
  287. data/test/models/stacks_test.rb +110 -56
  288. data/test/models/status/group_test.rb +1 -0
  289. data/test/models/status/missing_test.rb +1 -0
  290. data/test/models/status_test.rb +1 -0
  291. data/test/models/task_definitions_test.rb +9 -8
  292. data/test/models/tasks_test.rb +18 -1
  293. data/test/models/team_test.rb +4 -2
  294. data/test/models/undeployed_commits_test.rb +14 -0
  295. data/test/models/users_test.rb +109 -1
  296. data/test/test_command_integration.rb +3 -2
  297. data/test/test_helper.rb +38 -34
  298. data/test/unit/anonymous_user_serializer_test.rb +14 -0
  299. data/test/unit/command_test.rb +12 -7
  300. data/test/unit/commands_test.rb +1 -0
  301. data/test/unit/commit_serializer_test.rb +16 -0
  302. data/test/unit/csv_serializer_test.rb +3 -2
  303. data/test/unit/deploy_commands_test.rb +14 -4
  304. data/test/unit/deploy_serializer_test.rb +17 -0
  305. data/test/unit/environment_variables_test.rb +5 -4
  306. data/test/unit/github_app_test.rb +165 -0
  307. data/test/unit/github_url_helper_test.rb +1 -0
  308. data/test/unit/rollback_commands_test.rb +2 -1
  309. data/test/unit/shipit_helper_test.rb +17 -0
  310. data/test/unit/shipit_test.rb +1 -0
  311. data/test/unit/user_serializer_test.rb +14 -0
  312. data/test/unit/variable_definition_test.rb +1 -0
  313. metadata +215 -157
  314. data/lib/shipit/strip_cache_control.rb +0 -40
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bdb3736fb9999c0409f7b81081a52467f33a39ee419f2a40e14e6aca73866263
4
- data.tar.gz: f58bfcbbc8084bb18cf2234ed0a75658a5c6bc9e2b593bc8a2b90e5f89d030b5
3
+ metadata.gz: 98113cef0ad013fa29cb11fea22f09547c191310a601eb788a53fdc5fb3c7e40
4
+ data.tar.gz: 39c68de0e6356e1daab40942a817af86258ea8219726c1e4276a42bba5d79315
5
5
  SHA512:
6
- metadata.gz: 19ffafe44e93c6f02f277c5208160a605286557f5080cf3569355fcfa85b2a8583eace47a89c1ac223490ad157de451f0837343d5b818e891c9794b27ca20554
7
- data.tar.gz: 57be6895de1d5757a48b603cfb4796316f477b791feef7cfc876dc57b5226d869e65b2332e920e695e3edbba3bd99b39dc75e0e3ceeab2b6aee851eaeea15c2e
6
+ metadata.gz: 29504e17c71d378485e8610edea95e25e215f5c391478244e609a95a847e3022b508bda95713db97e1f1de22f67c8eed310a562f82cf737e1425803e958341ce
7
+ data.tar.gz: a7ea41b8ddcf21803a1279cd74d53231c9e030165c06b2ff835f31db55b0cf2240ca802626fba50abaec6b0e5c09e1439900de22c9d3b7719f53b6e2fe524da8
data/README.md CHANGED
@@ -35,7 +35,11 @@ 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. CONTRIBUTING**
38
+ **IV. INTEGRATING**
39
+
40
+ * [Registering webhooks](#integrating-webhooks)
41
+
42
+ **V. CONTRIBUTING**
39
43
 
40
44
  * [Instructions](#contributing-instructions)
41
45
  * [Local development](#contributing-local-dev)
@@ -126,6 +130,8 @@ Also, if your repository is deployed different ways depending on the environment
126
130
 
127
131
  For example for a stack like: `my-org/my-repo/staging`, `shipit.staging.yml` will have priority over `shipit.yml`.
128
132
 
133
+ Lastly, if you override the `app_name` configuration in your Shipit deployment, `yourapp.yml` and `yourapp.staging.yml` will work.
134
+
129
135
  * * *
130
136
 
131
137
  <h3 id="installing-dependencies">Installing dependencies</h3>
@@ -607,6 +613,8 @@ Your deploy scripts have access to the following environment variables:
607
613
  * `SHIPIT`: Set to `1` to allow your script to know it's executed by Shipit
608
614
  * `SHIPIT_LINK`: URL to the task output, useful to broadcast it in an IRC channel
609
615
  * `SHIPIT_USER`: Full name of the user that triggered the deploy/task
616
+ * `GITHUB_REPO_NAME`: Name of the GitHub repository being used for the current deploy/task.
617
+ * `GITHUB_REPO_OWNER`: The GitHub username of the repository owner for the current deploy/task.
610
618
  * `EMAIL`: Email of the user that triggered the deploy/task (if available)
611
619
  * `ENVIRONMENT`: The stack environment (e.g `production` / `staging`)
612
620
  * `BRANCH`: The stack branch (e.g `master`)
@@ -634,7 +642,36 @@ For Kubernetes, you have to provision Shipit environment with the following tool
634
642
  * `kubectl`
635
643
  * `kubernetes-deploy` [gem](https://github.com/Shopify/kubernetes-deploy)
636
644
 
637
- <h2 id="contributing">IV. CONTRIBUTING</h2>
645
+ <h2 id="integrating">IV. INTEGRATING</h2>
646
+
647
+ <h3 id="integrating-webhooks">Registering webhooks</h3>
648
+
649
+ Shipit handles several webhook types by default, listed in `Shipit::Wehbooks::DEFAULT_HANDLERS`, in order to implement default behaviours. Extra handler blocks can be registered via `Shipit::Webhooks.register_handler`. Valid handlers need only implement the `call` method - meaning any object which implements `call` - blocks, procs, or lambdas are valid. The webhooks controller will pass a `params` argument to the handler. Some examples:
650
+
651
+
652
+ <h4>Registering a Plain old Ruby Object as a handler</h4>
653
+
654
+ ```ruby
655
+ class PullRequestHandler
656
+ def call(params)
657
+ # do something with pull request webhook events
658
+ end
659
+ end
660
+
661
+ Shipit::Webhooks.register_handler('pull_request', PullRequestHandler)
662
+ ```
663
+
664
+ <h4>Registering a Block as a handler</h4>
665
+
666
+ ```ruby
667
+ Shipit::Webhooks.register_handler('pull_request') do |params|
668
+ # do something with pull request webhook events
669
+ end
670
+ ```
671
+
672
+ Multiple handler blocks can be registered. If any raise errors, execution will be halted and the request will be reported failed to github.
673
+
674
+ <h2 id="contributing">V. CONTRIBUTING</h2>
638
675
 
639
676
  <h3 id="contributing-instructions">Instructions</h3>
640
677
 
@@ -657,3 +694,5 @@ Run `./bin/bootstrap` in order to bootstrap the dummy application. The bootstrap
657
694
  Run `./test/dummy/bin/rails server` to run the rails dummy application.
658
695
 
659
696
  Set the environment variable `SHIPIT_DISABLE_AUTH=1` in order to disable authentication.
697
+
698
+ If you need to test caching behaviour in the dummy application, use `bin/rails dev:cache`.
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)
@@ -0,0 +1 @@
1
+ <svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="archive" class="svg-inline--fa fa-archive fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z"></path></svg>
@@ -49,6 +49,15 @@
49
49
  padding-left: 30px;
50
50
  margin-left: -30px;
51
51
  }
52
+ .archived {
53
+ // From FontAwesome, license @ https://fontawesome.com/license/free
54
+ background-image: asset-data-url('archive-solid.svg');
55
+ background-repeat: no-repeat;
56
+ background-size: 22px 22px;
57
+ background-position: 0px center;
58
+ padding-left: 30px;
59
+ margin-left: -30px;
60
+ }
52
61
  }
53
62
 
54
63
  .stack-lst:empty:before {
@@ -84,9 +93,6 @@
84
93
 
85
94
  .commits-path {
86
95
  font-size: 18px;
87
- span {
88
- text-transform: capitalize;
89
- }
90
96
  small {
91
97
  font-size: 18px;
92
98
  color: #8D9EB0;
@@ -161,3 +167,70 @@
161
167
  .pagination {
162
168
  text-align: center;
163
169
  }
170
+
171
+ .box {
172
+ border-radius: 5px;
173
+ width: 32%;
174
+ float: left;
175
+ padding: 5px;
176
+ }
177
+
178
+ .box__header {
179
+ padding: 15px 25px;
180
+ position: relative;
181
+ }
182
+
183
+ .box__header-title {
184
+ color: #333;
185
+ font-size: 18px;
186
+ }
187
+
188
+ .box__body {
189
+ padding: 0 25px;
190
+ }
191
+
192
+ .row {
193
+ @include clearfix;
194
+ }
195
+
196
+ /* STATS */
197
+
198
+ .stats {
199
+ color: #333;
200
+ position: relative;
201
+ padding-bottom: 25px;
202
+ }
203
+
204
+ .stats__amount {
205
+ font-size: 54px;
206
+ line-height: 1.2;
207
+ }
208
+
209
+ .stats__caption {
210
+ font-size: 18px;
211
+
212
+ }
213
+
214
+ .stats__change {
215
+ position: absolute;
216
+ top: 10px;
217
+ right: 0;
218
+ text-align: right;
219
+ color: #B1B7C8;
220
+ }
221
+
222
+ .stats__value {
223
+ font-size: 18px;
224
+ }
225
+
226
+ .stats__period {
227
+ font-size: 14px;
228
+ }
229
+
230
+ .stats__value--positive {
231
+ color: #AEDC6F;
232
+ }
233
+
234
+ .stats__value--negative {
235
+ color: #FB5055;
236
+ }
@@ -142,8 +142,9 @@ pre {
142
142
  .less-important {
143
143
  color: $grey;
144
144
  margin-bottom: 0em;
145
- margin-top: 1em;
145
+ margin-top: 5em;
146
146
  p {
147
+ margin-top: 1.5rem;
147
148
  margin-bottom: 0.5em;
148
149
  }
149
150
  }
@@ -1,3 +0,0 @@
1
- .merge-status-container {
2
- max-width: 700px;
3
- }
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ module Shipit
3
+ module ActiveModelSerializersPatch
4
+ private
5
+
6
+ def namespace_for_serializer
7
+ # TODO: This is a monkey patch for active_model_serializers 0.9.7.
8
+ # It's really outdated and newer versions aren't really a suitable replacement.
9
+ # We should look into simply getting rid of it.
10
+ @namespace_for_serializer ||= self.class.module_parent unless self.class.module_parent == Object
11
+ end
12
+ end
13
+ end
@@ -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