shipit-engine 0.38.0 → 0.40.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 (323) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +48 -4
  3. data/Rakefile +2 -1
  4. data/app/assets/javascripts/shipit/continuous_delivery_schedule.js.coffee +15 -0
  5. data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +1 -0
  6. data/app/controllers/concerns/shipit/api/cacheable.rb +1 -0
  7. data/app/controllers/concerns/shipit/api/paginable.rb +3 -2
  8. data/app/controllers/concerns/shipit/api/rendering.rb +1 -0
  9. data/app/controllers/concerns/shipit/authentication.rb +1 -0
  10. data/app/controllers/concerns/shipit/pagination.rb +3 -2
  11. data/app/controllers/shipit/api/base_controller.rb +12 -10
  12. data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
  13. data/app/controllers/shipit/api/commits_controller.rb +2 -3
  14. data/app/controllers/shipit/api/deploys_controller.rb +6 -1
  15. data/app/controllers/shipit/api/hooks_controller.rb +4 -3
  16. data/app/controllers/shipit/api/locks_controller.rb +1 -0
  17. data/app/controllers/shipit/api/merge_requests_controller.rb +6 -5
  18. data/app/controllers/shipit/api/outputs_controller.rb +1 -0
  19. data/app/controllers/shipit/api/release_statuses_controller.rb +2 -1
  20. data/app/controllers/shipit/api/rollbacks_controller.rb +1 -0
  21. data/app/controllers/shipit/api/stacks_controller.rb +15 -14
  22. data/app/controllers/shipit/api/tasks_controller.rb +6 -5
  23. data/app/controllers/shipit/api_clients_controller.rb +6 -7
  24. data/app/controllers/shipit/ccmenu_url_controller.rb +3 -2
  25. data/app/controllers/shipit/commit_checks_controller.rb +2 -1
  26. data/app/controllers/shipit/commits_controller.rb +1 -0
  27. data/app/controllers/shipit/continuous_delivery_schedules_controller.rb +42 -0
  28. data/app/controllers/shipit/deploys_controller.rb +6 -5
  29. data/app/controllers/shipit/github_authentication_controller.rb +6 -0
  30. data/app/controllers/shipit/merge_requests_controller.rb +1 -0
  31. data/app/controllers/shipit/merge_status_controller.rb +30 -26
  32. data/app/controllers/shipit/release_statuses_controller.rb +1 -0
  33. data/app/controllers/shipit/repositories_controller.rb +4 -7
  34. data/app/controllers/shipit/rollbacks_controller.rb +2 -1
  35. data/app/controllers/shipit/shipit_controller.rb +1 -0
  36. data/app/controllers/shipit/stacks_controller.rb +27 -31
  37. data/app/controllers/shipit/status_controller.rb +1 -0
  38. data/app/controllers/shipit/tasks_controller.rb +3 -1
  39. data/app/controllers/shipit/webhooks_controller.rb +2 -1
  40. data/app/helpers/shipit/api_clients_helper.rb +1 -0
  41. data/app/helpers/shipit/chunks_helper.rb +3 -1
  42. data/app/helpers/shipit/deploys_helper.rb +7 -3
  43. data/app/helpers/shipit/github_url_helper.rb +5 -4
  44. data/app/helpers/shipit/merge_status_helper.rb +1 -0
  45. data/app/helpers/shipit/shipit_helper.rb +11 -10
  46. data/app/helpers/shipit/stacks_helper.rb +10 -11
  47. data/app/helpers/shipit/tasks_helper.rb +2 -1
  48. data/app/jobs/shipit/background_job/unique.rb +3 -2
  49. data/app/jobs/shipit/background_job.rb +9 -1
  50. data/app/jobs/shipit/cache_deploy_spec_job.rb +2 -1
  51. data/app/jobs/shipit/chunk_rollup_job.rb +1 -0
  52. data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
  53. data/app/jobs/shipit/continuous_delivery_job.rb +5 -0
  54. data/app/jobs/shipit/create_on_github_job.rb +1 -0
  55. data/app/jobs/shipit/create_release_statuses_job.rb +2 -0
  56. data/app/jobs/shipit/deferred_touch_job.rb +1 -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_repository_job.rb +1 -0
  60. data/app/jobs/shipit/destroy_stack_job.rb +36 -15
  61. data/app/jobs/shipit/emit_event_job.rb +1 -0
  62. data/app/jobs/shipit/fetch_commit_stats_job.rb +1 -0
  63. data/app/jobs/shipit/fetch_deployed_revision_job.rb +1 -0
  64. data/app/jobs/shipit/github_sync_job.rb +4 -2
  65. data/app/jobs/shipit/mark_deploy_healthy_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 +1 -0
  68. data/app/jobs/shipit/process_merge_requests_job.rb +2 -0
  69. data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
  70. data/app/jobs/shipit/reap_dead_tasks_job.rb +1 -0
  71. data/app/jobs/shipit/refresh_check_runs_job.rb +1 -0
  72. data/app/jobs/shipit/refresh_github_user_job.rb +1 -0
  73. data/app/jobs/shipit/refresh_merge_request_job.rb +1 -0
  74. data/app/jobs/shipit/refresh_statuses_job.rb +1 -0
  75. data/app/jobs/shipit/setup_github_hook_job.rb +1 -0
  76. data/app/jobs/shipit/update_estimated_deploy_duration_job.rb +1 -0
  77. data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +6 -7
  78. data/app/models/concerns/shipit/deferred_touch.rb +5 -2
  79. data/app/models/shipit/anonymous_user.rb +4 -5
  80. data/app/models/shipit/api_client.rb +5 -3
  81. data/app/models/shipit/application_record.rb +1 -0
  82. data/app/models/shipit/check_run.rb +7 -6
  83. data/app/models/shipit/command_line_user.rb +4 -5
  84. data/app/models/shipit/commit.rb +46 -32
  85. data/app/models/shipit/commit_checks.rb +4 -2
  86. data/app/models/shipit/commit_deployment.rb +7 -5
  87. data/app/models/shipit/commit_deployment_status.rb +5 -3
  88. data/app/models/shipit/commit_message.rb +2 -0
  89. data/app/models/shipit/continuous_delivery_schedule.rb +84 -0
  90. data/app/models/shipit/delivery.rb +5 -4
  91. data/app/models/shipit/deploy.rb +46 -26
  92. data/app/models/shipit/deploy_spec/bundler_discovery.rb +3 -1
  93. data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
  94. data/app/models/shipit/deploy_spec/file_system.rb +48 -17
  95. data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +4 -3
  96. data/app/models/shipit/deploy_spec/lerna_discovery.rb +32 -31
  97. data/app/models/shipit/deploy_spec/npm_discovery.rb +18 -13
  98. data/app/models/shipit/deploy_spec/pypi_discovery.rb +5 -4
  99. data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
  100. data/app/models/shipit/deploy_spec.rb +25 -30
  101. data/app/models/shipit/deploy_stats.rb +6 -1
  102. data/app/models/shipit/duration.rb +5 -3
  103. data/app/models/shipit/ephemeral_commit_checks.rb +8 -7
  104. data/app/models/shipit/github_hook.rb +1 -0
  105. data/app/models/shipit/github_status.rb +1 -0
  106. data/app/models/shipit/hook.rb +9 -7
  107. data/app/models/shipit/membership.rb +1 -0
  108. data/app/models/shipit/merge_request.rb +26 -16
  109. data/app/models/shipit/output_chunk.rb +1 -0
  110. data/app/models/shipit/provisioning_handler.rb +1 -0
  111. data/app/models/shipit/pull_request.rb +2 -2
  112. data/app/models/shipit/record.rb +1 -0
  113. data/app/models/shipit/release_status.rb +4 -3
  114. data/app/models/shipit/repository.rb +12 -11
  115. data/app/models/shipit/review_stack.rb +3 -1
  116. data/app/models/shipit/review_stack_provisioning_queue.rb +2 -2
  117. data/app/models/shipit/rollback.rb +2 -0
  118. data/app/models/shipit/stack.rb +71 -60
  119. data/app/models/shipit/status/common.rb +1 -0
  120. data/app/models/shipit/status/group.rb +5 -3
  121. data/app/models/shipit/status/missing.rb +2 -1
  122. data/app/models/shipit/status/unknown.rb +1 -0
  123. data/app/models/shipit/status.rb +5 -4
  124. data/app/models/shipit/task.rb +40 -31
  125. data/app/models/shipit/task_definition.rb +10 -7
  126. data/app/models/shipit/task_execution_strategy/default.rb +13 -13
  127. data/app/models/shipit/team.rb +13 -12
  128. data/app/models/shipit/undeployed_commit.rb +8 -3
  129. data/app/models/shipit/unlimited_api_client.rb +2 -2
  130. data/app/models/shipit/user.rb +23 -16
  131. data/app/models/shipit/variable_definition.rb +2 -1
  132. data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +1 -0
  133. data/app/models/shipit/webhooks/handlers/handler.rb +1 -0
  134. data/app/models/shipit/webhooks/handlers/membership_handler.rb +1 -0
  135. data/app/models/shipit/webhooks/handlers/pull_request/assigned_handler.rb +10 -10
  136. data/app/models/shipit/webhooks/handlers/pull_request/closed_handler.rb +1 -1
  137. data/app/models/shipit/webhooks/handlers/pull_request/edited_handler.rb +10 -10
  138. data/app/models/shipit/webhooks/handlers/pull_request/label_capturing_handler.rb +2 -2
  139. data/app/models/shipit/webhooks/handlers/pull_request/labeled_handler.rb +2 -2
  140. data/app/models/shipit/webhooks/handlers/pull_request/reopened_handler.rb +1 -1
  141. data/app/models/shipit/webhooks/handlers/pull_request/review_stack_adapter.rb +3 -3
  142. data/app/models/shipit/webhooks/handlers/pull_request/unlabeled_handler.rb +1 -1
  143. data/app/models/shipit/webhooks/handlers/push_handler.rb +2 -1
  144. data/app/models/shipit/webhooks/handlers/status_handler.rb +1 -0
  145. data/app/models/shipit/webhooks.rb +3 -2
  146. data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
  147. data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
  148. data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
  149. data/app/serializers/shipit/commit_serializer.rb +2 -1
  150. data/app/serializers/shipit/deploy_serializer.rb +1 -0
  151. data/app/serializers/shipit/hook_serializer.rb +1 -0
  152. data/app/serializers/shipit/merge_request_serializer.rb +2 -1
  153. data/app/serializers/shipit/rollback_serializer.rb +1 -0
  154. data/app/serializers/shipit/short_commit_serializer.rb +1 -0
  155. data/app/serializers/shipit/stack_serializer.rb +4 -3
  156. data/app/serializers/shipit/tail_task_serializer.rb +4 -1
  157. data/app/serializers/shipit/task_serializer.rb +1 -0
  158. data/app/serializers/shipit/user_serializer.rb +1 -0
  159. data/app/validators/ascii_only_validator.rb +4 -3
  160. data/app/validators/subset_validator.rb +1 -0
  161. data/app/views/shipit/_variables.html.erb +1 -1
  162. data/app/views/shipit/ccmenu/project.xml.builder +2 -1
  163. data/app/views/shipit/continuous_delivery_schedules/show.html.erb +59 -0
  164. data/app/views/shipit/merge_status/failure.html.erb +1 -1
  165. data/app/views/shipit/missing_settings.html.erb +1 -1
  166. data/app/views/shipit/stacks/_settings_form.erb +1 -0
  167. data/config/initializers/inflections.rb +1 -0
  168. data/config/locales/en.yml +1 -0
  169. data/config/routes.rb +21 -18
  170. data/config/secrets.development.example.yml +1 -1
  171. data/config/secrets.development.shopify.yml +1 -1
  172. data/db/migrate/20240821003007_add_continuous_delivery_schedules.rb +13 -0
  173. data/db/migrate/20250207203053_embiggen_github_ids.rb +8 -0
  174. data/lib/shipit/cast_value.rb +1 -0
  175. data/lib/shipit/command.rb +29 -9
  176. data/lib/shipit/commands.rb +4 -2
  177. data/lib/shipit/csv_serializer.rb +3 -0
  178. data/lib/shipit/deploy_commands.rb +2 -1
  179. data/lib/shipit/engine.rb +6 -5
  180. data/lib/shipit/environment_variables.rb +2 -0
  181. data/lib/shipit/first_parent_commits_iterator.rb +2 -3
  182. data/lib/shipit/flock.rb +11 -9
  183. data/lib/shipit/github_app.rb +14 -16
  184. data/lib/shipit/github_http_cache_middleware.rb +1 -0
  185. data/lib/shipit/null_serializer.rb +1 -0
  186. data/lib/shipit/octokit_check_runs.rb +2 -3
  187. data/lib/shipit/octokit_iterator.rb +2 -0
  188. data/lib/shipit/paginator.rb +1 -0
  189. data/lib/shipit/rollback_commands.rb +2 -1
  190. data/lib/shipit/same_site_cookie_middleware.rb +1 -0
  191. data/lib/shipit/simple_message_verifier.rb +1 -0
  192. data/lib/shipit/stack_commands.rb +35 -27
  193. data/lib/shipit/stat.rb +1 -0
  194. data/lib/shipit/task_commands.rb +7 -6
  195. data/lib/shipit/version.rb +2 -1
  196. data/lib/shipit.rb +30 -17
  197. data/lib/tasks/cron.rake +2 -1
  198. data/lib/tasks/dev.rake +3 -2
  199. data/lib/tasks/shipit.rake +3 -2
  200. data/lib/tasks/teams.rake +3 -2
  201. data/test/controllers/api/base_controller_test.rb +1 -0
  202. data/test/controllers/api/ccmenu_controller_test.rb +4 -3
  203. data/test/controllers/api/commits_controller_test.rb +1 -0
  204. data/test/controllers/api/deploys_controller_test.rb +26 -1
  205. data/test/controllers/api/hooks_controller_test.rb +6 -5
  206. data/test/controllers/api/locks_controller_test.rb +1 -0
  207. data/test/controllers/api/merge_requests_controller_test.rb +1 -0
  208. data/test/controllers/api/outputs_controller_test.rb +1 -0
  209. data/test/controllers/api/release_statuses_controller_test.rb +4 -3
  210. data/test/controllers/api/rollback_controller_test.rb +3 -2
  211. data/test/controllers/api/stacks_controller_test.rb +13 -12
  212. data/test/controllers/api/tasks_controller_test.rb +7 -6
  213. data/test/controllers/api_clients_controller_test.rb +10 -10
  214. data/test/controllers/ccmenu_controller_test.rb +1 -0
  215. data/test/controllers/commit_checks_controller_test.rb +1 -0
  216. data/test/controllers/commits_controller_test.rb +9 -8
  217. data/test/controllers/continuous_delivery_schedules_controller_test.rb +66 -0
  218. data/test/controllers/deploys_controller_test.rb +4 -2
  219. data/test/controllers/github_authentication_controller_test.rb +6 -4
  220. data/test/controllers/merge_requests_controller_test.rb +1 -0
  221. data/test/controllers/merge_status_controller_test.rb +5 -4
  222. data/test/controllers/release_statuses_controller_test.rb +1 -0
  223. data/test/controllers/repositories_controller_test.rb +6 -5
  224. data/test/controllers/rollbacks_controller_test.rb +3 -2
  225. data/test/controllers/stacks_controller_test.rb +8 -6
  226. data/test/controllers/status_controller_test.rb +1 -0
  227. data/test/controllers/tasks_controller_test.rb +13 -5
  228. data/test/controllers/webhooks_controller_test.rb +10 -9
  229. data/test/dummy/config/application.rb +2 -1
  230. data/test/dummy/config/initializers/0_load_development_secrets.rb +2 -2
  231. data/test/dummy/config/secrets.development.json +3 -0
  232. data/test/dummy/config/secrets.test.json +21 -0
  233. data/test/dummy/db/schema.rb +33 -6
  234. data/test/fixtures/shipit/commits.yml +7 -7
  235. data/test/fixtures/shipit/stacks.yml +4 -10
  236. data/test/fixtures/shipit/tasks.yml +3 -3
  237. data/test/helpers/api_helper.rb +2 -3
  238. data/test/helpers/fixture_aliases_helper.rb +1 -0
  239. data/test/helpers/hooks_helper.rb +1 -0
  240. data/test/helpers/json_helper.rb +4 -3
  241. data/test/helpers/links_helper.rb +2 -1
  242. data/test/helpers/payloads_helper.rb +1 -0
  243. data/test/helpers/queries_helper.rb +4 -3
  244. data/test/jobs/cache_deploy_spec_job_test.rb +3 -2
  245. data/test/jobs/chunk_rollup_job_test.rb +3 -2
  246. data/test/jobs/deliver_hook_job_test.rb +1 -0
  247. data/test/jobs/destroy_repository_job_test.rb +1 -0
  248. data/test/jobs/destroy_stack_job_test.rb +12 -0
  249. data/test/jobs/emit_event_job_test.rb +1 -0
  250. data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
  251. data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
  252. data/test/jobs/github_sync_job_test.rb +22 -21
  253. data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
  254. data/test/jobs/perform_task_job_test.rb +3 -3
  255. data/test/jobs/process_merge_requests_job_test.rb +7 -6
  256. data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
  257. data/test/jobs/reap_dead_tasks_job_test.rb +1 -0
  258. data/test/jobs/refresh_github_user_job_test.rb +1 -0
  259. data/test/jobs/refresh_status_job_test.rb +1 -0
  260. data/test/jobs/shipit/background_job_test.rb +35 -0
  261. data/test/jobs/shipit/continuous_delivery_job_test.rb +31 -0
  262. data/test/jobs/unique_job_test.rb +3 -1
  263. data/test/jobs/update_github_last_deployed_ref_job_test.rb +1 -0
  264. data/test/middleware/same_site_cookie_middleware_test.rb +2 -2
  265. data/test/models/api_client_test.rb +1 -0
  266. data/test/models/commit_checks_test.rb +2 -1
  267. data/test/models/commit_deployment_status_test.rb +2 -2
  268. data/test/models/commit_deployment_test.rb +4 -3
  269. data/test/models/commits_test.rb +72 -70
  270. data/test/models/delivery_test.rb +3 -2
  271. data/test/models/deploy_spec_test.rb +113 -109
  272. data/test/models/deploy_stats_test.rb +1 -0
  273. data/test/models/deploys_test.rb +65 -56
  274. data/test/models/duration_test.rb +1 -1
  275. data/test/models/github_hook_test.rb +1 -0
  276. data/test/models/hook_test.rb +7 -4
  277. data/test/models/membership_test.rb +1 -0
  278. data/test/models/merge_request_test.rb +26 -20
  279. data/test/models/release_statuses_test.rb +2 -1
  280. data/test/models/rollbacks_test.rb +4 -3
  281. data/test/models/shipit/check_run_test.rb +16 -15
  282. data/test/models/shipit/continuous_delivery_schedule_test.rb +109 -0
  283. data/test/models/shipit/deploy_spec/file_system_test.rb +54 -10
  284. data/test/models/shipit/pull_request_test.rb +9 -9
  285. data/test/models/shipit/repository_test.rb +3 -2
  286. data/test/models/shipit/review_stack_provisioning_queue_test.rb +2 -2
  287. data/test/models/shipit/{stacks_test.rb → stack_test.rb} +48 -34
  288. data/test/models/shipit/webhooks/handlers/pull_request/closed_handler_test.rb +36 -34
  289. data/test/models/shipit/webhooks/handlers/pull_request/label_capturing_handler_test.rb +28 -28
  290. data/test/models/shipit/webhooks/handlers/pull_request/labeled_handler_test.rb +42 -42
  291. data/test/models/shipit/webhooks/handlers/pull_request/opened_handler_test.rb +33 -33
  292. data/test/models/shipit/webhooks/handlers/pull_request/reopened_handler_test.rb +37 -37
  293. data/test/models/shipit/webhooks/handlers/pull_request/review_stack_adapter_test.rb +1 -1
  294. data/test/models/shipit/webhooks/handlers/pull_request/unlabeled_handler_test.rb +44 -42
  295. data/test/models/shipit/webhooks/handlers_test.rb +1 -0
  296. data/test/models/status/group_test.rb +3 -2
  297. data/test/models/status/missing_test.rb +1 -0
  298. data/test/models/status_test.rb +2 -1
  299. data/test/models/task_definitions_test.rb +7 -6
  300. data/test/models/tasks_test.rb +5 -4
  301. data/test/models/team_test.rb +5 -4
  302. data/test/models/undeployed_commits_test.rb +10 -9
  303. data/test/models/users_test.rb +29 -20
  304. data/test/test_command_integration.rb +1 -1
  305. data/test/test_helper.rb +12 -10
  306. data/test/unit/anonymous_user_serializer_test.rb +1 -0
  307. data/test/unit/command_test.rb +10 -1
  308. data/test/unit/commands_test.rb +1 -0
  309. data/test/unit/commit_serializer_test.rb +1 -0
  310. data/test/unit/csv_serializer_test.rb +3 -2
  311. data/test/unit/deploy_commands_test.rb +33 -23
  312. data/test/unit/deploy_serializer_test.rb +1 -0
  313. data/test/unit/environment_variables_test.rb +2 -1
  314. data/test/unit/github_app_test.rb +11 -10
  315. data/test/unit/github_apps_test.rb +19 -18
  316. data/test/unit/github_url_helper_test.rb +1 -0
  317. data/test/unit/line_buffer_test.rb +1 -1
  318. data/test/unit/rollback_commands_test.rb +2 -1
  319. data/test/unit/shipit_helper_test.rb +1 -0
  320. data/test/unit/shipit_test.rb +47 -1
  321. data/test/unit/user_serializer_test.rb +1 -0
  322. data/test/unit/variable_definition_test.rb +4 -3
  323. metadata +61 -47
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -24,7 +25,7 @@ module Shipit
24
25
 
25
26
  body = JSON.parse(payload(:push_master)).to_json
26
27
  assert_enqueued_with(job: GithubSyncJob, args: [stack_id: @stack.id]) do
27
- post :create, body: body, as: :json
28
+ post :create, body:, as: :json
28
29
  end
29
30
  end
30
31
 
@@ -43,7 +44,7 @@ module Shipit
43
44
 
44
45
  body = JSON.parse(payload(:status_master)).merge(repository_params).to_json
45
46
  assert_difference 'commit.statuses.count', 1 do
46
- post :create, body: body, as: :json
47
+ post :create, body:, as: :json
47
48
  end
48
49
 
49
50
  status = commit.statuses.last
@@ -74,7 +75,7 @@ module Shipit
74
75
 
75
76
  body = JSON.parse(payload(:check_suite_master)).to_json
76
77
  assert_enqueued_with(job: RefreshCheckRunsJob) do
77
- post :create, body: body, as: :json
78
+ post :create, body:, as: :json
78
79
  assert_response :ok
79
80
  end
80
81
  end
@@ -107,11 +108,11 @@ module Shipit
107
108
  @request.headers['X-Github-Event'] = 'membership'
108
109
  assert_difference -> { Team.count }, 1 do
109
110
  post :create, as: :json, body: membership_params.merge(team: {
110
- id: 48,
111
- name: 'Ouiche Cooks',
112
- slug: 'ouiche-cooks',
113
- url: 'https://example.com',
114
- }).to_json
111
+ id: 48,
112
+ name: 'Ouiche Cooks',
113
+ slug: 'ouiche-cooks',
114
+ url: 'https://example.com'
115
+ }).to_json
115
116
  assert_response :ok
116
117
  end
117
118
  end
@@ -201,7 +202,7 @@ module Shipit
201
202
  login: 'george',
202
203
  email: 'george@cyclim.se',
203
204
  avatar_url: 'https://avatars.githubusercontent.com/u/42?v=3',
204
- url: 'https://api.github.com/user/george',
205
+ url: 'https://api.github.com/user/george'
205
206
  )
206
207
  end
207
208
  end
@@ -17,6 +17,7 @@ end
17
17
 
18
18
  module Shipit
19
19
  class Application < Rails::Application
20
- config.load_defaults 7.0
20
+ config.load_defaults 8.0
21
+ config.active_record.encryption.support_sha1_for_non_deterministic_encryption = true
21
22
  end
22
23
  end
@@ -2,8 +2,8 @@ local_secrets = Shipit::Engine.root.join('config/secrets.development.yml')
2
2
  if local_secrets.exist?
3
3
  secrets = YAML.load(local_secrets.read).deep_symbolize_keys
4
4
  if Rails.env.development?
5
- Rails.application.secrets.deep_merge!(secrets)
5
+ Rails.application.credentials.deep_merge!(secrets)
6
6
  elsif Rails.env.test?
7
- Rails.application.secrets.merge!(redis_url: secrets[:redis_url])
7
+ Rails.application.credentials.merge!(redis_url: secrets[:redis_url])
8
8
  end
9
9
  end
@@ -0,0 +1,3 @@
1
+ {
2
+ "secret_key_base": "s3cr3ts3cr3ts3cr3ts3cr3ts3cr3ts3cr3t"
3
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "host": "shipit.com",
3
+ "secret_key_base": "s3cr3ts3cr3ts3cr3ts3cr3ts3cr3ts3cr3t",
4
+ "github_api": {
5
+ "token": "t0k3n"
6
+ },
7
+ "github": {
8
+ "domain": null,
9
+ "app_id": 42,
10
+ "installation_id": 43,
11
+ "bot_login": "shipit[bot]",
12
+ "webhook_secret": null,
13
+ "private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA7iUQC2uUq/gtQg0gxtyaccuicYgmq1LUr1mOWbmwM1Cv63+S\n73qo8h87FX+YyclY5fZF6SMXIys02JOkImGgbnvEOLcHnImCYrWs03msOzEIO/pG\nM0YedAPtQ2MEiLIu4y8htosVxeqfEOPiq9kQgFxNKyETzjdIA9q1md8sofuJUmPv\nibacW1PecuAMnn+P8qf0XIDp7uh6noB751KvhCaCNTAPtVE9NZ18OmNG9GOyX/pu\npQHIrPgTpTG6KlAe3r6LWvemzwsMtuRGU+K+KhK9dFIlSE+v9rA32KScO8efOh6s\nGu3rWorV4iDu14U62rzEfdzzc63YL94sUbZxbwIDAQABAoIBADLJ8r8MxZtbhYN1\nu0zOFZ45WL6v09dsBfITvnlCUeLPzYUDIzoxxcBFittN6C744x3ARS6wjimw+EdM\nTZALlCSb/sA9wMDQzt7wchhz9Zh2H5RzDu+2f54sjDh38KqancdT8PO2fAFGxX/b\nqicOVyeZB9gv6MJtJc20olBbuXAeBNfcDABF9oxF+0i+Ssg7B4VXiqgcjtGbr/Og\nqRll7AqyTArVx2xEcVfZxeZ4zGnigzcJq4te7yYpxzwk+RxblkPh54Yt4WxZ+8DI\nRsn3r6ajlpwzpwvsJFU2Txq7xBTzGQMFmy/Pnjk83kP2cogxB2+tRyjITGqTwD8b\ngg9PFCkCgYEA+7u8A0l0Cz6p0SI6c7ftVePVRiIhpawWN7og/wEmI6zUjm/3rA+R\nhrhaVKuOD8QF/HdDsqTck5gjGAjTmJz6r33/cl1Tz+pr62znsrB4r0yMKvQbKN81\nWGaWOsi2+ZXqLNv5h5wpUF0MTKlXHeKnwP5kuEvGwVn6WURFCh6PhLMCgYEA8i5e\nJjulJVGyd5HuoY3xyO7E6DjidsqRnVRq+hYpORjnHvTmSwe4+tH4ha2p9Kv2Y6k3\nC1NYY/fSMQoYCCRaYyJleI+la/9tsZqAmtms4ZB8KhFmPHf9fW75i6G0xKWyZ8K+\nE2Ft/UaEiM282593cguV6+Kt5uExnyPxLLK4FlUCgYEAwRJ/JGI8/7bjFkTTYheq\nj5q75BufhOrU6471acAe2XPgXxLfefdC3Xodxh0CS3NESBvNL4Ikr4sbN37lk4Kq\n/th7iOKtuqUIeru/hZy2I3VpeDRbdGCmEJQ2GwYA2LKztg5Nd0Y9paaIHXAwIfrK\nQUqcQ4HTAk8ZpUeoUBeaaeMCgYANLmbjb9WiPVsYVPIHCwHA7PX8qbPxwT7BsGmO\nKQyfVfKmZa/vH4F67Vi4deZNMdrcO8aKMEQcVM2065a5QrlEsgeR00eupB1lUEJ1\nqylUsZeAdqf43JMIc7TTW77KATa/nQLZbTEeWus1wvTngztuEqFbUGAks9cOkVc8\nFpIcbQKBgQDVIL8gPLmn0f+4oLF8MBC+oxtKpz14X5iJ1saGFkzW5I+nIEskpS0S\nqtirnTCnJFGdCrFwctnxiuiCmyGwpBYdjIfHyvYAHnqAtMnESzCUyeSFZiquVW5W\nMvbMmDPoV27XOHU9kIq6NXtfrkpufiyo6/VEYWozXalxKLNuqLYfPQ==\n-----END RSA PRIVATE KEY-----\n",
14
+ "oauth": {
15
+ "id": "Iv1.bf2c2c45b449bfd9",
16
+ "secret": "ef694cd6e45223075d78d138ef014049052665f1",
17
+ "teams": null
18
+ }
19
+ },
20
+ "redis_url": "redis://127.0.0.1:6379/7"
21
+ }
@@ -10,8 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 2023_07_03_181143) do
14
-
13
+ ActiveRecord::Schema[7.2].define(version: 2025_02_07_203053) do
15
14
  create_table "api_clients", force: :cascade do |t|
16
15
  t.text "permissions", limit: 65535
17
16
  t.integer "creator_id", limit: 4
@@ -52,7 +51,7 @@ ActiveRecord::Schema.define(version: 2023_07_03_181143) do
52
51
  create_table "commit_deployments", force: :cascade do |t|
53
52
  t.integer "commit_id"
54
53
  t.integer "task_id"
55
- t.integer "github_id"
54
+ t.bigint "github_id"
56
55
  t.string "api_url"
57
56
  t.datetime "created_at", null: false
58
57
  t.datetime "updated_at", null: false
@@ -87,6 +86,34 @@ ActiveRecord::Schema.define(version: 2023_07_03_181143) do
87
86
  t.index ["stack_id"], name: "index_commits_on_stack_id"
88
87
  end
89
88
 
89
+ create_table "continuous_delivery_schedules", force: :cascade do |t|
90
+ t.integer "stack_id", null: false
91
+ t.boolean "sunday_enabled", default: true, null: false
92
+ t.time "sunday_start", default: "2000-01-01 00:00:00", null: false
93
+ t.time "sunday_end", default: "2000-01-01 23:59:00", null: false
94
+ t.boolean "monday_enabled", default: true, null: false
95
+ t.time "monday_start", default: "2000-01-01 00:00:00", null: false
96
+ t.time "monday_end", default: "2000-01-01 23:59:00", null: false
97
+ t.boolean "tuesday_enabled", default: true, null: false
98
+ t.time "tuesday_start", default: "2000-01-01 00:00:00", null: false
99
+ t.time "tuesday_end", default: "2000-01-01 23:59:00", null: false
100
+ t.boolean "wednesday_enabled", default: true, null: false
101
+ t.time "wednesday_start", default: "2000-01-01 00:00:00", null: false
102
+ t.time "wednesday_end", default: "2000-01-01 23:59:00", null: false
103
+ t.boolean "thursday_enabled", default: true, null: false
104
+ t.time "thursday_start", default: "2000-01-01 00:00:00", null: false
105
+ t.time "thursday_end", default: "2000-01-01 23:59:00", null: false
106
+ t.boolean "friday_enabled", default: true, null: false
107
+ t.time "friday_start", default: "2000-01-01 00:00:00", null: false
108
+ t.time "friday_end", default: "2000-01-01 23:59:00", null: false
109
+ t.boolean "saturday_enabled", default: true, null: false
110
+ t.time "saturday_start", default: "2000-01-01 00:00:00", null: false
111
+ t.time "saturday_end", default: "2000-01-01 23:59:00", null: false
112
+ t.datetime "created_at", null: false
113
+ t.datetime "updated_at", null: false
114
+ t.index ["stack_id"], name: "index_continuous_delivery_schedules_on_stack_id", unique: true
115
+ end
116
+
90
117
  create_table "deliveries", force: :cascade do |t|
91
118
  t.integer "hook_id", limit: 4, null: false
92
119
  t.string "status", limit: 50, default: "pending", null: false
@@ -106,7 +133,7 @@ ActiveRecord::Schema.define(version: 2023_07_03_181143) do
106
133
 
107
134
  create_table "github_hooks", force: :cascade do |t|
108
135
  t.integer "stack_id", limit: 4
109
- t.integer "github_id", limit: 4
136
+ t.bigint "github_id"
110
137
  t.string "event", limit: 50, null: false
111
138
  t.datetime "created_at"
112
139
  t.datetime "updated_at"
@@ -313,7 +340,7 @@ ActiveRecord::Schema.define(version: 2023_07_03_181143) do
313
340
  end
314
341
 
315
342
  create_table "teams", force: :cascade do |t|
316
- t.integer "github_id", limit: 4
343
+ t.bigint "github_id"
317
344
  t.string "api_url", limit: 255
318
345
  t.string "slug", limit: 255
319
346
  t.string "name", limit: 255
@@ -324,7 +351,7 @@ ActiveRecord::Schema.define(version: 2023_07_03_181143) do
324
351
  end
325
352
 
326
353
  create_table "users", force: :cascade do |t|
327
- t.integer "github_id", limit: 4
354
+ t.bigint "github_id"
328
355
  t.string "name", limit: 255, null: false
329
356
  t.string "email", limit: 255
330
357
  t.string "login", limit: 39
@@ -258,7 +258,7 @@ canaries_fifth:
258
258
  updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
259
259
  created_at: <%= 1.day.ago.to_formatted_s(:db) %>
260
260
 
261
- undeployed_1:
261
+ undeployed1:
262
262
  id: 401
263
263
  sha: 4d9278037b872fd9a6690523e411ecb3aa181355
264
264
  message: "lets go"
@@ -271,7 +271,7 @@ undeployed_1:
271
271
  deletions: 24
272
272
  updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
273
273
 
274
- undeployed_2:
274
+ undeployed2:
275
275
  id: 402
276
276
  sha: 4890fd8b5f2be05d1fedb763a3605ee461c39074
277
277
  message: "sheep it!"
@@ -284,7 +284,7 @@ undeployed_2:
284
284
  deletions: 1
285
285
  updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
286
286
 
287
- undeployed_3:
287
+ undeployed3:
288
288
  id: 403
289
289
  sha: 467578b362bf2b4df5903e1c7960929361c39074
290
290
  message: "fix it!"
@@ -297,7 +297,7 @@ undeployed_3:
297
297
  deletions: 64
298
298
  updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
299
299
 
300
- undeployed_4:
300
+ undeployed4:
301
301
  id: 404
302
302
  sha: 447578b362bf2b4df5903e1c7960929361c3435a
303
303
  message: "Merge pull request #7 from shipit-engine/yoloshipit\n\nyoloshipit!"
@@ -310,7 +310,7 @@ undeployed_4:
310
310
  deletions: 342
311
311
  updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
312
312
 
313
- undeployed_5:
313
+ undeployed5:
314
314
  id: 405
315
315
  sha: 457578b362bf2b4df5903e1c7960929361c3435a
316
316
  message: "Merge pull request #7 from shipit-engine/yoloshipit\n\nyoloshipit!"
@@ -323,7 +323,7 @@ undeployed_5:
323
323
  deletions: 342
324
324
  updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
325
325
 
326
- undeployed_6:
326
+ undeployed6:
327
327
  id: 406
328
328
  sha: 467578b362bf2b4df5903e1c7960929361c3435a
329
329
  message: "Merge pull request #7 from shipit-engine/yoloshipit\n\nyoloshipit!"
@@ -336,7 +336,7 @@ undeployed_6:
336
336
  deletions: 342
337
337
  updated_at: <%= 8.days.ago.to_formatted_s(:db) %>
338
338
 
339
- undeployed_7:
339
+ undeployed7:
340
340
  id: 407
341
341
  sha: 477578b362bf2b4df5903e1c7960929361c3435a
342
342
  message: "Merge pull request #7 from shipit-engine/yoloshipit\n\nyoloshipit!"
@@ -10,8 +10,7 @@ shipit:
10
10
  cached_deploy_spec: |-
11
11
  {
12
12
  "machine": {
13
- "environment": {
14
- }
13
+ "environment": {}
15
14
  },
16
15
  "review": {
17
16
  "checklist": [
@@ -28,9 +27,7 @@ shipit:
28
27
  ]
29
28
  },
30
29
  "dependencies": {
31
- "override": [
32
-
33
- ]
30
+ "override": []
34
31
  },
35
32
  "deploy": {
36
33
  "override": null,
@@ -494,8 +491,7 @@ review_stack:
494
491
  cached_deploy_spec: |-
495
492
  {
496
493
  "machine": {
497
- "environment": {
498
- }
494
+ "environment": {}
499
495
  },
500
496
  "review": {
501
497
  "checklist": [
@@ -512,9 +508,7 @@ review_stack:
512
508
  ]
513
509
  },
514
510
  "dependencies": {
515
- "override": [
516
-
517
- ]
511
+ "override": []
518
512
  },
519
513
  "deploy": {
520
514
  "override": null,
@@ -223,7 +223,7 @@ shipit_with_title_parsing_issue:
223
223
  {
224
224
  "id": "bad-title",
225
225
  "action": "Task with bad title",
226
- "title": "Using the %{WRONG_VARIABLE_NAME}",
226
+ "title": "Using the %<WRONG_VARIABLE_NAME>",
227
227
  "description": "This task uses the wrong variable name",
228
228
  "variables": [
229
229
  {"name": "VARIABLE_NAME", "title": "Any old variable"}
@@ -238,7 +238,7 @@ shipit_with_title_parsing_issue:
238
238
  started_at: <%= (60 - 3).minutes.ago.to_formatted_s(:db) %>
239
239
  ended_at: <%= (60 - 4).minutes.ago.to_formatted_s(:db) %>
240
240
 
241
- shipit_undeployed_1:
241
+ shipit_undeployed1:
242
242
  id: 201
243
243
  user: walrus
244
244
  since_commit_id: 401
@@ -252,7 +252,7 @@ shipit_undeployed_1:
252
252
  started_at: <%= (60 - 1).minutes.ago.to_formatted_s(:db) %>
253
253
  ended_at: <%= (60 - 3).minutes.ago.to_formatted_s(:db) %>
254
254
 
255
- shipit_undeployed_2:
255
+ shipit_undeployed2:
256
256
  id: 202
257
257
  user: walrus
258
258
  since_commit_id: 402
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ApiHelper
3
4
  private
4
5
 
@@ -14,9 +15,7 @@ module Shipit
14
15
  private
15
16
 
16
17
  def process(_action, **kwargs)
17
- if kwargs[:method] != "GET"
18
- kwargs[:as] ||= :json
19
- end
18
+ kwargs[:as] ||= :json if kwargs[:method] != "GET"
20
19
  super
21
20
  end
22
21
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module FixtureAliasesHelper
3
4
  def shipit_deploys(*args)
4
5
  shipit_tasks(*args)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module HooksHelper
3
4
  def expect_hook(event, stack = nil, payload = nil)
4
5
  spy_on_hook
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module JSONHelper
3
4
  UNDEFINED = Object.new.freeze
4
5
  private_constant :UNDEFINED
@@ -8,7 +9,7 @@ module JSONHelper
8
9
  end
9
10
 
10
11
  def assert_json_document(document, path, expected_value = UNDEFINED)
11
- value = follow_path(path.to_s.split('.'), document: document)
12
+ value = follow_path(path.to_s.split('.'), document:)
12
13
  if block_given?
13
14
  yield value
14
15
  elsif expected_value == UNDEFINED
@@ -26,7 +27,7 @@ module JSONHelper
26
27
  path = nil
27
28
  end
28
29
 
29
- value = follow_path(path.to_s.split('.'), document: document)
30
+ value = follow_path(path.to_s.split('.'), document:)
30
31
  case value
31
32
  when Hash
32
33
  assert_equal(keys.sort, value.keys.sort)
@@ -38,7 +39,7 @@ module JSONHelper
38
39
  def assert_no_json(path, document: response.body)
39
40
  segments = path.to_s.split('.')
40
41
  last_segment = segments.pop
41
- leaf = follow_path(segments, document: document)
42
+ leaf = follow_path(segments, document:)
42
43
  case leaf
43
44
  when Hash
44
45
  refute(leaf.key?(last_segment), "Expected #{leaf.inspect} not to include #{last_segment.inspect}")
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module LinksHelper
3
- LINKS_PATTERN = /\<(.*?)\>; rel="(\w+)"/
4
+ LINKS_PATTERN = /<(.*?)>; rel="(\w+)"/
4
5
 
5
6
  def assert_link(rel, url)
6
7
  assert_includes(response_links, rel)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module PayloadsHelper
3
4
  def payload(name)
4
5
  Shipit::Engine.root.join('test/fixtures/payloads', "#{name}.json").read
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module QueriesHelper
3
4
  def assert_no_queries(ignored_sql = nil, &block)
4
5
  assert_queries(0, ignored_sql, &block)
@@ -31,15 +32,14 @@ module QueriesHelper
31
32
  /^BEGIN/,
32
33
  /^COMMIT/,
33
34
  /^SHOW FULL FIELDS/,
34
- /^SHOW TABLES LIKE/,
35
+ /^SHOW TABLES LIKE/
35
36
  ]
36
37
 
37
38
  # FIXME: this needs to be refactored so specific database can add their own
38
39
  # ignored SQL. This ignored SQL is for Oracle.
39
40
  ignored_sql.concat([/^select .*nextval/i, /^SAVEPOINT/, /^ROLLBACK TO/, /^\s*select .* from all_triggers/im])
40
41
 
41
- attr_reader :ignore
42
- attr_reader :log
42
+ attr_reader :ignore, :log
43
43
 
44
44
  def initialize(ignore = nil)
45
45
  @ignore = ignore || self.class.ignored_sql
@@ -52,6 +52,7 @@ module QueriesHelper
52
52
  # FIXME: this seems bad. we should probably have a better way to indicate
53
53
  # the query was cached
54
54
  return if values[:name] == 'CACHE' || ignore.any? { |x| x =~ sql }
55
+
55
56
  log << sql
56
57
  end
57
58
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -10,12 +11,12 @@ module Shipit
10
11
  end
11
12
 
12
13
  test "#perform checkout the repository to the last recorded commit and cache the deploy spec" do
13
- @stack.update!(cached_deploy_spec: DeploySpec.new('review' => { 'checklist' => %w(foo bar) }))
14
+ @stack.update!(cached_deploy_spec: DeploySpec.new('review' => { 'checklist' => %w[foo bar] }))
14
15
 
15
16
  dir = Pathname(Dir.tmpdir)
16
17
  StackCommands.any_instance.expects(:with_temporary_working_directory).with(commit: @last_commit).yields(dir)
17
18
 
18
- assert_equal %w(foo bar), @stack.checklist
19
+ assert_equal %w[foo bar], @stack.checklist
19
20
  @job.perform(@stack)
20
21
  assert_equal [], @stack.reload.checklist
21
22
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -25,7 +26,7 @@ module Shipit
25
26
  test "#peform ignores non-finished jobs" do
26
27
  logger = mock
27
28
  logger.expects(:error).once
28
- @job.stubs(logger: logger)
29
+ @job.stubs(logger:)
29
30
 
30
31
  @task.update_attribute(:status, :pending)
31
32
 
@@ -35,7 +36,7 @@ module Shipit
35
36
  test "#perform ignores tasks already rolled up" do
36
37
  logger = mock
37
38
  logger.expects(:error).once
38
- @job.stubs(logger: logger)
39
+ @job.stubs(logger:)
39
40
 
40
41
  @task.rolled_up = true
41
42
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -24,5 +25,16 @@ module Shipit
24
25
  @job.perform(stack)
25
26
  end
26
27
  end
28
+
29
+ test "perform destroys the all Status of related commits" do
30
+ stack = shipit_stacks(:shipit)
31
+ Shipit.legacy_github_api.stubs(:remove_hook)
32
+
33
+ assert_changes -> { Status.count }, 'Statuses are not deleted' do
34
+ @job.perform(stack)
35
+ end
36
+
37
+ refute_predicate Status.count, :zero?
38
+ end
27
39
  end
28
40
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -46,34 +47,34 @@ module Shipit
46
47
  ["yoloshipit!", false],
47
48
  ["fix it!", false],
48
49
  ["sheep it!", false],
49
- ["lets go", false],
50
+ ["lets go", false]
50
51
  ]
51
- assert_equal initial_queue, @stack.undeployed_commits.map { |c| [c.title, c.locked?] }
52
+ assert_equal(initial_queue, @stack.undeployed_commits.map { |c| [c.title, c.locked?] })
52
53
 
53
54
  author = stub(
54
55
  id: 1234,
55
56
  login: 'bob',
56
57
  name: 'Bob the Builder',
57
58
  email: 'bob@bob.com',
58
- date: '2011-04-14T16:00:49Z',
59
+ date: '2011-04-14T16:00:49Z'
59
60
  )
60
61
  @job.expects(:fetch_missing_commits).returns([
61
- [
62
- stub(
63
- sha: '36514755579bfb5bc313f403b216f4347a027990',
64
- author: author,
65
- committer: author,
66
- stats: nil,
67
- commit: stub(
68
- sha: '36514755579bfb5bc313f403b216f4347a027990',
69
- message: 'Revert "fix it!"',
70
- author: author,
71
- committer: author,
72
- ),
73
- ),
74
- ],
75
- shipit_commits(:fifth),
76
- ])
62
+ [
63
+ stub(
64
+ sha: '36514755579bfb5bc313f403b216f4347a027990',
65
+ author:,
66
+ committer: author,
67
+ stats: nil,
68
+ commit: stub(
69
+ sha: '36514755579bfb5bc313f403b216f4347a027990',
70
+ message: 'Revert "fix it!"',
71
+ author:,
72
+ committer: author
73
+ )
74
+ )
75
+ ],
76
+ shipit_commits(:fifth)
77
+ ])
77
78
  @job.perform(stack_id: @stack.id)
78
79
 
79
80
  final_queue = [
@@ -82,9 +83,9 @@ module Shipit
82
83
  ["yoloshipit!", true],
83
84
  ["fix it!", true],
84
85
  ["sheep it!", false],
85
- ["lets go", false],
86
+ ["lets go", false]
86
87
  ]
87
- assert_equal final_queue, @stack.reload.undeployed_commits.map { |c| [c.title, c.locked?] }
88
+ assert_equal(final_queue, @stack.reload.undeployed_commits.map { |c| [c.title, c.locked?] })
88
89
  end
89
90
 
90
91
  test "#fetch_missing_commits returns the commits in the reverse order if it doesn't know the parent" do
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
5
6
  class PerformTaskJobTest < ActiveSupport::TestCase
6
7
  class FakeSuccessfulCommand
7
- def run
8
- end
8
+ def run; end
9
9
 
10
10
  def success?
11
11
  true
@@ -94,7 +94,7 @@ module Shipit
94
94
  end
95
95
 
96
96
  test "marks deploy as `failed` if a command exit with an error code" do
97
- Shipit::TaskExecutionStrategy::Default.any_instance.expects(:capture!).at_least_once.raises(Command::Error.new('something'))
97
+ Shipit::TaskExecutionStrategy::Default.any_instance.stubs(:capture!).at_least_once.raises(Command::Error.new('something'))
98
98
  @job.perform(@deploy)
99
99
  assert_equal 'failed', @deploy.reload.status
100
100
  end