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
@@ -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
@@ -17,11 +18,11 @@ module Shipit
17
18
  end
18
19
 
19
20
  test "load split the words by comma" do
20
- assert_loaded %w(foo bar), 'foo,bar'
21
+ assert_loaded %w[foo bar], 'foo,bar'
21
22
  end
22
23
 
23
24
  test "dump join the words with a comma" do
24
- assert_dumped 'foo,bar', %w(foo bar)
25
+ assert_dumped 'foo,bar', %w[foo bar]
25
26
  end
26
27
 
27
28
  private
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -14,7 +15,7 @@ module Shipit
14
15
  rollback_steps!: ['bundle exec cap $ENVIRONMENT deploy:rollback'],
15
16
  machine_env: { 'GLOBAL' => '1' },
16
17
  directory: nil,
17
- clear_working_directory?: true,
18
+ clear_working_directory?: true
18
19
  )
19
20
  @commands.stubs(:deploy_spec).returns(@deploy_spec)
20
21
 
@@ -27,7 +28,7 @@ module Shipit
27
28
 
28
29
  command = @commands.fetch_commit(@deploy.until_commit)
29
30
 
30
- assert_equal %W(git fetch origin --quiet --tags #{@deploy.until_commit.sha}), command.args
31
+ assert_equal %W[git fetch origin --quiet --tags --force #{@deploy.until_commit.sha}], command.args
31
32
  end
32
33
 
33
34
  test "#fetch_commit calls git fetch in git_path directory if repository cache already exist" do
@@ -44,7 +45,7 @@ module Shipit
44
45
 
45
46
  command = @commands.fetch_commit(@deploy.until_commit)
46
47
 
47
- expected = %W(git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path})
48
+ expected = %W[git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path}]
48
49
  assert_equal expected, command.args.map(&:to_s)
49
50
  end
50
51
 
@@ -54,7 +55,7 @@ module Shipit
54
55
 
55
56
  command = @commands.fetch_commit(@deploy.until_commit)
56
57
 
57
- expected = %W(git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path})
58
+ expected = %W[git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path}]
58
59
  assert_equal expected, command.args
59
60
  end
60
61
 
@@ -62,12 +63,12 @@ module Shipit
62
63
  @stack.git_path.stubs(:exist?).returns(true)
63
64
  @stack.git_path.stubs(:empty?).returns(false)
64
65
  StackCommands.any_instance.expects(:git_cmd_succeeds?)
65
- .with(@stack.git_path)
66
- .returns(false)
66
+ .with(@stack.git_path)
67
+ .returns(false)
67
68
 
68
69
  command = @commands.fetch_commit(@deploy.until_commit)
69
70
 
70
- expected = %W(git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path})
71
+ expected = %W[git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path}]
71
72
  assert_equal expected, command.args
72
73
  end
73
74
 
@@ -76,12 +77,12 @@ module Shipit
76
77
  @stack.git_path.stubs(:exist?).returns(true)
77
78
  @stack.git_path.stubs(:empty?).returns(false)
78
79
  StackCommands.any_instance.expects(:git_cmd_succeeds?)
79
- .with(@stack.git_path)
80
- .returns(false)
80
+ .with(@stack.git_path)
81
+ .returns(false)
81
82
 
82
83
  command = @commands.fetch_commit(@deploy.until_commit)
83
84
 
84
- expected = %W(git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path})
85
+ expected = %W[git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path}]
85
86
  assert_equal expected, command.args
86
87
  end
87
88
 
@@ -91,7 +92,7 @@ module Shipit
91
92
 
92
93
  command = @commands.fetch_commit(@deploy.until_commit)
93
94
 
94
- expected = %W(git clone --quiet --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path})
95
+ expected = %W[git clone --quiet --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path}]
95
96
  assert_equal expected, command.args.map(&:to_s)
96
97
  end
97
98
 
@@ -121,7 +122,7 @@ module Shipit
121
122
 
122
123
  command = @commands.fetch
123
124
 
124
- assert_equal %w(git fetch origin --quiet --tags master), command.args
125
+ assert_equal %w[git fetch origin --quiet --tags --force master], command.args
125
126
  end
126
127
 
127
128
  test "#fetch calls git fetch in git_path directory if repository cache already exist" do
@@ -138,7 +139,7 @@ module Shipit
138
139
 
139
140
  command = @commands.fetch
140
141
 
141
- expected = %W(git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path})
142
+ expected = %W[git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path}]
142
143
  assert_equal expected, command.args.map(&:to_s)
143
144
  end
144
145
 
@@ -148,7 +149,7 @@ module Shipit
148
149
 
149
150
  command = @commands.fetch
150
151
 
151
- expected = %W(git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path})
152
+ expected = %W[git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path}]
152
153
  assert_equal expected, command.args
153
154
  end
154
155
 
@@ -156,12 +157,12 @@ module Shipit
156
157
  @stack.git_path.stubs(:exist?).returns(true)
157
158
  @stack.git_path.stubs(:empty?).returns(false)
158
159
  StackCommands.any_instance.expects(:git_cmd_succeeds?)
159
- .with(@stack.git_path)
160
- .returns(false)
160
+ .with(@stack.git_path)
161
+ .returns(false)
161
162
 
162
163
  command = @commands.fetch
163
164
 
164
- expected = %W(git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path})
165
+ expected = %W[git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path}]
165
166
  assert_equal expected, command.args
166
167
  end
167
168
 
@@ -170,12 +171,12 @@ module Shipit
170
171
  @stack.git_path.stubs(:exist?).returns(true)
171
172
  @stack.git_path.stubs(:empty?).returns(false)
172
173
  StackCommands.any_instance.expects(:git_cmd_succeeds?)
173
- .with(@stack.git_path)
174
- .returns(false)
174
+ .with(@stack.git_path)
175
+ .returns(false)
175
176
 
176
177
  command = @commands.fetch
177
178
 
178
- expected = %W(git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path})
179
+ expected = %W[git clone --quiet --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path}]
179
180
  assert_equal expected, command.args
180
181
  end
181
182
 
@@ -185,7 +186,16 @@ module Shipit
185
186
 
186
187
  command = @commands.fetch
187
188
 
188
- expected = %W(git clone --quiet --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path})
189
+ expected = %W[git clone --quiet --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path}]
190
+ assert_equal expected, command.args.map(&:to_s)
191
+ end
192
+
193
+ test "#fetch does not use --quit if git_progress_output is enabled" do
194
+ Shipit.stubs(:git_progress_output).returns(true)
195
+
196
+ command = @commands.fetch
197
+
198
+ expected = %W[git clone --single-branch --recursive --branch master #{@stack.repo_git_url} #{@stack.git_path}]
189
199
  assert_equal expected, command.args.map(&:to_s)
190
200
  end
191
201
 
@@ -209,7 +219,7 @@ module Shipit
209
219
  clone_args = [
210
220
  'git', 'clone', '--quiet',
211
221
  '--local', '--origin', 'cache',
212
- @stack.git_path.to_s, @deploy.working_directory,
222
+ @stack.git_path.to_s, @deploy.working_directory
213
223
  ]
214
224
  assert_equal clone_args, commands.first.args
215
225
  assert_equal ['git', 'remote', 'add', 'origin', @stack.repo_git_url.to_s], commands.second.args
@@ -224,7 +234,7 @@ module Shipit
224
234
  command = @commands.checkout(@deploy.until_commit)
225
235
  checkout_args = [
226
236
  'git', '-c', 'advice.detachedHead=false', 'checkout', '--quiet',
227
- @deploy.until_commit.sha,
237
+ @deploy.until_commit.sha
228
238
  ]
229
239
  assert_equal checkout_args, command.args
230
240
  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
@@ -6,7 +7,7 @@ module Shipit
6
7
  def setup
7
8
  variable_defs = [
8
9
  { "name" => "FOO", "title" => "Set to 0 to foo", "default" => 1 },
9
- { "name" => "BAR", "title" => "Set to 1 to bar", "default" => 0 },
10
+ { "name" => "BAR", "title" => "Set to 1 to bar", "default" => 0 }
10
11
  ]
11
12
  @variable_definitions = variable_defs.map(&VariableDefinition.method(:new))
12
13
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -45,7 +46,7 @@ module Shipit
45
46
  }
46
47
  ]
47
48
  }
48
- ),
49
+ )
49
50
  )
50
51
  assert_equal "operational", app.api_status[:status]
51
52
  end
@@ -78,15 +79,15 @@ module Shipit
78
79
  config = {
79
80
  app_id: "test_id",
80
81
  installation_id: "test_installation_id",
81
- private_key: "test_private_key",
82
+ private_key: "test_private_key"
82
83
  }
83
84
  initial_token = OpenStruct.new(
84
85
  token: "some_initial_github_token",
85
- expires_at: Time.now.utc + 60.minutes,
86
+ expires_at: Time.now.utc + 60.minutes
86
87
  )
87
88
  second_token = OpenStruct.new(
88
89
  token: "some_new_github_token",
89
- expires_at: initial_token.expires_at + 60.minutes,
90
+ expires_at: initial_token.expires_at + 60.minutes
90
91
  )
91
92
  auth_payload = "test_auth_payload"
92
93
 
@@ -116,15 +117,15 @@ module Shipit
116
117
  config = {
117
118
  app_id: "test_id",
118
119
  installation_id: "test_installation_id",
119
- private_key: "test_private_key",
120
+ private_key: "test_private_key"
120
121
  }
121
122
  initial_token = OpenStruct.new(
122
123
  token: "some_initial_github_token",
123
- expires_at: Time.now.utc + 60.minutes,
124
+ expires_at: Time.now.utc + 60.minutes
124
125
  )
125
126
  second_token = OpenStruct.new(
126
127
  token: "some_new_github_token",
127
- expires_at: initial_token.expires_at + 60.minutes,
128
+ expires_at: initial_token.expires_at + 60.minutes
128
129
  )
129
130
  auth_payload = "test_auth_payload"
130
131
 
@@ -161,14 +162,14 @@ module Shipit
161
162
  config = {
162
163
  app_id: "test_id",
163
164
  installation_id: "test_installation_id",
164
- private_key: "test_private_key",
165
+ private_key: "test_private_key"
165
166
  }
166
167
  initial_cached_token = Shipit::GitHubApp::Token.new("some_initial_github_token", Time.now.utc - 1.minute)
167
168
  initial_cached_token.instance_variable_set(:@refresh_at, nil)
168
169
 
169
170
  second_token = OpenStruct.new(
170
171
  token: "some_new_github_token",
171
- expires_at: initial_cached_token.expires_at + 60.minutes,
172
+ expires_at: initial_cached_token.expires_at + 60.minutes
172
173
  )
173
174
  auth_payload = "test_auth_payload"
174
175
 
@@ -202,7 +203,7 @@ module Shipit
202
203
  end
203
204
 
204
205
  def default_config
205
- Rails.application.secrets.github.deep_dup
206
+ Rails.application.credentials.github.deep_dup
206
207
  end
207
208
  end
208
209
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -69,7 +70,7 @@ module Shipit
69
70
  }
70
71
  ]
71
72
  }
72
- ),
73
+ )
73
74
  )
74
75
  assert_equal "operational", app(@organization).api_status[:status]
75
76
  end
@@ -79,15 +80,15 @@ module Shipit
79
80
  config = {
80
81
  app_id: "test_id",
81
82
  installation_id: "test_installation_id",
82
- private_key: "test_private_key",
83
+ private_key: "test_private_key"
83
84
  }
84
85
  initial_token = OpenStruct.new(
85
86
  token: "some_initial_github_token",
86
- expires_at: Time.now.utc + 60.minutes,
87
+ expires_at: Time.now.utc + 60.minutes
87
88
  )
88
89
  second_token = OpenStruct.new(
89
90
  token: "some_new_github_token",
90
- expires_at: initial_token.expires_at + 60.minutes,
91
+ expires_at: initial_token.expires_at + 60.minutes
91
92
  )
92
93
  auth_payload = "test_auth_payload"
93
94
 
@@ -117,15 +118,15 @@ module Shipit
117
118
  config = {
118
119
  app_id: "test_id",
119
120
  installation_id: "test_installation_id",
120
- private_key: "test_private_key",
121
+ private_key: "test_private_key"
121
122
  }
122
123
  initial_token = OpenStruct.new(
123
124
  token: "some_initial_github_token",
124
- expires_at: Time.now.utc + 60.minutes,
125
+ expires_at: Time.now.utc + 60.minutes
125
126
  )
126
127
  second_token = OpenStruct.new(
127
128
  token: "some_new_github_token",
128
- expires_at: initial_token.expires_at + 60.minutes,
129
+ expires_at: initial_token.expires_at + 60.minutes
129
130
  )
130
131
  auth_payload = "test_auth_payload"
131
132
 
@@ -162,14 +163,14 @@ module Shipit
162
163
  config = {
163
164
  app_id: "test_id",
164
165
  installation_id: "test_installation_id",
165
- private_key: "test_private_key",
166
+ private_key: "test_private_key"
166
167
  }
167
168
  initial_cached_token = Shipit::GitHubApp::Token.new("some_initial_github_token", Time.now.utc - 1.minute)
168
169
  initial_cached_token.instance_variable_set(:@refresh_at, nil)
169
170
 
170
171
  second_token = OpenStruct.new(
171
172
  token: "some_new_github_token",
172
- expires_at: initial_cached_token.expires_at + 60.minutes,
173
+ expires_at: initial_cached_token.expires_at + 60.minutes
173
174
  )
174
175
  auth_payload = "test_auth_payload"
175
176
 
@@ -275,7 +276,7 @@ module Shipit
275
276
  }
276
277
  ]
277
278
  }
278
- ),
279
+ )
279
280
  )
280
281
  assert_equal "operational", app(@organization).api_status[:status]
281
282
  end
@@ -285,15 +286,15 @@ module Shipit
285
286
  config = {
286
287
  app_id: "test_id",
287
288
  installation_id: "test_installation_id",
288
- private_key: "test_private_key",
289
+ private_key: "test_private_key"
289
290
  }
290
291
  initial_token = OpenStruct.new(
291
292
  token: "some_initial_github_token",
292
- expires_at: Time.now.utc + 60.minutes,
293
+ expires_at: Time.now.utc + 60.minutes
293
294
  )
294
295
  second_token = OpenStruct.new(
295
296
  token: "some_new_github_token",
296
- expires_at: initial_token.expires_at + 60.minutes,
297
+ expires_at: initial_token.expires_at + 60.minutes
297
298
  )
298
299
  auth_payload = "test_auth_payload"
299
300
 
@@ -323,15 +324,15 @@ module Shipit
323
324
  config = {
324
325
  app_id: "test_id",
325
326
  installation_id: "test_installation_id",
326
- private_key: "test_private_key",
327
+ private_key: "test_private_key"
327
328
  }
328
329
  initial_token = OpenStruct.new(
329
330
  token: "some_initial_github_token",
330
- expires_at: Time.now.utc + 60.minutes,
331
+ expires_at: Time.now.utc + 60.minutes
331
332
  )
332
333
  second_token = OpenStruct.new(
333
334
  token: "some_new_github_token",
334
- expires_at: initial_token.expires_at + 60.minutes,
335
+ expires_at: initial_token.expires_at + 60.minutes
335
336
  )
336
337
  auth_payload = "test_auth_payload"
337
338
 
@@ -368,14 +369,14 @@ module Shipit
368
369
  config = {
369
370
  app_id: "test_id",
370
371
  installation_id: "test_installation_id",
371
- private_key: "test_private_key",
372
+ private_key: "test_private_key"
372
373
  }
373
374
  initial_cached_token = Shipit::GitHubApp::Token.new("some_initial_github_token", Time.now.utc - 1.minute)
374
375
  initial_cached_token.instance_variable_set(:@refresh_at, nil)
375
376
 
376
377
  second_token = OpenStruct.new(
377
378
  token: "some_new_github_token",
378
- expires_at: initial_cached_token.expires_at + 60.minutes,
379
+ expires_at: initial_cached_token.expires_at + 60.minutes
379
380
  )
380
381
  auth_payload = "test_auth_payload"
381
382
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -13,7 +13,7 @@ module Shipit
13
13
  end
14
14
 
15
15
  test "splits up multiple lines" do
16
- assert_equal(%w(a b), @buffer.buffer("a\nb\n").to_a)
16
+ assert_equal(%w[a b], @buffer.buffer("a\nb\n").to_a)
17
17
  assert_predicate(@buffer, :empty?)
18
18
  end
19
19
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'test_helper'
3
4
 
4
5
  module Shipit
@@ -13,7 +14,7 @@ module Shipit
13
14
  rollback_steps!: ['bundle exec cap $ENVIRONMENT deploy:rollback'],
14
15
  machine_env: { 'GLOBAL' => '1' },
15
16
  directory: nil,
16
- clear_working_directory?: true,
17
+ clear_working_directory?: true
17
18
  )
18
19
  @commands.stubs(:deploy_spec).returns(@deploy_spec)
19
20
 
@@ -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
@@ -9,7 +10,6 @@ module Shipit
9
10
 
10
11
  test ".github uses indifferent access to search through the Github applications" do
11
12
  secrets = ActiveSupport::OrderedOptions.new
12
- secrets.merge!(Rails::Secrets.parse(['test/dummy/config/secrets.yml'], env: Rails.env))
13
13
  secrets.merge!(YAML.load_file('test/dummy/config/secrets_double_github_app.yml'))
14
14
  secrets.deep_symbolize_keys!
15
15
  Shipit.stubs(:secrets).returns(secrets)
@@ -29,5 +29,51 @@ module Shipit
29
29
  Shipit.github.stubs(:oauth_teams).returns(['shopify/developers'])
30
30
  assert_equal(['shopify/developers'], Shipit.github_teams.map(&:handle))
31
31
  end
32
+
33
+ class RedisTest < self
34
+ setup do
35
+ @client = mock(:client)
36
+ end
37
+
38
+ teardown do
39
+ Shipit.instance_variables.each(&Shipit.method(:remove_instance_variable))
40
+ Redis.unstub(:new)
41
+ end
42
+
43
+ test ".redis should build a new redis client" do
44
+ Redis.expects(:new).with(
45
+ has_entries(
46
+ url: Shipit.redis_url.to_s,
47
+ reconnect_attempts: 3,
48
+ reconnect_delay: 0.5,
49
+ reconnect_delay_max: 1
50
+ )
51
+ ).returns(@client)
52
+
53
+ assert_equal(@client, Shipit.redis)
54
+ end
55
+
56
+ test ".redis should return an existing redis client" do
57
+ Redis.expects(:new).once.returns(@client)
58
+
59
+ 2.times do
60
+ assert_equal(@client, Shipit.redis)
61
+ end
62
+ end
63
+
64
+ test ".redis= should set the redis client" do
65
+ Shipit.redis = @client
66
+
67
+ assert_equal(@client, Shipit.redis)
68
+ end
69
+
70
+ test ".redis= should set and memoize the redis client" do
71
+ Shipit.redis = @client
72
+
73
+ Redis.expects(:new).never
74
+
75
+ assert_equal(@client, Shipit.redis)
76
+ end
77
+ end
32
78
  end
33
79
  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
@@ -7,9 +8,9 @@ module Shipit
7
8
  @attributes = {
8
9
  "name" => "Variable name",
9
10
  "title" => "Variable title",
10
- "default" => "Variable default",
11
+ "default" => "Variable default"
11
12
  }
12
- @select = %w(var1 var2 var3)
13
+ @select = %w[var1 var2 var3]
13
14
  end
14
15
 
15
16
  test "#initialize sets up the expected values" do
@@ -53,7 +54,7 @@ module Shipit
53
54
  test "#default_provided?" do
54
55
  attributes = {
55
56
  "name" => "Variable name",
56
- "title" => "Variable title",
57
+ "title" => "Variable title"
57
58
  }
58
59
  subject = Shipit::VariableDefinition.new(attributes)
59
60
  refute subject.default_provided?